Servlet과 JSP를 개발하다 보면 변수를 많이 다루게 됩니다.
어떤 변수는 웹 애플리케이션에서 공유하고 싶은 변수가 있을 수도 있고, 어떤 변수는 사용자 별로 유지하고 싶은 변수가 있을 수 있습니다.
또 어떤 변수는 포워딩 되는 동안 유지하고 싶은 변수가 있습니다.
이렇게 변수를 어떤 범위 내에서 사용하기 위해서는 스코프(scope)라는 것에 대해서 알아야 합니다.
Application
웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우 사용
애플리케이션이 소멸될 때까지 존재합니다.
Session
세션객체가 새성 돼서 소멸될 때까지입니다. 여러 개의 요청이 들어와도 남아있습니다. 상태 유지를 위해서 사용됩니다.
웹 브라우저 별로 변수가 관리되는 경우 사용
Request
클라이언트로부터 요청이 들어와서 서버가 응답을 보낼 때까지 사용할 수 있는 범위
http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수가 유지되는 경우 사용
Page
선언된 한페이지 그 내에서 만 사용할 수 있는 범위
페이지 내에서 지역변수처럼 사용
1. Page scope
PageContext라는 추상 클래스를 사용합니다.
jsp페이지에서는 PageContext라는 내장 객체로 사용 가능합니다.
forward가 될 경우 page scope에 지정된 변수는 사용할 수 없다.
왜냐하면 클라이언트가 요청을 보냈을 때 jsp/서블릿이 요청을 받았을 때 페이 지하 나당 pageContext가 하나가 생성됩니다. 이 페이지를 이용될 때까지만 유효합니다.
포워드는 요청을 전부 해결하고 다음 jsp/서블릿으로 작업을 넘기므로 첫 번째 pageContext객체는 메모리에서 사라지고 새로운 PageContext가 생성되므로 연결되어 사용할 수 없습니다.
사용방법은. getAttribute. setAttribute로 사용합니다
2. Request Scope
http 요청을 was가 받아서 웹브라우저에게 응답할 때까지 유지하고자 할 경우 사용합니다
HttpServletRequest 객체를 사용합니다.
JSP에서는 request 내장 변수를 사용합니다.
Servlet에서는 HttpServletRequest객체를 사용합니다.
값을 저장할 때는 request객체의 setAttribute() 메서드를 사용합니다.
값을 읽어 들일 때는 request객체의 getAttribute() 메서드를 사용합니다.
forward시 값을 유지하고자 할 때 사용합니다.
즉 http요청을 was가 받아서 웹브라우저에게 응답할 때까지 변숫값을 유지할 경우에 사용하는데
요청이 들어오면 was는 request, response객체를 생성하여 서블릿의 service() 메서드의 인자에 넣어둡니다.
이러한 req, res객체를 다른 서블릿 또는 JSP에서 이용할 수 있도록 Request객체는 범위를 유지시켜주며 포워드를 하면 그 값이 유지한 채로 다른 서블릿이나 , JSP에서도 이용이 가능합니다.
3.Session scope
접속한 웹브라우저별로 정보를 관리하고 싶을 때 session scope를 이용합니다.
웹브라우저는 클라이언트일 수 있는데 클라이언트마다 상태 정보는 각각 다르므로 그러한 상태 정보를 유지하기 위해 사용합니다.
웹 브라우저간의 탭 간에는 세션정보가 공유가 되기 때문에 각각의 탭에서는 같은 세션정보를 사용할 수 있습니다.
HttpSession 인터페이스를 구현한 객체를 사용합니다.
JSP는 session 내장 변수를 사용합니다.
서블릿에서는 HttpServletRequest의 getSession() 메서드를 이용하여 session객체를 얻어올 수 있습니다.
값을 저장할 때는 session객체의 setAttribute() 값을 읽을 땐 getAttribute()를 사용합니다.
예를 들어 인터넷 쇼핑에서 장바구니 같은 콘텐츠에서 사용자별로 유지되어야 할 정보가 있을 때 사용합니다.
세션 객체는 적당한 시간을 지정한다거나, 브라우저가 닫히면 없어집니다.
4.Application scope
웹 애플리케이션이 시작되고 종료될 때까지 변수를 사용할 수 있다.
ServletContext 인터페이스를 구현한 객체를 사용합니다.
JSP에서는 application 내장 객체를 이용합니다.
서블릿의 경우는 getServletContext() 메서드를 이용하여 application 객체를 이용합니다.
웹 애플리케이션 하나당 하나의 application 객체가 사용됩니다.
저장할 때나 읽어 들일 때는 다른 scope와 같습니다.
모든 클라이언트가 공통으로 사용해야 할 값들이 있을 때 사용합니다.
'SSR > Servlet & JSP' 카테고리의 다른 글
Filter (0) | 2020.05.24 |
---|---|
DBCP를 이용해서 커넥션 풀 사용하기 (0) | 2020.05.20 |
HttpServletRequest/Response (0) | 2020.05.09 |
JSTL (0) | 2020.04.28 |
View page 은닉하기. (0) | 2020.04.28 |
댓글