만약 회원정보를 수정하려고 할 떄에 로그인이 되어있는 상태라면 수정페이지로 이동하겠지만
그렇지 않다면 다른 페이지 예로들어 메인 페이지로 하던가 해야할 것이다.
이 때에 다른 페이지로 전환하는 리다이렉트 기능을 이용한다.
@RequestMapping(value = "/modifyForm")
public String modifyForm(Model model, HttpServletRequest request) {
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
if(null == member) {
return "redirect:/";
} else {
model.addAttribute("member", service.memberSearch(member));
}
return "/member/modifyForm";
}
간단히 다음과 같이 return 에 redirect:/ 를 사용해주면 된다.
@RequestMapping("/removeForm")
public ModelAndView removeForm(HttpServletRequest request) {
ModelAndView mav = new ModelAndView();
HttpSession session = request.getSession();
Member member = (Member) session.getAttribute("member");
if(null == member) {
mav.setViewName("redirect:/");
} else {
mav.addObject("member", member);
mav.setViewName("/member/removeForm");
}
return mav;
}
다음은 mav 형식의 경우이다. serViewName에 적어주면 된다.
이런 중복된 경우가 너무나도 많아질 경우에는 한 번에 처리를 할 수 있는데
바로 HandlerInterceptor 이다. 이것은 DispathcerServlet 이후에 생기게 되는데,
preHandle() 은 컨트롤 핸들러 들어가기 이전에
postHandle() 은 컨트롤 핸들러 나오고 나서
afterCompletion() 은 view로 가기 이전에 실행된다. 보통 preHandle()를 많이 쓴다.
HandlerInterceptorAdapter 를 extends 받고 preHandle 를 정의 한다.
앞서 수행했던 if 문들을 이 곳에서 수행해주는 것이다. session 을 받아와서 유무 확인 후 있으면 getAttribute로 해당 세션이 맞는지 확인 후 맞다면 true return 틀리다면 sendRedirect 해준 후 false 리턴
저기서 request.getContextPath() 는 프로젝트의 path 를 가지고오는 명령어이다.
후에 servlet-context에 등록을 해주어야한다.
mapping path 로 등록을 해줄 수도 있고 밑에 주석에 있는 것처럼 member로 들어오는 것을 모두 등록해준 후
예외만 저렇게 처리해줄 수도 있다.
'공부 기록들' 카테고리의 다른 글
2020.04.10 static에 대해서 & MVC(1) (0) | 2020.04.10 |
---|---|
2020.04.07 Spring(7) - JDBC 및 오류(ORA-28040,ORA-01017),템플릿, 커넥션풀 (0) | 2020.04.07 |
2020.04.05 Spring(5) (0) | 2020.04.06 |
2020.04.03 Spring (4) (0) | 2020.04.03 |
2020.04.01 SQL (0) | 2020.04.02 |