Spring/Study 2020. 4. 18. 21:28

(공감과 댓글 하나는 글쓴이에게 큰 힘이 됩니다.)

 

리다이렉트(Redirect)

- 리다이렉트(Redirect)는 컨트롤러에서 뷰를 분기하는 방법으로, 현재 페이지에서 특정 페이지로 전환하는 기능이다.

Model

@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";
}
cs

ModelAndView

@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;
}
cs

 

 

인터셉트(Intercept)

- 리다이렉트를 사용해야 하는 경우가 많은 경우 HandlerInterceptor를 이용하여 효율적으로 관리할 수 있다.

- preHandle() : Controller 작업 전

- postHandle() : Controller 작업 후

- afterCompletion() : Controller와 View 작업 후

MemberLoginInterceptor.java

public class MemberLoginInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession(false);
 
        if(session != null) {
            Object obj = session.getAttribute("member");
            if(obj != nullreturn true;
        }
        
        response.sendRedirect(request.getContextPath() + "/");
        return false;
    }
    
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        super.postHandle(request, response, handler, modelAndView);
    }
    
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        super.afterCompletion(request, response, handler, ex);
    }
}
cs

servlet-context.xml (2개의 방법 모두 사용가능)

<interceptors>
    <interceptor>
        <mapping path="/member/modifyForm"/>
        <mapping path="/member/removeForm"/>
        <beans:bean class="com.bs.lec21.member.MemberLoginInterceptor"/>
    </interceptor>
</interceptors>
cs

 

<interceptors>
    <interceptor>
        <mapping path="/member/**"/>
        <exclude-mapping path="/member/joinForm"/>
        <exclude-mapping path="/member/join"/>
        <exclude-mapping path="/member/loginForm"/>
        <exclude-mapping path="/member/login"/>
        <exclude-mapping path="/member/logout"/>
        <exclude-mapping path="/member/modify"/>
        <exclude-mapping path="/member/remove"/>
        <beans:bean class="com.bs.lec21.member.MemberLoginInterceptor"/>
    </interceptor>
</interceptors>

Colored by Color Scripter

cs

posted by DevMoomin
: