본문 바로가기

프로그래밍/Spring & MyBatis

( String / ModelAndView ) forward , redirect

스프링 프레임워크에서 컨트롤러의 메서드가 리턴하는 타입에 따라 포워딩과 리다이렉션 구현 방법을 간단히 기술한다. 단, 지원되는 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