객체의 사용범위(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 출력

'학원 > 복기' 카테고리의 다른 글
[JSP] 자바빈(JavaBean) / useBean 태그 (0) | 2023.06.26 |
---|---|
[JSP] 표준 액션 태그(Standard Action Tag) - include 태그/forward 태그/param 태그 (0) | 2023.06.25 |
[JSP] 내장객체(Implicit Object) (0) | 2023.06.23 |
[JSP] 지시어(Directive) - taglib (0) | 2023.06.22 |
[JSP] 지시어(Directive) - include (0) | 2023.06.22 |