뷰 지정
컨트롤러 처리 메서드는 처리 결과를 보여줄 뷰 이름이나 View 객체를 리턴하고, DispatcherServlet은 뷰 이름이나 View 객체를 이용해서 뷰를 생성하게 된다. 뷰 이름은 직접 또는 자동으로 설정할 수 있다.
1. 뷰 이름 명시적 지정: ModelAndView와 String 리턴 타입
뷰 이름을 명시적으로 리턴하려면 ModelAndView나 String을 리턴해야 한다.
(1) ModelAndView 클래스의 생성자
@RequestMapping("/hello.do")
public ModelAndView index(){
ModelAndView mav = new ModelAndView("hello");
...
return mav;
}
(2) setViewName() 메서드
@RequestMapping("/hello.do")
public ModelAndView index(){
ModelAndView mav = new ModelAndView();
mav.setViewName("hello");
...
return mav;
}
(3) 리턴 타입이 String인 경우
@RequestMapping("/help/main.do")
public String helpMain(ModelMap model){
...
return "help/main";
}
리턴 타입이 ModelAndView가 아니고 String 타입인 경우
2. 뷰 이름 자동 지정
다음의 경우 RequestToViewNameTranslator를 이용해서 URL로부터 뷰 이름을 결정한다.
- 리턴 타입이 Model이나 Map인 경우
- 리턴 타입이 void 이면서 ServletResponse나 HttpServletResponse 타입의 파라미터가 없는 경우
스프링 설정 파일에 RequestToViewNameTranslator 빈이 존재하지 않을 경우 기본적으로 DefalutRequestToViewNameTranslator를 사용한다. 이 클래스는 요청 URI로부터 맨 앞의 슬래시와 확장자를 제외한 나머지 부분을 뷰 이름으로 사용한다. ( 더 정확하게는 전체 경로를 사용하지 않도록 설정한 경우 서블릿 경로를 제외한 나머지 경로가 사용된다.)
@RequestMapping("/search/game2.do")
public Map<String, Object> search(){
HashMap<String, Object> model = new HashMap<String, String>();
...
return model;
}
위 코드는 뷰에 전달된 모델 데이터를 갖고 있는 Map을 리턴하고 있다. 이 경우 RequestToViewNameTranslator를 이용하여 결과를 보여줄 뷰 이름을 결정하게 되는데,
DefaultRequestToViewNameTranslator가 사용될 경우 다음과 같이 URL로부터 뷰 이름이 결정된다.
/search/game2.do --> search/game2
3. 리다이렉트 뷰
뷰 이름에 "redirect:" 접두어를 붙이면, 지정한 페이지로 리다리렉트 된다. 리다이렉트 URL은 다음과 같이 두 가지 방식으로 입력할 수 있다.
- redirect:/bbs/list: 현재 서블릿 컨텍스트에 대한 상대적인 경로로 리다이렉트
- redirect:http://host/bbs/list: 지정한 절대 URL로 리다이렉트
ModelAndView mav = new ModelAndView();
mav.setViewName("redirect:error.do");
return mav;
'Programing > Spring' 카테고리의 다른 글
[Spring] 요청 URI 매칭 (0) | 2014.12.18 |
---|---|
[Spring] 모델 생성하기 (1) | 2014.12.18 |
[Spring] 컨트롤러 메서드의 파라미터 타입 (2) | 2014.12.18 |
[Spring] HTML 폼과 자바빈 객체 (0) | 2014.12.18 |
[Spring] 자바 코드 기반 설정 (0) | 2014.12.17 |