- 스코프
Servlet과 JSP 환경에서 개발을 하게 되면 변수를 필연적으로 다루게 된다. 이 변수를 다루기 위한 영역을 스코프라고 하고, 정보의 종류에 따라 필요한 영역이 달라 4가지로 나눠져 있다.
*컴퓨터 프로그래밍에서 변수 영역은 변수가 유효성을 갖는 영역을 말한다. 프로그램은 영역을 벗어난 변수를 가리킬 수 없다.
- 4가지 영역
|
- ApplicationScope
· 서버가 시작되는 순간부터 서버가 종료되는 순간까지의 모든 범위에서 변수 사용 가능하여 변수가 유지되는 경우에 사용.
-한 어플리케이션에 다수의 클라이언트가 존재할 수 있다.
-모든 클라이언트가 공통적으로 사용해야 하는 값들이 있을 때 사용한다.
· 위의 시간동안 사용할 수 있는 메모리 영역이 만들어지며 ServletContext라는 클래스 타입 객체로 관리됨.
· ServletContext에 저장된 데이터나 객체는 서버가 종료되기 전까지 웹 브라우저에 관계없이 동일한 메모리 공간 사용.
· JSP에서는 application 내장 객체를 이용하고, Servlet에서는 getServletContext() 메서드를 이용해 application 객체를 이용.
· 하나의 웹 어플리케이션 당 하나의 applicaiton 객체 사용됨.
· 값을 읽을 때는 application 객체의 getAttribute() 메서드를 사용, 값을 저장할 때는 application 객체의 setAttribute() 메서드 사용.
· 어플리케이션 스코프에 List 객체를 저장. List 객체에 주기적으로 값은 저장되지만 삭제되지 않으면 클라이언트들이 공유하는 객체의 크기가 점점 커져서 어플리케이션 자체의 속도가 느려져 무거워지면서 나중엔 웹 어플리케이션이 죽는 결과를 초래한다.
*웹 어플리케이션 : 하나의 프로젝트.
- SessionScope
· 웹 브라우저별 변수를 관리할 때 사용하는 영역. (해당 객체가 소멸될 때까지 사용 가능하다.)
-웹 브라우저는 클라이언트를 지칭.
-클라이언트마다 하나의 객체를 만들어 관리하는 것이 세션.
· 하나의 브라우저당 한 개의 Session 객체가 생성.
· 서로 다른 브라우저 내 요청되는 페이지들은 같은 객체를 공유.
· 웹 브라우저 탭 사이에 세션 정보가 공유되기 때문에, 각각의 탭에서는 같은 세션 정보를 사용할 수 있다.
· HttpSession 인터페이스를 구현한 객체를 사용.
· JSP에서는 session 내장 변수를 사용하고, Servlet에서는 HttpServletRequest의 getSession() 메서드로 session 객체를 얻는다.
-실제 요청이 들어가면 클라이언트의 정보를 알아야 세션이 어떤 클라이언트인지 구분할 수 있기 때문에 getSession() 메서드를 통해 session을 얻어낸다.
· 값을 읽을 땐 session 객체의 getAttribute() 메서드를, 값을 저장할 땐 setAttribute() 메서드를 이용한다.
· 세션 객체는 개발 시 적당 시간을 지정하거나 브라우저가 닫히는 특성들에 의해 없어진다.
· SessionScope는 클라이언트마다 하나의 공간을 가지기 때문에 각 클라이언트마다 유지해야 하는 정보들을 유지시켜 준다.
-상태 정보 유지를 위해 사용. ex) 쇼핑몰 장바구니..
- RequestScope
· http 요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지하고자 할 경우에 사용되는 영역.
· HttpServletRequest 객체 사용.
· JSP에서는 Request 내장 변수를 사용.
· Servlet에서는 HttpServletRequest 객체를 사용.
-service(), doGet(), doPost() 메서드 안 인자로 들어왔던 해당 객체에서 변수 사용.
· 값을 읽을 땐 request 객체의 getAttribute() 메서드를, 값을 저장할 땐 setAttribute() 메서드를 이용.
· forward 시에 값 유지하기 위해 사용.
*forward 하기 전에 request 객체의 setAttribute() 메소드로 값을 설정한 후, 서블릿이나 jsp에게 결과를 전달하여 값을 출력하도록 하였는데 이렇게 포워드 되는 동안 값이 유지되는 것이 Request scope를 이용한다고 함.
· redirect될 경우에 request scope를 이용하면 정보를 유지할 수 없다.
-redirect할 경우 어떤 페이지로 이동할 때마다 새 응답 객체를 보내고 종료시키는데, request scope는 응답 객체 생성 시 생성되고, 응답 객체 종료 시 소멸되기 때문이다.
- PageScope
· 해당 페이지가 실행되는 동안에 유지되는 영역으로, 페이지 내에선 지역변수처럼 사용됨.
- 해당 JSP나 Servlet이 실행되는 동안에만 정보를 유지하고자 할 때 사용.
· PageContext 추상 클래스 사용.
· JSP 페이지에서 pageContext라는 내장 객체로 사용 가능.
- Application scope나 Session scope, Request scope와 사용방법은 같다.
· forward가 될 경우 해당 PageScope에 지정된 변수는 사용 불가.
- forward는 1번 페이지에서 2번 페이지로 이동하기 때문에 1번 페이지에 있던 Page Scope는 2번 페이지에서 사용 불가.
- Request Scope는 Page Scope와 달리, 요청한 후 응답 시까지 사용이 가능해 forward에서 1번, 2번 페이지에서 사용 가능.
· JSP에서 PageScope에 값을 저장 후 해당 값을 EL 표기법 등에서 사용할 때 사용.
· ${변수명}으로 사용.
'JAVA > 공부' 카테고리의 다른 글
web-xml을 이용한 커스텀 에러 페이지 (0) | 2022.09.18 |
---|---|
HTTP와 HTTPS의 차이점 (0) | 2022.09.16 |
인코딩 해결법 (0) | 2022.09.15 |
서블릿 매핑 (0) | 2022.09.15 |
HttpServlet 클래스 (0) | 2022.09.15 |