서블릿 컨텍스트

의문

최범균의 JSP 2.3 웹 프로그래밍: 기초부터 중급까지

 

위 책의 세션에 해당하는 내용을 공부하다가 이런 내용이 있었다.

컨텍스트 경로가 다르면 session 객체도 다르다.

 

그리고 책에 예시처럼 실제 경로를 다르게 하여 비교해보니 세션에 대한 키 값이 저장된 브라우저의 쿠키 값이 달랐다.

/chap09/viewCookie.jsp와  /chap10/viewCookie.jsp의 session 쿠키 값

 

구체적으로 왜 이런 현상이 발생하는지 궁금하여 짧지만 글로 작성해보았다.

서블릿

서블릿이란 무엇인가? 초기 웹은 단순히 정적인 웹 페이지를 보여주는 것에 그쳤다. 하지만 기술이 발전하고 사용자들의 요구수준이 높아지면서 동적인 웹 페이지를 제공할 필요성이 대두됐다. JAVA에서 이를 위해 사용하는 것이 바로 서블릿이다. 서블릿은 클라이언트에서 온 HTTP 요청을 적절히 처리해 다시 클라이언트로 반환하는 역할을 수행한다. 톰캣이 이런 서블릿들을 관리해주는 서블릿 컨테이너라 불린다.

출처: https://velog.io/@falling_star3/Tomcat-%EC%84%9C%EB%B8%94%EB%A6%BFServlet%EC%9D%B4%EB%9E%80

서블릿 컨텍스트

톰캣 서버를 구동하고 기본포트가 8080이라 했을 때 http://localhost:8080를 웹 브라우저의 주소창에 치면 실제 톰캣 서버 폴더 경로는 webapps/ROOT이다. 톰캣 서버는 기본설정에 따라 webapps/ROOT의 index.jsp를 반환하여 보여준다. 그렇다면 webapps/apple 디렉토리에 index.jsp가 있을 때 http://localhost:8080/apple을 주소창에 치면 webapps/apple/index.jsp를 반환한다. 그럼 각 index.jsp 파일에 아래처럼 코드를 작성하고 새로고침을 해보면 어떤 결과가 나올까?

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
	String path = pageContext.getServletContext().getContextPath();
%>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
path: <%= path %>
</body>
</html>

 

servletContext의 ContextPath 값

위 사진과 같이 컨텍스트 path값이 다르다. 즉 webapps 하위 경로에 있는 디렉토리 별로 서블릿 컨텍스트가 할당되는 것이다. 브라우저는 기본적으로 sessionId에 대한 쿠키 값의 path를 지정할 때 서블릿 컨텍스트의 컨텍스트 path 값으로 지정한다. 아래 사진은 브라우저의 콘솔창에서 확인한 쿠키 정보이다. 보는 바와 같이 sessionId의 쿠키 경로에 컨텍스트 path값이 들어가 있다. 

 

브라우저 콘솔에서 확인한 정보

결론

정리해보자면 webapps 하위 디렉토리 별로 서블릿 컨텍스트 객체는 각각 할당된다. 즉 각 경로 별로 다른 웹 어플리케이션이라 할 수 있다. 세션은 하나의 웹 어플리케이션에서 사용자와의 상태를 유지하고자 사용하는 것이므로 컨텍스트 경로가 다르면 세션도 다르다.

'Java' 카테고리의 다른 글

인터페이스와 추상 클래스  (0) 2023.11.30
동등성과 동일성에 대해  (0) 2023.11.30
String의 equals와 compareTo 메서드 비교  (0) 2023.11.30
JVM 구조와 메모리  (0) 2023.11.30
JAVA에서 정렬하는 방법  (0) 2023.11.30