📕🐘 도로락 - 코끼리를 냉장고에 넣는 방법
Servlet&Jsp | 2018. 12. 26. 15:44

[서블릿/JSP] HttpServletResponse의 sendRedirect() 사용시 문제점

HttpServletResponse의 sendRedirect() 사용시 문제점

JSP/Servlet 환경에서 특정 URL로 리다이렉트 시키고 싶은 경우에는 HttpServletResponsesendRedirect(String location) 메서드를 사용하게 됩니다.

response.sendRedirect("/login.html");

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

response.sendRedirect("/login.html");
..이후 코드가 있는 경우 모두 실행..
..코드가 모두 처리된 후 리다이렉트됨..

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

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

해결방안

따라서 경우에 따라 두 가지 해결방안이 있습니다. 첫 번째로는 모든 처리를 미리 끝마치고 리다이렉트를 수행하는 방법입니다.

..필요한 코드를 모두 수행..
response.sendRedirect("/login.html");

두 번째로는 리다이렉트를 수행해야 하는 경우와 아닌 경우를 if문으로 분기처리해주는 방법입니다.

if(리다이렉트 해야 하는경우){
    response.sendRedirect("/login.html");
}else{
    ..리다이렉트 수행하지 않는 경우의 흐름..
}

참고글

도로락

도로락

Writer

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