Scope - BE
1. Scope란
Servlet, JSP 개발 시 변수를 많이 다룹니다.
변수의 사용범위를 다루는 스코프(scope)를 알아봅니다.
1) → 4) 순으로 큰 영역, 예를 들어 1)은 2,3,4를 포함
1) Application scope : 웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지되는 경우
2) Session scope : 웹 브라우저 별로 변수가 관리되는 경우 사용, 여러 개의 요청이 들어와도 유지
3) Request scope : client가 http 요청(request)한 후 WAS가 받아서 웹 브라우저에게 응답(response)할 때까지 변수가 유지되는 경우
4) Page scope : 페이지 내에서 지역변수처럼 사용 (각 servlet, jsp 파일)
2. Page Scope
특정 서블릿이나 JSP가 실행되는 동안에만 정보 유지할 경우 사용합니다.
PageContext 추상 클래스를 사용합니다.
JSP 페이지에서 pageContext 라는 내장 객체로 사용가능합니다.
forward가 될 경우 해당 page scope에 지정된 변수는 사용할 수 없습니다.
사용방법은 나머지 scope에서와 같습니다.
지역변수처럼 사용됩니다.
jsp에서 pageScope에 값을 저장한 후 해당 값을 EL, JSTL 표기법 등에서 사용할 때 사용합니다.
이렇게 주로 사용합니다. (해당 페이지에서 변수를 선언하여 사용하는 방법과 비슷하기 때문에 servlet에서는 잘 안사용하게 됩니다.)
3. Request Scope
웹 브라우저로 WAS가 요청을 받은 후, 포워드가 진행되는 동안 유지하고 싶은 정보가 있을 경우 request scope을 사용합니다.
http요청을 WAS가 받아서 웹 브라우저에게 응답할 때까지 변수값을 유지합니다.
서블릿에서는 HttpServletRequest 객체 사용
JSP에서는 request 내장 변수를 사용
값을 저장할 때는 request.setAtrribute()
값을 읽어 들일 때는 request.getAttribute()
forward시 값을 유지하고자 할 때 사용합니다.
4. Session Scope
접속한 웹 브라우저(클라이언트)별로 세션을 열어 정보를 관리 하고 싶을 때 세선 스코프를 사용합니다.
웹 브라우저 간의 탭간에는 세션정보가 공유되기 때문에, 각각의 탭에서는 같은 세션정보를 사용할 수 있습니다.
HttpSession 인터페이스를 구현한 객체를 사용합니다.
JSP에서는 session 내장 변수를 사용합니다.
값 저장시 session.setAttribute()
값 읽어들일 때는 session.getAttribute()
서블릿에서는 HttpServletRequest의 getSession() 메소드를 이용하여 session 객체를 얻습니다.
장바구니처럼 사용자별 정보가 유지되어야 할 때 사용합니다.
5. Application Scope
하나의 웹 어플리케이션에서 공유하고 싶은 변수가 있을 때 application scope를 사용합니다.
웹 어플리케이션이 시작되고 종료될 때까지 변수가 유지됩니다.
'firstWeb' 같은 프로젝트 하나하나가 application,
'exam25', 'exam31' 등 하나의 서버에 여러개의 앱이 존재할 수 있습니다.
여러 클라이언트는 동시에 어떤 서버의 한 어플리케이션에 접속할 수 있습니다.
ServletContext 인터페이스를 구현한 객체를 사용합니다.
jsp에서는 application 내장 객체를 이용합니다.
서블릿에서는 getServletContext() 메소드를 이용해서 application 객체를 이용합니다.
웹 어플리케이션 하나당 하나의 application 객체가 사용됩니다.
값 저장시 application.setAttribute()
값 읽어들일 때는 application.getAttribute()
모든 클라이언트가 공통으로 사용해야할 값들이 있을 때 사용합니다.
실습
1) ApplicationScope01, ApplicationScope02 서블릿 2개 생성
2) applicationscope01.jsp 생성
3) ApplicationScope01 에 Application scope으로 value에 값 1을 저장
4) ApplicationScope02 에 Application scope으로 저장된 value에 1을 더하고 결과 출력
5) applicationscope01.jsp는 value 값에 2를 더한 후 결과 출력
- Application scope은 웹 어플리케이션을 사용하는 모든 브라우저에서 같은 값을 사용합니다.
ApplicationScope01.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
ServletContext application = getServletContext();
int value = 1;
application.setAttribute("value", value);
out.println("<h1>value : " + value + "</h1>");
}
ApplicationScope02.java
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html; charset=UTF-8");
PrintWriter out = response.getWriter();
ServletContext application = getServletContext();
try {
int value = (int)application.getAttribute("value");
value++;
application.setAttribute("value", value);
out.println("<h1>value : " + value + "</h1>");
} catch (NullPointerException e) {
out.println("value의 값이 설정되지 않았습니다.");
}
}
applicationScope01.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
try{
int value = (int)application.getAttribute("value");
value += 2;
application.setAttribute("value", value);
%>
<h1><%=value %></h1>
<%
}catch (NullPointerException ex){
%>
<h1>설정한 값이 없습니다.</h1>
<%
}
%>
</body>
</html>
Reference
'lang > java web' 카테고리의 다른 글
[Web] Rest API 설명 (604) | 2019.12.02 |
---|---|
[Boostcourse] Maven, 메이븐 설정, 실행 설명(eclipse) (588) | 2019.11.22 |
[Boostcourse] DB 연결 웹 - 6. JSTL & EL (680) | 2019.11.21 |
[Boostcourse] DB 연결 웹 - 4. Redirect & Forward (853) | 2019.11.19 |
[Boostcourse] DB 연결 웹 - 3. JSP (Java Server Pages) (634) | 2019.11.18 |
댓글