728x90
반응형
Scope
웹 어플리케이션에서 공유하고 싶은 변수, 사용자 별로 유지하고 싶은 변수, forwarding되든 동안 유지하고 싶은 변수 등이 존재하기 마련. 이렇게 변수를 어떤 범위 내에서 사용하려면 Scope를 써야함.
종류
- Application : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우에 사용. 자주 바뀌지 않고 모든 사람이 공통적으로 사용하는 코드일 때. - ex) 회사에서 전체적으로 사용되는 정보 등
- Session : 웹 브라우저 별로 변수가 관리되는 경우 사용. 세션 객체가 생성되어 소멸할 때까지 유지. 요청이 여러 개 들어와도 남아있음.
- Request : 클라이언트로부터 http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
- Page : servlet이건 JSP이건 상관없이 한 페이지 내에서만 지역변수처럼 사용
+) 어떤 Scope이건 관계없이 값을 지정할 때는 setAttribute(), 값을 읽을 때는 getAttribute() 사용
Page Scope
지역변수처럼 특정 Servlet이나 JSP가 실행되는 동안에만 정보 유지
- PageContext 추상 클래스를 사용
- JSP 페이지에서 pageContext 내장 객체로 사용 가능 (.setAtrribue() .getAtrribute()
- forward가 될 때 해당 Page Scope에 지정된 변수는 사용할 수 없음
- 사용 방법은 다른 Scope와 동일
- 마치 지역변수처럼 사용된다는 점만 다른 Scope들과 다름
- jsp에서 PageScope에 값을 저장 후 해당 값을 EL 표기법 등에서 사용할 때 사용
Request Scope
웹 브라우저로부터 WAS가 요청 받은 후, 포워드되는 동안 유지하고 싶은 정보가 있을 경우
- http 요청을 WAS가 받아서 웹브라우저에게 응답할 때까지 변수값 유지할 때 사용
- JSP에서는 request 내장 변수 사용
- Servlet에서는 HttpServletRequest 객체를 사용
- 값을 저장할 때 request 객체의 setAttribute() 사용
- 값을 읽을 때 request 객체의 getAttribute() 사용
- forward 시 값을 유지할 때 사용
- forward 전에 request 객체의 setAttribute() 메소드로 값을 설정한 후, Servlet이나 jsp에게 결과를 전달하여 값을 출력했음. 이렇게 forward 되는 동안 값이 유지되는 것이 request scope를 이용한 것.
!! Redirect 시에는 2개의 request로 이루어지기에 request scope를 이용하여도 정보가 유지되지 않음
redirect는 여러 개의 요청과 응답으로 유지되어있음. 즉, redirect는 HTTP location Header 값을 바꾸어 클라이언트에 반환하여 다른 페이지를 열게 함으로 전혀 다른 request scope로 갱신되어 유지 불가능.
Session Scope
접속한 웹 브라우저 별로 정보/변수를 관리하고 싶을 때
- 웹 브라우저 간의 탭 간에서 세션 정보가 공유됨
- 그렇기에 각각의 탭에서는 같은 세션 정보로 사용 가능
- HttpSession 인터페이스를 구현한 객체를 사용
- JSP에서는 session 내장 변수를 사용
- Servlet에서는 HttpServletRequest의 getSession() 메소드를 이용하여 Session 객체를 얻음
- 값을 저장할 때는, session 객체의 setAttribute() 사용
- 값을 읽을 때는 session 객체의 getAttribute() 사용
- 장바구니, 로그인, 결재내역, 즐겨찾기처럼 사용자 별로 유지해아하는 정보가 있을 때 사용
Application Scope
하나의 웹 어플리케이션에서 공유하고 싶은 변수가 있을 때 사용
- 웹 어플리케이션이 시작되고 종료될 때까지 변수를 사용
- 웹 어플리케이션 하나 당 하나의 application 객체가 사용됨
- ServletContext 인터페이스의 객체 사용
- jsp에서는 application 내장 객체 이용
- Servlet의 경우 getServletContext() 메소드를 이용하여 applicatoin 객체를 사용
- 값 저장 시, application 객체의 setAttribute() 사용
- 값을 읽을 때, application 객체의 getAttribute() 사용
- 모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 사용
Application Scope 실습
- ApplicationScope01 Servlet을 생성하여 Application scope로 "value"에 1값을 저장
- url로 요청만 받을 servlet이기 때문에 deGet()만 오버라이딩
- ApplicationScope02 Servlet을 생성하여 Application scope로 저장된 "value"의 값에 1을 더하여 출력
- doGet()만 오버라이딩
- applicationscope01.jsp 생성하여 Application scope로 저장된 "value"의 값에 2를 더하여 출력
- 결과를 크롬, 익스플로러 모두 확인해보기
728x90
반응형
'Web > Java+Spring' 카테고리의 다른 글
JSTL (JSP Standard Tag Library) (0) | 2021.05.10 |
---|---|
EL (Expression Language) for JSP (0) | 2021.05.10 |
Redirect & Forward (0) | 2021.05.10 |
JSP (0) | 2021.05.08 |
Request, Response (0) | 2021.05.06 |