안녕하세요 이번 글에서는 제목처럼 servletContext & HttpSession & Request 세 가지에 대하여 간단히 알아보겠습니다.
1. servletContext
먼저 servletContext 란 컨테이너가 web.xml 상의 정보를 읽어 서블릿을 초기화 할때 모든 서블릿에서 사용할 수 있도록 생성되는 것입니다. 그 바로 아래 각각의 서블릿에서만 사용할 수 있는 servletConfig라는 것도 생성되지만 오늘은 servletContext에 대해서만 알아보겠습니다.
servletContexts 애플리케이션을 사용하는 누구라도 접근이 가능합니다.
예를 들어
사용자 1 요청 --> age=20 --> servletContext의 age 값을 20으로 지정 --> 호출 --> 20
사용자 2 요청 --> age=10 --> servletContext의 age 값을 10으로 지정 --> 호출 --> 10
사용자 1 요청 --> 다시 호출 --> 10
이런 식으로 접근할 수 있는 누구에게나 하나의 값을 보내 주기 때문에 공통으로 사용되는 값이나 변하지 않는 값을 세팅하는 것이 좋습니다.
2. Session
session은 간단히 설명하면 범위는 애플리케이션 전체에서 사용 가능하지만 요청을 보낸 해당 클라이언트에서만 사용할 수 있습니다.(session에 대한 단원에서 자세하게 작성하겠습니다.. 책이 그렇게 돼있어요ㅎㅎ)
*주의할 점 : 하나의 클라이언트에서 두 개의 브라우저를 열어도 기본적으로 하나의 세션을 사용하기 때문에 브라우저 단위가 아니라 클라이언트 단위라서 작성했습니다.
3. request
앞 글에서도 언급한 적 있지만 request는 클라이언트가 보낸 요청을 컨테이너에서 HttpRequest 객체로 만들어 서블릿에서 전달해 주는 것입니다. request는 해당 요청에 대한 스레드가 생성될 때 같이 생기고 요청이 끝나고 스레드가 죽으면 같이 소멸됩니다.
4. 사용범위
5. 사용방법
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>SampleProject</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<!-- servletContext 선언방법 -->
<context-param>
<param-name>age</param-name>
<param-value>20</param-value>
</context-param>
<!-- servletContext 선언방법 -->
<!-- servletConfig 선언방법 -->
<servlet>
<servlet-name>test22.do</servlet-name>
<servlet-class>com.main.controller.mainController</servlet-class>
<init-param>
<param-name>age</param-name>
<param-value>20</param-value>
</init-param>
</servlet>
<!-- servletConfig 선언방법 -->
</web-app>
servletContext는 이런 식으로 web.xml 파일에 선언하여 사용할 수 있습니다.
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//애플리케이션 내 모은 서블릿 에서 사용 가능하다
ServletContext sc = request.getServletContext();
//web.xml 에서 셋팅한 값을 꺼내는방법
String age = (String)sc.getAttribute("age");
System.out.println("age");
//서블릿에서 ServletContext 셋팅
sc.setAttribute("name", "servletContext");
//요청을 보낸 클라이언트의 세션 에서만 사용
HttpSession session = request.getSession();
session.setAttribute("name", "session");
//클라이언트가 보낸 요청으로 생선된 시점의 스레드 에서만 사용가능
request.setAttribute("name", "request");
//RequestDispatcher 객체를 호출하여 요청을 보낼 jsp 경로를 호출하여 줍니다.
RequestDispatcher view = request.getRequestDispatcher("view/next.jsp");
//초기화한 객체를 forward 방식으로 request , response를 jsp에서 사용할 수 있도록 넘겨 줍니다.
view.forward(request, response);
}
위처럼 각각의 객체를 선언한 뒤 값을 세팅하여 줍니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<form action="test.do" method="POST">
<input type="submit" value="서브밋 버튼!">
</form>
</body>
</html>
index.jsp는 이런 식으로 세팅하여 줍니다.
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String servlettName = (String)request.getServletContext().getAttribute("name");
String sessionName = (String)request.getSession().getAttribute("name");
String requestName = (String)request.getAttribute("name");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<ul>
<li><%=servlettName %></li>
<li><%=sessionName %></li>
<li><%=requestName %></li>
</ul>
</body>
</html>
요청을 받을 next.jsp를 위와 같이 코딩하여 줍시다.
* getAttribute()는 기본적으로 반환 값이 Object 형태이기 때문에 (String)을 앞에 선언하여 캐스팅하여줍니다.*
서버를 실행시켜봅시다.
브라우저를 새로 하나 열어준 뒤 위 url을 그대로 복사하여 호출하여 봅시다.
그럼 session값은 어떻게 확인하면 좋을까요?? 브라우저를 따로 켜도 하나의 세션 값을 바라보고 있어서 혼자서 테스트할 때는 정확하게 servletContext와 session의 차이를 확인하기가 쉽지 않습니다.
하지만!! 구글에서 제공하는 서비스를 이용하면 간단히 확인할 수 있습니다.
부족한 글이지만 봐주셔서 감사합니다 ^^
'Servlet & Jsp' 카테고리의 다른 글
[JSP 에서 자바코드사용(스크립틀릿)] - Head Frist Servlet & Jsp (0) | 2020.12.25 |
---|---|
[ HttpSession 교환방식 & TimeOut 설정] - Head Frist Servlet & Jsp (0) | 2020.12.24 |
[sendRedirect 사용하기] - Head Frist Servlet & Jsp (0) | 2020.12.21 |
[sendRedirect 사용하기] - Head Frist Servlet & Jsp (0) | 2020.12.21 |
[Selvet HttpResponse 사용하기] - Head Frist Servlet & Jsp (0) | 2020.12.21 |