본문 바로가기

study/jsp, servlet ...

scope

scope는 범위, 영역 같은 뜻을 같는데, 프로그래밍을 할 때는, 변수(객체)의 범위의 의미를 갖는다.

 

WAS 내에 서블릿이나, jsp에서 변수(객체)를 사용하다보면 한 서블릿 내에서 사용을 끝내는 변수가 있기도 하고, 다른 서블릿 forward하는 변수, 세션이 종료될 때까지 갖고 있는 변수 등 변수의 사용 범위는 다양하다.

 

Scope

WAS에서는 사진과 같이 Scope를 4가지로 나눌 수 있다.

 

  • Page - 서블릿이나 jsp 처럼 한 페이지 내에서만 지역변수같이 사용되는 객체
  • Request - WAS가 HTTP 요청을 받고 응답을 보낼 때까지 사용되는 객체
  • Session - 세션 객체가 생성되고 소멸될 때까지 사용되는 객체
  • Application - 웹 애플리케이션이 시작되고 종료될 때까지 사용되는 객체.

각각의 Scope에서는 setAttribute(), getAttribute()의 메소드를 사용해 값을 저장하고 얻을 수 있다. 사용방법은 동일하다.

이 메소드들은 Object 타입으로 객체를 저장하기 때문에, 형변환이 필요하다.

 

Page Scope

  • 서블릿에선 PageContext라는 추상클래스를, JSP에선 pageContext라는 내장 객체를 사용해서 변수를 공유한다.
  • Page Scope의 변수는 forward가 된다거나, 다른 서블릿에선 사용할 수 없다.
  • pageContext의 setAttribute(), getAttribute()로 데이터를 저장하고 읽을 수 있다.
  • 지역 변수처럼 사용된다.
  • jsp에선 EL표기법 등에서 사용된다.

Request Scope -> 사용 예 forward : jang-sn.tistory.com/54

  • WAS가 HTTP 요청을 받고 응답을 보낼 때까지 변수를 유지하려고 할 때 사용한다.
  • HttpServletRequest 객체를 사용해 변수를 공유한다. -> request, response 객체는 응답 후에 소멸된다. -> Request Scope의 범위와 관련된다.
  • forward 할 때 값을 유지하기 위해 사용한다.
  • 서블릿에선 HttpServletReque 객체를 사용하고, JSP에선 request 내장 변수를 사용한다.
  • request의 setAttribute(), getAttribute()로 데이터를 저장하고 읽을 수 있다.

Session Scope

  • 세션: 클라이언트의 상태 정보 유지를 위해 클라이언트마다 하나의 객체를 만들어 관리하는 것
  • 클라이언트(웹브라우저)마다 변수를 관리하기 위해 사용한다.
  • 웹 브라우저의 경우, 세션이 유지되기 때문에 여러 탭에서 같은 세션정보를 사용할 수 있다.
  • HttpSession 인터페이스를 구현한 객체를 사용한다.
  • 서블릿에선 HttpServletRequest의 getSession() 메소드를 사용해 session 객체를 얻고, JSP에선 session 내장 변수를 사용한다.
  • seesion의 setAttribute(), getAttribute()로 데이터를 저장하고 읽을 수 있다.
  • 세션 객체는 요청, 응답이 완료되도 사라지지 않는다.
  • 클라이언트마다 유지되어야 하는 정보가 있을 때 사용한다.

Application Scope

  • 하나의 서버에는 여러 웹 어플리케이션이 존재할 수 있지만, 각각의 웹앱은 애플리케이션 스코프를 위한 객체는 하나만 있다.
  • 모든 클라이언트가 같이 접근하기 때문에 공통으로 사용하는 값을 위해 사용한다.
  • 웹 앱이 시작되고, 종료될 때까지 변수를 사용할 수 있다.
  • ServletContext 인터페이스를 구현한 객체를 사용한다
  • 서블릿에선 getServletContext()메소드를 사용해 application 객체를 얻고, JSP에선 application 내장 객체를 사용한다.
  • application의 setAttribute(), getAttribute()로 데이터를 저장하고 읽을 수 있다.

위 스코프들은 값을 공유하게 되는데, 존재하지 않는 값을 getAttribute() 할 수 있기 때문에 예외처리를 해줘야 한다.

 

'study > jsp, servlet ...' 카테고리의 다른 글

표현 언어 - EL(Expession Language)  (0) 2021.03.16
redirect, forward + servlet, jsp  (0) 2021.03.07
JSP  (0) 2021.03.02
Servlet  (0) 2021.02.26
WAS  (0) 2021.02.24