본문 바로가기

JSP/response.encodeURL()

response.encodeURL(), encodeRedirectURL()

response.encodeURL(), response.encodeRedirectURL()의 차이점


JSP나 Servlet 안에서 사용할 수 있는 이들 2개의 메소드는 이용자의 웹브라우저가 쿠키 저장을 허용하지 않을 때 요청 URL뒤에 Session ID 를 추가하기 위해서 사용된다. 그런데 다음과 같이 테스트를 해보면 이들 2개의 메소드가 완전히 동일하게 기능하고 있는 것을 확인할 수 있다


<%=response.encodeRedirectURL("redirect2.jsp")%><br>

<%=response.encodeURL("redirect2.jsp")%><br>


위의 코드가 실행되면 웹브라우저에 다음과 같이 세션 아이디가 추가된 URL이 출력되므로 완전히 동일하게 기능하고 있다는 것을 알 수 있다.

redirect2.jsp;jsessionid=8131C6607614E9749F20F9037CD89074
redirect2.jsp;jsessionid=8131C6607614E9749F20F9037CD89074


위와 같이 URL 뒤에 세션 아이디가 추가되어 있으면 Tomcat 과 같은 서블릿 컨테이너는 요청 URL 뒤에 있는 세션 아이디를 추출하여 서버 상에 존재하는 세션 아이디와 비교하여 이용자를 식별할 수 있기 때문에 이용자의 웹브라우저가 쿠키를 키원하지 않거나 쿠키저장을 허용하지 않더라도 서블릿 컨테이너는 이용자의 세션을 구별할 수 있게 된다.



요청 URL에 세션 아이디를 추가하는 실제예제

<% String linkURL = response.encodeRedirectURL("redirect2.jsp"); %>

아래처럼 링크에 포함된 세션 아이디는 이용자가 클릭하면 요청URL이 서버에 전달되므로 서버에서

이용자의 세션 아이디를 추출할 수 있다. 이 경우에는 encodeURL()을 사용해도 동일하게 기능한다<br>


<a href="<%=linkURL%>">두번째 페이지로 이동</a><br>

혹은 response.sendRedirect()의 아규먼트에 사용하여 세션 아이디를 서버에 전달할  수도 있다.

<% response.sendRedirect(linkURL) %>


위의 예제는 이용자의 웹브라우저가 쿠키저장을 허용하지 않을 경우에 사용한다면 의미가 있지만 그렇지 않은 환경이라면 의미가 없다.



encodeURL(), encodeRedirectURL() 차이점

encodeURL()은 이용자의 웹브라우저가 쿠키저장을 허용하는 경우에는 세션 아이디를 URL 뒤에 추가하지 않는다.

encodeRedirectURL()은 다른 웹 컨텍스트(웹 애플리케이션)으로 요청이 전달되는 경우에는 세션 아디를 URL 뒤에 추가하지 않는다.