본문 바로가기

학원/복기

[JSP] 객체의 사용범위(Scope)

객체의 사용범위(Scope)

Scope는 JSP 문서에서 생성된 객체를 내장객체의 속성값으로 저장하여 다른 JSP 문서에서 속성값을 반환받아 사용할 수 있는 범위를 뜻한다. 즉, Scope는 객체의 사용범위 또는 객체가 유효한 범위를 의미한다. 

 


 

내장객체에 따라 저장된 속성값의 사용범위가 다르게 설정된다.

 

page Scope : pageContext 내장객체를 이용하여 객체를 속성값으로 저장한다.

  • 객체를 속성값으로 저장한 JSP 문서에서만 속성값을 객체로 반환받아 사용이 가능하다.
  • 페이지 스코프는 JSP 페이지 내에서만 객체가 유효하다.
  • 페이지 내에서 선언된 변수나 사용되는 객체는 해당 JSP 페이지 내에서만 접근 가능하다.
  • 페이지 스코프는 JSP 페이지를 처리하는 동안에만 유지되며, JSP 페이지를 벗어나면 사라진다.

request Scope : request 내장객체를 이용하여 객체를 속성값으로 저장한다.

  • 객체를 속성값으로 저장한 JSP 문서와 스레드가 이동된 JSP 문서에서 속성값을 객체로 반환받아 사용 가능하다.
  • 요청 스코프는 클라이언트의 요청(request)이 처리되는 동안 객체가 유효하다.
  • 하나의 요청에서 처리되는 여러 JSP 페이지에서 객체에 접근할 수 있다.

session Scope : session 내장객체를 이용하여 객체를 속성값으로 저장한다. 

  • 클라이언트가 같은 경우, 같은 세션이 바인딩된 모든 JSP 문서에서 속성값을 객체로 반환받아 사용 가능하다. 
  • 세션 스코프는 사용자의 세션이 유지되는 동안 객체가 유효하다.
  • 하나의 세션에서 처리되는 여러 요청에서 객체에 접근할 수 있다.

application Scope : application 내장객체를 이용하여 객체를 속성값으로 저장한다.

  • 모든 JSP 문서에서 속성값을 객체로 반환받아 사용 가능하다. 
  • 애플리케이션 스코프는 웹 애플리케이션이 실행되는 동안 객체가 유효하다.
  • 모든 세션과 모든 요청에서 객체에 접근할 수 있다.

 

각 스코프의 사용법은 다소 차이가 있으며, 적절한 상황에 따라 적절한 스코프를 선택하여 객체를 사용해야 한다. 객체의 스코프를 설정하고 사용하기 위해 JSP에서는 알맞은 스코프 지시자(directive)나 스크립트 요소를 사용할 수 있다.

 

 

내장객체 관련 메소드 

 

implicitObject.setAttribute(String attributeName, Object attributeValue) : 내장객체를 이용하여 객체를 속성값으로 저장하는 메소드 

implicitObject.getAttribute(String attributeName) : 내장객체에 저장된 속성값을 객체로 반환하는 메소드 

 implicitObject.removeAttribute(String attributeName) : 내장객체에 저장된 속성값을 삭제하는 메소드

 


예제)

 

[scope_set.jsp]

 

내장객체를 이용하여 객체를 속성값으로 저장한다.
→ 속성명을 이용하여 속성값을 구분한다. - 내장객체가 다른 경우 같은 이름의 속성명을 사용할 수 있다. (하지만 권장하지 않는다. 내장객체가 다른 경우에도 속성명을 모두 다르게 지정해주는 것이 좋다.) 

내장객체에 동일한 속성명이 있는 경우 기존 속성값 대신 새로운 속성값으로 변경한다. (중복되면 변경처리된다.) 

<%
	pageContext.setAttribute("pageName", "김민지");//page Scope
	request.setAttribute("requestName", "김태리");//request Scope
	session.setAttribute("sessionName", "김수현");//session Scope
	application.setAttribute("applicationName","강하늘");//application Scope
%>

 

내장객체에 저장된 속성값을 속성명으로 구분하여 반환받아 저장한다.

속성명의 속성값이 없는 경우 null을 반환한다.

속성값을 Object 객체로 반환하기 떄문에 반드시 명시적 객체 형변환을 이용해야 한다. 

<%
	String pageName=(String)pageContext.getAttribute("pageName");
	String requestName=(String)request.getAttribute("requestName");
	String sessionName=(String)session.getAttribute("sessionName");
	String applicationName=(String)application.getAttribute("applicationName");
%>
<p>pageName=<%=pageName %></p>
<p>requestName=<%=requestName %></p>
<p>sessionName=<%=sessionName %></p>
<p>applicationName=<%=applicationName %></p>

 

[전체소스코드]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%
	pageContext.setAttribute("pageName", "김민지");//page Scope
	request.setAttribute("requestName", "김태리");//request Scope
	session.setAttribute("sessionName", "김수현");//session Scope
	application.setAttribute("applicationName","강하늘");//application Scope
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>객체의 사용범위(Scope)</h1>
	<hr>
	<%
		String pageName=(String)pageContext.getAttribute("pageName");
		String requestName=(String)request.getAttribute("requestName");
		String sessionName=(String)session.getAttribute("sessionName");
		String applicationName=(String)application.getAttribute("applicationName");
	%>
	<p>pageName=<%=pageName %></p>
	<p>requestName=<%=requestName %></p>
	<p>sessionName=<%=sessionName %></p>
	<p>applicationName=<%=applicationName %></p>
</body>
</html>

 

 

[scope_get.jsp]

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
	<h1>객체의 사용범위(Scope)</h1>
	<hr>
	<%
		String pageName=(String)pageContext.getAttribute("pageName");
		String requestName=(String)request.getAttribute("requestName");
		String sessionName=(String)session.getAttribute("sessionName");
		String applicationName=(String)application.getAttribute("applicationName");
	%>
	<p>pageName=<%=pageName %></p>
	<p>requestName=<%=requestName %></p>
	<p>sessionName=<%=sessionName %></p>
	<p>applicationName=<%=applicationName %></p>
</body>
</html>

 

브라우저를 닫지 않았을 경우 session과 application만 출력

 

브라우저를 모두 종료한 후 다시 get을 요청할 경우 application만 출력 

 

 

WAS를  restart 했을 경우 모두 null 출력