스프링 프레임워크에서 컨트롤러의 메서드가 리턴하는 타입에 따라 포워딩과 리다이렉션 구현 방법을 간단히 기술한다. 단, 지원되는 resolver는 설정되어 있다고 가정 따로 언급하지 않는다.
return String
return "/member/login.do"; // 포워딩
return "redirect:/member/login.do"; // 리다이렉션
리다이렉트땐 'redirect:' 이후 꺽쇠(/)의 여부에 따라 클라이언트에 전달할 경로가 달라질 수 있다. 가령 Context 경로가 '/FO'이고 컨트롤러에 매핑된 경로의 최상단('/FO' 바로 다음)이 '/member'라고 했을 때 'redirect:member/login.do' 를 리턴하면 실제 전달되는 경로는 '/bo/member/member/login.do' 가 된다.
return ModelAndView
ModelAndView mv = new ModelAndView();
mv.setViewName("/member/memberDetail");
mv.addAttribute("msg", helloService.getMessage());
//mav.addObject("msg", helloService.getMessage());
return mav;
// 혹은
// req.setAttribute("msg", helloService);
// return new ModelAndView("/member/memberDetail");
ModelAndView mv = new ModelAndView();
mv.setViewName("redirect:/member/memberDetail.do?memberNumber=2");
return mv;
// 혹은
// ModelAndView mv = new ModelAndView();
// mv.setView(new RedirectView("/member/memberDetail.do?memberNumber=2", true));
// return mv;
ModelAndView
ModelAndView는 포워드냐 리다이렉트냐 가 아니라
ModelAndView를 이용하여 포워드로도 리다이렉트로도 보낼 수 있는거다.
포워드
ModelAndView mv = new ModelAndView();
vm.setViewName("/notice/noticeList");
vm.addAttribute("message", msgService.getMessage());
return vm;
or
req.setAttrebute("message", msgService.getMessage());
return new ModelAndView("/notice/noticeList");
리다이렉트
ModelAndView mv = new ModelAndView();
vm.setViewName("redirect:/notice/noticeList.do?noticeNumber=2");
return vm;
or
ModelAndView mv = new ModelAndView();
vm.setView(new RedirectView("/notice/noticeList.do?noticeNumber=2",true));
return vm;
'프로그래밍 > Spring & MyBatis' 카테고리의 다른 글
MODEL 기술정리 (0) | 2018.02.10 |
---|---|
VO(Value Object)와 DTO(Data Transfer Object) (0) | 2018.02.07 |
maven ojdbc6.jar load (0) | 2018.01.30 |
custom annotation 만들기 (1) | 2018.01.27 |
스프링 정리 잘 되어 있는 곳 (0) | 2018.01.26 |