본문 바로가기
TIL

[TIL] JSP Session, JSESSIONID, sendRedirect() 와 forward() 차이점

by thegreatjy 2023. 11. 14.
728x90

Session

클라이언트가 웹 브라우저를 통해 서버에 접속한 후, 용무를 처리하고 웹 브라우저를 닫아 서버와의 접속을 종료하는 하나의 단위

세션은 클라이언트가 서버에 접속해 있는 동안 상태를 유지하기 위함

유지 시간 설정

xml

/WEB-INF/web.xml

<web-app>
    ...
    <session-config>
        <session-timeout>20</session-timeout>
    </session-config>
</web-app>

유지 시간을 분 단위로 설정한다.

JSP 파일 내부

session 내장 객체가 제공하는 setMaxInactiveInterval()

<%
    session.setMaxInactiveInterval(1000);
%>

초 단위로 설정한다.

JSESSIONID

톰캣 컨테이너에서 새로운 웹 브라우저가 접속하면 세션을 유지하기 위해 자동으로 생성한다.

요청을 보낸 웹 브라우저가 현재 연결되어 있는지(세션이 살아 있는지) 확인하는 데 이용된다.

서버는 JSESSIONID를 통해 세션 영역에 상태를 유지해야 하는 값을 저장한다.

  1. 웹 브라우저가 처음 접속하면 톰캣 서버는 세션을 새로 생성한다. 그리고 응답할 때, 세션 아이디를 값으로 갖는 JSESSIONID 쿠키를 응답 헤더에 담아 웹 브라우저에 응답을 보낸다.
  2. 웹 브라우저는 재요청 시마다 JSESSIONID를 요청 헤더에 추가하여 보낸다.
  3. 서버는 요청 헤더에 포함된 JSESSIONID로 해당 요청이 기존 세션에서 이어진 것임을 알 수 있다.

sendRedirect() VS forward()

sendRedirect(url)

  • 서버가 요청에 대한 응답을 한 후, 클라이언트는 url로 이동
  • 클라이언트에서 실행
  • 클라이언트와 서버가 통신을 종료한다.
  • 이동경로가 url로 변화한다.
  • 데이터 전달 X

RequestDispatcher(url).forward(request, response)

  • 요청을 다른 자원(url)로 전달한다.
  • 페이지 이동 + 제어 흐름
  • 이동경로가 url로 변화 X
  • 서버가 실행
  • 데이터 전달 O
  • request, response 객체를 다른 자원(url)에 전달한다.
  • 다른 자원의 수행 결과를 클라이언트의 요청에 대한 응답으로 사용
728x90