728x90
Servlet에서 변수를 지정하고 객체에 담아 포워드하려면 객체가 어디까지 유지되는지 반드시 알아야한다. Servlet 스코프(scope)는 서블릿 속성에 접근할 수 있는 범위(Data 생성~소멸)를 의미하며 웹 어플리케이션에는 4개의 객체 범위가 존재한다.
1. Page scope
2. Request scope
3. Session scope
4. Application scope
Request scope
- 클라이언트로부터 하나의 요청이 들어와 서버가 처리한 후 응답을 보낼 때까지 사용 가능
- HttpServletRequest 객체 사용
request.setAttribute(String key, Object value); // 저장
request.getAttribute(String key, Object value); // 조회
request.removeAttribute(String key, Object value); // 삭제
Session scope
- 하나의 브라우저 당 1개의 session 객체 생성
- 브라우저를 열고 요청한 후 브라우저가 종료될 때까지 사용 가능
➡️ 브라우저의 lifecycle과 일치 - HttpSession 객체 사용
HttpSession session = request.getSession();
session.setAttribute(String key, Object value); // 저장
session.getAttribute(String key, Object value); // 조회
session.removeAttribute(String key, Object value); // 삭제
Application scope
- 하나의 애플리케이션 당 1개의 application 객체 생성
- 웹 애플리케이션이 생성된 후 종료될 때까지 사용 가능
- ServletContext 객체 사용
ServletContext ctx = getServletContext();
ctx.setAttribute(String key, Object value); // 저장
ctx.getAttribute(String key, Object value); // 조회
ctx.removeAttribute(String key, Object value); // 삭제
테스트
setAttribute()
를 이용해 값을 저장
// SetServlet.java
package com.servlet;
@WebServlet("/SetServlet")
public class SetServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("SetServlet");
// 1. request scope 에 값 저장
request.setAttribute("request", "request scope");
// 2. session scope 에 값 저장
HttpSession session = request.getSession();
session.setAttribute("session", "session scope");
// 3. application scope 에 값 저장
ServletContext ctx = getServletContext();
ctx.setAttribute("application", "application scope");
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
getAttribute()
를 이용해 값 조회
package com.servlet;
@WebServlet("/GetServlet")
public class GetServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("GetServlet");
// 1. request scope에 값 조회
String x = (String) request.getAttribute("request");
// 2. session scope에 값 조회
HttpSession session = request.getSession();
String x2 = (String)session.getAttribute("session");
// 3. application scope에 값 조회
ServletContext ctx = getServletContext();
String x3 = (String)ctx.getAttribute("application");
System.out.println("request: " + x);
System.out.println("session: " + x2);
System.out.println("application: " + x3);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
요청 및 응답 이후이기 때문에 request는 범위를 벗어나 null 값으로 출력된다.
※ scope의 범위는 page < request < session < application 순이다.
728x90
'WebServer > JSP&Servlet' 카테고리의 다른 글
[Servlet] 서블릿과 DB 연동 (MyBatis 활용) (0) | 2023.08.15 |
---|---|
[Servlet] Filter API (0) | 2023.08.10 |
[Servlet] Servlet 핵심 객체 - ServletConfig , ServletContext (0) | 2023.08.10 |
[Servlet] Servlet 요청 및 응답 처리 (0) | 2023.08.09 |
[Servlet] Servlet 컨테이너와 계층구조, 라이프 사이클(Lifecycle) (0) | 2023.08.09 |