※ 내장 객체의 영역

 

객체의 유효기간, 즉 해당 객체가 얼마동안 살아 있는가를 지정해 주는 것의 영역

 

  영역   설명
  page   하나의 JSP 페이지를 처리할 때 사용되는 영역
  request   하나의 요청을 처리할 때 사용되는 영역
  session   하나의 브라우저와 관련된 영역
  application   하나의 웹 애플리케이션과 관련된 영역

 


※ page 영역

 

page 영역은 한 번의 클라이언트 요청에 하나의 JSP 페이지를 범위로 갖는다. 즉, 브라우저의 요청이 들어오면 JSP 페이지를 실행하게 되는데, 이때 실행되는 JSP 페이지의 범위가 하나의 page 영역이 된다.

 

JSP 페이지는 요청에 대해 새로운 page 영역을 갖게 되며, 그에 해당하는 pageContext 내장 객체를 할당 받고, 내장 객체를 할당받는다는 것은 pageContext라는 객체가 하나 생겨서 메모리에 로딩된다는 의미이다. 이렇게 생성된 pageContext 객체에 정보를 저장하면 해당 페이지 내에서만 사용할 수 있게 된다.

 

오직 하나의 JSP 페이지만을 포함한다.

 


※ request 영역

 

request 영역은 브라우저에서 오는 한 번의 요청과 관련된다. 즉 브라우저의 주소창에 URL을 입력하거나 페이지 링크를 클릭할 때, 브라우저가 웹 서버에 전송하는 요청이 하나의 request 영역이 된다.

 

요청한 페이지와 요청을 받은 페이지 사이에 request 내장 객체에 정보를 저장할 수 있는데 브라우저가 결과를 받으면 그 요청과 관련된 request 내장 객체는 사라진다. 즉 브라우저가 요청을 할 때마다 새로운 request 내장 객체가 생성되고 매번 새로운 request 영역이 생성된다.

 

하나의 요청을 처리하는데 사용되는 모든 JSP 페이지를 포함한다.

 


※ session 영역

 

session 영역은 하나의 브라우저와 관련된 영역으로 세션 객체에 의해서 관리된다.

 

 세션 : 웹 브라우저를 닫기 전까지 페이지를 이동하더라도 사용자의 정보를 잃지 않고 서버에 보관할 수 있도록 하는 객체로 모든 웹 서버에서 제공되는 것

 


※ application 영역

 

application 영역은 하나의 웹 애플리케이션과 관련된 전체  영역을 포함한다. 하나의 웹 애플리케이션에 속한 모든 페이지, 그 페이지에 대한 요청, 세션은 모두 하나의 application 영역에 속하게 된다.

한 웹 애플리케이션에 속한 모든 JSP 페이지는 하나의 application 내장 객체를 공유하며 이 application 내장 객체는 application 영역에 포함된다.

 


※ JSP 내장 객체에서 정보를 주고 받기 위한 메소드

 

page, request, session, application과 같은 JSP 내장 객체는 JSP 페이지들과 서블릿 간에 정보를 간단히 주고 받을 수 있다. 정보를 저장하는 방식은 속성 형태로 이름을 주어 값을 저장하는 형태인데, 이렇게 저장된 값은 어떤 내장 객체에 저장했느냐에 따라서 네 가지 영역 내에서 사용 가능하게 된다.

  메소드   설명
  setAttribute(name, value)   이름(name)에 값(value)을 설정한다.
  getAttribute(name)   매개 변수로 준 이름에 설정된 값을 얻어낸다.
  getAttributeNames   현재 객체에 관련된 모든 속성의 이름을 뽑아낸다.
  removeAttribute(name)   매개 변수로 준 이름에 설정된 값을 제거한다.

공통적으로 사용되는 매개 변수인 이름을 주기 위한 name 매개 변수는 String 형이고 값을 저장하기 위한 value 매개 변수는 어떤 값도 저장할 수 있도록 하기 위해서 자바 최상위 클래스인 Object 형으로 정의되어 있다.

이름을 주어서 값을 찾아올 경우 Object 형으로 리턴되므로 cast 연산이 필요하다.

 


※ JSP 내장 객체 유효 범위 예제

 

• 객체에 새로운 속성을 추가한후 07_secondPage.jsp로 포워딩 시킨다.(07_firstPage.jsp)

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%
pageContext.setAttribute("name", "page man");
request.setAttribute("name", "request man");
session.setAttribute("name", "session man");
application.setAttribute("name", "application man");

System.out.println("firstPage.jsp : ");
System.out.println("하나의 페이지 속성 : " + pageContext.getAttribute("name"));
System.out.println("하나의 요청 속성 : " + request.getAttribute("name"));
System.out.println("하나의 세션 속성 : " + session.getAttribute("name"));
System.out.println("하나의 애플리케이션 속성 : " + application.getAttribute("name"));

request.getRequestDispatcher("07_secondPage.jsp").forward(request, response);
%>

 

• 포워딩 방식(07_secondPage.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>
	하나의 페이지 속성 : <%= pageContext.getAttribute("name") %> <br>
	하나의 요청 속성 : <%= request.getAttribute("name") %> <br>
	하나의 세션 속성 : <%= session.getAttribute("name") %> <br>
	하나의 애플리케이션 속성 : <%= application.getAttribute("name") %> <br>
	<a href="07_thirdPage.jsp"> 또 다른 페이지 </a>
</body>
</html>

포워딩 방식으로 이동하면 07_firstPage.jsp에서 설정한 속성 값 중 실행되는 JSP 페이지의 범위인 page 영역에서만 값을 유지하는 pageContext 내장 객체의 속성 값만 유실된다. 페이지 이동을 하면 새로운 page 영역을 갖게 되기 때문이다.

 

• 리다이렉트 방식(07_thirdPage.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>
	하나의 페이지 속성 : <%= pageContext.getAttribute("name") %> <br>
	하나의 요청 속성 : <%= request.getAttribute("name") %> <br>
	하나의 세션 속성 : <%= session.getAttribute("name") %> <br>
	하나의 애플리케이션 속성 : <%= application.getAttribute("name") %> <br>
</body>
</html>

리다이렉트 방식으로 페이지를 이동하면 pageContext 내장 객체의 속성 값은 물론 request 객체가 새로 생성되어 이전 페이지에서 request 객체에 설정한 속성 값이 유실된다.

 

 

어떤 내장 객체에 값을 저장했느냐에 따라서 사용할 수 있는 유효범위가 달라질 수 있다는 것을 기억.

+ Recent posts