[서블릿/JSP] HttpServletResponse의 sendRedirect() 사용시 문제점
HttpServletResponse의 sendRedirect() 사용시 문제점
JSP/Servlet 환경에서 특정 URL로 리다이렉트 시키고 싶은 경우에는 HttpServletResponse의 sendRedirect(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{
..리다이렉트 수행하지 않는 경우의 흐름..
}
참고글
'Servlet&Jsp' 카테고리의 다른 글
| [서블릿/JSP] 웹어플리케이션(ServletContext)과 세션(Session)의 관계 (0) | 2019.01.03 |
|---|---|
| [서블릿/JSP] 세션을 이용한 로그인, 로그아웃 구현하기 (0) | 2019.01.02 |
| [서블릿/JSP] 요청 파라미터 한글 인코딩 처리 필터(Filter) 구현하기 (1) | 2018.12.25 |
| [서블릿/JSP] 쿠키가 차단되는 환경일때 SESSIONID URL로 넘기기 (URL ReWrite) (0) | 2018.12.18 |
| [서블릿/JSP] 세션(session)의 마지막 접근시간 및 유효시간에 대해 (0) | 2018.12.18 |
도로락
WriterIT, 프로그래밍, 컴퓨터 활용 정보 등을 위한 블로그