1. Scope의 종류
웹 프로그래밍을 하다보면 JSP의 내장 객체와 같이 이미 약속된 객체들이 존재한다. 이때 이 객체들에도 "범위(Scope)"가 존재하며 Application, Session, Request, Page 총 4가지 종류가 있다.
- Page scope는 Servlet이든 JSP든 선언된 페이지 내에서만 사용할 수 있는 것으로 가장 작은 단위이다.
- Request scope은 client로부터 요청이 들어와서 서버가 어떤 일을 수행하여 응답을 보낼 때까지 계속 사용할 수 있는 scope를 말한다.
- Session scope는 세션 객체가 생성돼서 이 세션 객체가 소멸될 때까지 사용할 수 있는 scope를 말한다. 즉, 요청이 하나가 아니라 여러 개의 요청이 들어와도 계속 남아있는 Scope이다.
- Application scope는 하나의 application이 생성돼서 이 application이 소멸될 때까지 계속 유지하고 있는 scope로 가장 큰 단위다.
2. Page Scope
page scope는 PageContext라는 추상 클래스를 사용한다. JSP 페이지에서 pageContext라는 낵장 객체로 사용할 수 있다. 실제로 JSP에서 변형된 Servlet파일을 보면 아래와 같이 선언되어 있는 것을 확인할 수 있다.
이후 JSP의 코드들이 변형된 부분에서 해당 객체를 아래와 같이 초기화한다.
page scope역시 이전에 request.setAttribute(), request.getAttribute()를 사용한 것과 같이 사용하면 된다. 단, page scope는 지역변수처럼 사용된다. 따라서 이 페이지 자체에서 변수를 선언하여 값을 저장해 사용하는 것이나 pageContext를 사용하여 setAttribute를 활용하는 것은 크게 차이점이 없지만 이후 EL, JSTL을 사용할 때 조금 편하게 사용할 수 있다는 장점을 가진다.
3. Request Scope
request scope는 http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 때 사용한다. forward의 경우를 생각해보자. 클라이언트가 요청을 하나 보내면 Servlet 하나가 요청을 받게 된다. 이후 Servlet에서 작업을 수행하여 얻어낸 값이 있으면 Request 객체에 값을 저장하여 다른 Servlet이나 JSP에 Request에 저장된 값을 전달할 수 있다. 이와 같은 것을 Request scope라고 부른다. request scope를 위해 Servlet은 HttpServletRequest 객체를 사용하며 값을 저장할 때는 setAttribute(), 읽을 때는 getAttribute()를 사용한다. JSP의 경우 request 내장 변수를 사용하면 된다.
- [참고] 모든 요청이 들어올 때 WAS는 request, response 객체를 만든다. 그리고 이들을 Servlet이 요청하면 service 메서드의 인자로 넘겨준다.
4. Session Scope
하나의 서버에는 많은 클라이언가 연결될 수 있다. 즉, 여러 웹 브라우저가 연결될 수 있는 데 이 각 브라우저(클라이언트) 별로 하나의 객체를 만들어 관리하는 것이 세션(Session)이다. 세션 객체는 상태 정보를 유지하기 위해 사용된다. 로그인 정보, 장바구니 정보 등이 이에 해당한다. session scope를 위해 JSP는 session 내장 변수를 사용하며 해당 변수는 Servlet 파일에서 아래와 같이 선언된다.
값을 저장할 때는 setAttribute(), 값을 읽을 때는 getAttribute() 메서드를 사용한다.
- 웹 브라우저에서의 각 탭간에는 세션정보가 공유되어 각 챕에서는 같은 세션 정보를 사용할 수 있다.
- session scope은 특정 클라이언트의 요청과 서버의 응답이 반복되는 동안 정보를 계속 유지해주는 scope이라고 생각할 수 있다. 즉, 각 클라이언트 마다 유지해야하는 정보를 해당 공간에 저장한다.
5. Application Scope
하나의 서버에는 여러 웹 애플리케이션이 존재한다. 이때 웹 애플리케이션이란 여러 jsp, servlet 파일들을 모아 놓은 프로젝트 하나라고 생각할 수 있다. 즉, 지금까지 jsp와 servlet 등의 파일들을 web1과 web2 파일에 나누어 작성했다면 web1과 web2가 웹 애플리케이션이 된다. 이때 application scope란 각 웹 애플리케이션 내에 객체가 하나씩 존재한다고 생각하면 된다. 이때 각 웹 애플리케이션마다 하나의 객체들만 존재하므로 서버에 여러 클라이언트가 연결되어 있고, 해당 웹 애플리케이션의 applicatoin scope에 접근하는 경우 해당 객체만을 사용하게 된다. 즉, application 객체에는 모든 클라이언트가 공통으로 사용해야 할 값이 있을 때 사용하게 된다. application scope를 위해 JSP는 application 내장 객체를 사용하며 해당 객체는 아래와 같이 선언되어 있다.
위 객체는 아래와 같이 getServletContext() 메서드를 통해 초기화된다.
application 객체 역시 값을 저장할 때는 setAttribute(), 값을 읽을 때는 getAttribute()를 사용한다. 예를 들어, 아래와 같이 사용할 수 있다.
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
ServletContext application = getServletContext();
application.setAttribute("value", 1);
}
References
'BackEnd > JSP & Servlet' 카테고리의 다른 글
Forward란? (0) | 2022.12.22 |
---|---|
Redirect란? (0) | 2022.12.22 |
JSP 내장 객체 (0) | 2022.12.22 |
JSP 문법 (0) | 2022.12.22 |
[Java] Eclipse 프로젝트 및 클래스 생성 (0) | 2022.11.18 |