[JSP/Servlet] 스코프(Scope)

2019. 2. 27. 19:05JAVA Back-End

Scope(영역)


Servlet / JSP로 개발하다보면 많은 변수(데이터)를 다루게 됩니다.  

어떤 변수는 웹 어플리케이션 전체에서 공유하고 싶고, 

어떤 변수는 사용자 별로 유지하고 싶을 수 있고,

어떤 변수는 포워딩 되는 동안 유지하고 싶을 수 있습니다.

이렇게 변수를 어떤 범위 내에서 사용하냐에 따라 4가지 Scope로 나눌 수 있습니다.


* 속성(Attribute) : 공유되는 데이터

  영역(Scope) : 속성을 공유할 수 있는 범위


Servlet과 JSP의 4가지 Scope

Appication 영역 : 웹 어플리케이션이 시작~종료까지 변수가 유지되는 경우 사용됩니다.
Session 영역 :  웹 브라우저 별로 변수가 관리되는 경우 사용됩니다.
request 영역 : HTTP request를 WAS가 받아서 브라우저에게 response할 때까지 변수가 유지되는동안 사용됩니다.
page 영역 : 페이지 내에서 지역변수처럼 사용됩니다. forward가 돌 경우 page scope의 지정 변수는 사용불가합니다.


[출처] http://inheritingjava.blogspot.com/2011/04/chapter-42-scope-of-javabeans-in-jsp.html


 영역

 영역 객체

 유효범위

 쓰임새

 page 영역

 pageContext


  • 해당 페이지가 클라이언트에 서비스를 제공하는 동안만 유효합니다
  • Servlet 인스턴스의 _jspService()가 실행되는 동안만 유효합니다. 
  • _jspService가 종료되면 pageContext같은 page scope데이터는 메모리에서 사라집니다.


  •  한 번의 request 처리하는 하나의 JSP페이지 내에서 공유될 값 저장
  • EL표기법같이 해당 jsp나 Servlet이 실행되는 동안만 정보유지

 request 영역

 request 

 

  • 클라이언트의 요청이 처리되는 동안 유효합니다.
  • forward되는 동안 값을 유지합니다. 즉, 웹 브라우저에 response할 때까지 변수값을 유지합니다
  • 즉, request 속성을 여러 페이지에서 공유할 수 있습니다.


  •  한 번의 reqeust를 처리하는 데 사용되는 모든 JSP페이지에서 공유될 값을 저장
  • 주로 하나의 request를 처리하는데 사용되는  JSP페이지 사이 사이에서 정보를 전달하려고 사용 (forward는 request영역)

 session 영역

 session 


  • 세션이 유지되는 동안 유효합니다.
  • 하나의 브라우저에 1개의 session이 생성되므로 같은 웹브라우저 내에서 실행되는 page들이 속성을 공유합니다.

  •  한 명의 uesr와 관련된 정보를 공유하기 위해서 사용
  • 로그인 정보같은, 해당 사용자의 정보는 session 영역에서 공유되며 저장

 application 영역

 application 

 

  • 웹 애플리케이션이 실행되는 동안 유효합니다. (서버가 중지되지 않는한 계속 유효)
  • web-container 에서 해당 애플리케이션은 오직 하나만 실행되므로 가장 큰 영역입니다.
  •  모든 사용자와 관련해서 공유할 정보를 저장 
  • 사용자 게시판처럼 모든 사람이 공통적으로 사용할 경우에 이런 application 영역을 사용 




WAS에서 JSP로 여러가지의 Scope를 사용할 떄 이미 선언된 Scope 내장객체를 사용하면 됩니다.

이전에 사용하던 setAttribute() / getAttribute() 같은 게 있었죠?! 모든 내장객체에서 이 메소드들로 set하고 get할 수 있습니다 :)


JSP에서

<%
// page scope 
pageContext.setAttribute("pageScope", "value");

// request scope
request.setAttribute("requestScope", "value");

// session scope
session.setAttribute("sessionScope", "value");

// application scope
application.setAttribute("applicationScope", "value");

%>


Servlet에서


page : pageContext객체를 이용합니다. 하나의 서블릿으로 제한합니다.

request : HttpServletRequest객체를 사용. 값을 저장할 떈 request.setAttribute() 값을 읽어 들일 땐 request.getAttribute()메소드 사용

session : HttpServletRequest의 getSession() 메소드를 이용해 session객체를 얻습니다. 마찬가지로 session.setAttribute(), session.getAttribute() 사용합니다. 

application : ServletContext 객체를 이용합니다. 하나의 웹 애플리케이션으로 제한합니다.


[출처] http://blog.naver.com/PostView.nhn?blogId=javaking75&logNo=140181686711

[ edwith - 웹프로그래밍 부스트코스 ] 를 개인적으로 공부하고 정리한 공간입니다. 잘못된 부분은 피드백 주시면 감사하겠습니다

'JAVA Back-End' 카테고리의 다른 글

[JSP/Servlet] JSTL (JSP Standard Tag Library)  (0) 2019.03.02
[JSP/Servlet] EL(Expression Language)  (0) 2019.03.01
[JSP] redirect 와 forward  (1) 2019.02.26
[JSP] JSP 내장객체  (0) 2019.02.25
[JSP] JSP문법  (0) 2019.02.25