JAVA/공부

JSP 스코프

GaeGim 2022. 9. 18. 14:08
반응형
  • 스코프

Servlet과 JSP 환경에서 개발을 하게 되면 변수를 필연적으로 다루게 된다. 이 변수를 다루기 위한 영역을 스코프라고 하고, 정보의 종류에 따라 필요한 영역이 달라 4가지로 나눠져 있다.

 

*컴퓨터 프로그래밍에서 변수 영역은 변수가 유효성을 갖는 영역을 말한다. 프로그램은 영역을 벗어난 변수를 가리킬 수 없다. 

 

 

 

 

 

  • 4가지 영역

 

 

  • application scope : 가장 큰 개념
  • session scope
  • request scope
  • page scope : 가장 작은 개념

 

 

 

 

 

  • 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