서블릿에 보면 HttpServletRequest를 통해 요청에 대한 여러 정보를 가져올 수 있다.
어떤 정보를 포함하는지는 HTTP 프로토콜에 대해 이해를 하고 있다면 쉽게 짐작할 수 있다.
(혹시 모른다면 RFC 2616을 참고, 영문의 스압에 구토가 난다면 한글을 번역해 놓은 곳도 있으니 => http://aamyaa.egloos.com/category/HTTP%201.1/list/2 로)
웹 페이지 개발을 하다보면 폼에 의한 사용자 조작을 Java 코드로 받아올 일이 생기게 된다.
서블릿을 사용한다면 HttpServletRequest의 (사실 ServletRequest에서 정의) getParameter 메소드를 이용했을 것이다.
ServletRequest <- HttpServletRequest 구조이다.(인터페이스의 상속)
public interface HttpServletRequest extends ServletRequest
사례)
안모 후배의 코드를 어깨너머로 보고 있으니 다음과 같았다.
request 객체에서 파라메터를 가져오고, 기본 값으로 빈 문자열을 넣어주는 부분이 가득 차고 넘쳤다.
게다가 ModelAndView로 map을 넘기는데,
String groupIdFlag = req.getParameter("groupIdFlag")==null?"off" :req.getParameter("groupIdFlag");
map.put("groupIdFlag", groupIdFlag);
를 한 줄로
String groupIdFlag = req.getParameter("groupIdFlag")==null?"off" :req.getParameter("groupIdFlag"); map.put("groupIdFlag", groupIdFlag);
열심히 손 편집을 하고 있었다.
뭔가 딱한 마음이 들어 짝 프로그래밍을 했다.
리팩토링하고 난 결과는 아래와 같다.
extract method 리팩토링 기법을 사용했는데, processParameter라는 메소드를 만들어서 기능을 뺀 것이다.
private String processParameter(HttpServletRequest request, String parameterName, String defaultValue, HashMap<String,String> map)
{
String parameterCandidate = request.getParameter(parameterName);
String parameterSelected = (parameterCandidate == null) ? defaultValue : parameterCandidate;
if (map != null) {
map.put(parameterName, parameterSelected);
}
return parameterSelected;
}
반복적으로 컨트롤러 본체에 들어있는 로직이 빠지면서 가로 길이가 줄어 들었다.
앞에 두 이미지에 보면 세로로 선이 있는데 컬럼 80을 보여주는 선(Window > Preferences > General > Editors > Text Editors : [ ] Show print marging에 체크)인데, 이전에는 선을 넘어 횡 스크롤을 해야 했지만 이제는 스크롤 할 필요가 없어졌다.
하지만 이것은 리팩토링을 보여주기 위함이고 실제 스프링을 사용하고 있다면 이렇게 손수 파라메터 처리해주는 것을 작성할 필요가 없다. @RequestParam으로 동일한 기능을 할 수 있기 때문이다.
샘플)
@RequestMapping(value = "/loginProcess.do", method = RequestMethod.POST)
public ModelAndView login(
HttpServletRequest request,
@RequestParam("id") String id,
@RequestParam("password") String password) {
Account account = (Account) loginService.authenticate(id,password);
...
login이라는 메소드에 보면 가 있음을 알 수 있다.
그냥 문자열 하나면 넘기면 getParameter의 키로 사용이 된다.
세부적인 사용은 아래와 같이 프로퍼티를 지정해 줌으로서 할 수 있다.
@RequestParam(value = "status", required = false, defaultValue = "STATUS")
참고:
http://renzizzang.tistory.com/entry/Spring-Framework-5-Annotation-based-Controller
'Programing > JVM(Java, Kotlin)' 카테고리의 다른 글
Live Webinar Series - Introduction to Spring Framework 4.0 (0) | 2014.01.11 |
---|---|
Spring Framework - Quick Start (0) | 2014.01.08 |
2014년 스프링 학습 (목록) (0) | 2014.01.07 |
이클립스의 자바빈 getter/setter 생성 버그 (0) | 2013.05.24 |
스프링(Spring)-pom.xml (0) | 2012.11.14 |