HttpServletResponse의 sendRedirect() 사용시 문제점
JSP/Servlet 환경에서 특정 URL로 리다이렉트 시키고 싶은 경우에는 HttpServletResponse의 sendRedirect(String location) 메서드를 사용하게 됩니다.
response.sendRedirect("/login.html");                                                    
cs


그러나 여기에는 주의사항이 있습니다. sendRedirect() 이후에 실행될 코드가 있는경우 리다이렉트 되지 않고 해당 코드를 모두 실행한 뒤 리다이렉트 된다는 점입니다.
response.sendRedirect("/login.html");                                                    
..이후 코드가 있는 경우 모두 실행..
..코드가 모두 처리된 후 리다이렉트됨..
cs


이와같은 문제가 발생하는 원인은 sendRedirect()의 동작 방식에 있습니다. sendRedirect()는 진행되던 처리를 끝내고 클라이언트에게 리다이렉트 응답을 하는것이 아닙니다.

sendRedirect(location) 메서드는 내부적으로 HTTP 응답메시지의 Location 헤더값을 메서드 호출시 지정한 매개변수로 설정하고 응답 STATUS CODE를 302로 변경하고 출력 버퍼로 변경내용을 출력하는 기능을 수행합니다. 즉 브라우저가 응답을 받았을때 지정한 Location으로 리다이렉트 하도록 헤더와 상태코드만 변경하는것일 뿐 그 이외의 행동은 하지 않기때문에 이후 코드가 수행되는것입니다.


해결방안
따라서 경우에 따라 두가지 해결방안이 있습니다. 첫번째로는 모든 처리를 미리 끝마치고 리다이렉트를 수행하는 방법입니다.
..필요한 코드를 모두 수행..                                                                
response.sendRedirect("/login.html");
cs


두번째로는 리다이렉트를 수행해야 하는 경우와 아닌 경우를 if문으로 분기처리해주는 방법입니다.
if(리다이렉트 해야 하는경우){                                                                
    response.sendRedirect("/login.html");
}else{
    ..리다이렉트 수행하지 않는 경우의 흐름..
}
cs


참고글
블로그 이미지

도로락

IT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그

,