반응형
- 기존 자바 프로그램은 클래스 내에서 객체를 만들면 해당 클래스내에서만 사용 가능함
- 하지만 웹프로그램은 WAS를 통해 객체를 공유해 다른 웹프로그램에서 사용가함
01. 내장객체의 사용범위(Scope)
- JSP 문서에서 생성된 객체를 내장객체의 속성값으로 저장하여 다른 JSP 문서에서 속성값을 반환받아 사용할 수 있는 범위
- 내장객체에 따라 저장된 속성값의 사용범위가 다르게 설정
- 즉, 데이타를 공유하여 사용할 수 있는 범위
- 또한 Scope는 내장객체를 이용하여 값을 공유하거나 공유된 값을 얻어 사용할 수 있음
02. Scope 의 종류
1) 🖤page Scope
- 🖤pageContext 내장객체를 이용하여 객체를 속성값으로 저장
- 객체를 속성값으로 저장한 JSP 문서에서만 속성값을 객체로 반환받아 사용 가능
- 하나의 JSP 페이지에서 데이타를 공유하여 사용
- 즉, 자기가 저장하고 자기만 사용 가능
- 다른 JSP문서에서 사용 불가능
- 쓸모없지만 기본이니 알아두기
- useBaen 배우고 사용 가능
2) 💚request Scope
- 💚request 내장객체를 이용하여 객체를 속성값으로 저장
- 객체를 속성값으로 저장한 JSP 문서와 스레드가 이동된 JSP 문서에서 속성값을 객체로 반환받아 사용 가능
- 두 개의 JSP 페이지에서 데이타를 공유하여 사용(request 내장객체)
- >> 스레드(프로그램 흐름)가 이동되는 JSP 파일에서 데이타 공유
- >> include ActionTag 또는 forward ActionTag에 의해 스레드 이동
- >> 특히 jsp model2 할 때 많이 사용함
3) 💜session Scope
- 💜session 내장객체를 이용하여 객체를 속성값으로 저장
- 같은 세션이 바인딩된(같은 클라이언트) 모든 JSP 문서에서 속성값을 객체로 반환받아 사용 가능
- 같은 세션이 바인딩됨 = 같은 클라이언트 (같은 브라우저)
- 웹브라우저가 종료되면 공유 값은 소멸됨
- 세션이 소멸(언바인딩)될 때까지
- 브라우저 종료 시
- 아무런 요청과 응답 없이 30분 후
- 언제 session Scope 사용?
- 인증을 통한 권한을 획득하였을 때 권한을 저장하려고 많이 사용함
4) 🤎application Scope
- 🤎application 내장객체를 이용하여 객체를 속성값으로 저장
- 클라이언트(브라우저)와 상관없이 모든 JSP 문서에서 속성값을 객체로 반환받아 사용 가능
- 클라이언트에 상관없이 동일한 WAS를 사용한다면 모든 JSP 문서에서 사용 가능
- 서버가 종료되면 공유 값은 소멸
- web.xml 이용하는 것이 더 편하기 때문에 잘 사용하지 않음
03. 내장객체의 사용범위(Scope)의 메소드
1) 내장객체를 이용하여 객체를 속성값으로 저장하는 메소드
implicitObject.setAttribute(String attributeName, Object attributeValue)
2) 내장객체에 저장된 속성값을 객체로 반환하는 메소드
implicitObject.getAttribute(String attributeName)
3) 내장객체에 저장된 속성값을 삭제하는 메소드
implicitObject.removeAttribute(String attributeName)
04. 예시
1) 스코프에 값 저장 setAttribute
scope_set.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
//내장객체를 이용하여 객체를 속성값으로 저장
// => 속성명을 이용하여 속성값을 구분
// => [내장객체가 다른 경우] [같은 이름의 속성명] 사용 가능
// => [내장객체에 동일한 속성명이 있는 경우] [기존 속성값 대신 새로운 속성값]으로 변경
//page Scope 사용범위: [자기자신]
pageContext.setAttribute("pageName", "홍길동");
//request Scope 사용범위: [속성값을 저장한 JSP문서] + [스레드가 이동된 JSP 문서]
request.setAttribute("requestName", "임꺽정");
//session Scope 사용범위: [같은 세션이 바인딩된 모든 JSP 문서]
session.setAttribute("sessionName", "전우치");
//application Scope 사용범위: [모든 JSP 문서]
application.setAttribute("applicationName", "일지매");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>객체의 사용범위(Scope)</h1>
<hr>
<%
//내장객체에 저장된 속성값을 반환받아 저장
// => Object 타입의 객체로 반환하므로 반드시 명시적 객체 형변환 후 사용
// => 매개변수로 전달된 속성명의 속성값이 없는 경우 null 반환
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>pagName = <%=pageName %></p>
<p>requestName = <%=requestName %></p>
<p>sessionName = <%=sessionName %></p>
<p>applicationName = <%=applicationName %></p>
</body>
</html>
2) 스코프에 값 사용 getAttribute
scope_get.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%
String pageName=(String)pageContext.getAttribute("pageName");
String requestName=(String)request.getAttribute("requestName");
String sessionName=(String)session.getAttribute("sessionName");
String applicationName=(String)application.getAttribute("applicationName");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSP</title>
</head>
<body>
<h1>객체의 사용범위(Scope)</h1>
<hr>
<p>pagName = <%=pageName %></p>
<p>requestName = <%=requestName %></p>
<p>sessionName = <%=sessionName %></p>
<p>applicationName = <%=applicationName %></p>
</body>
</html>
- 🖤page : 하나의 JSP에서만 데이타 공유
- 💚request : 스레드(프로그램 흐름)가 이동되는 JSP에서만 데이타 공유
- 💜session : 웹브라우저가 종료되면 공유 값 소멸
- 🤎application : 서버가 종료되면 공유 값 소멸
반응형
'jsp' 카테고리의 다른 글
[jsp] 8. 로그인 프로그램 (0) | 2024.07.07 |
---|---|
[jsp] 7. 회원가입 프로그램 (0) | 2024.07.07 |
[jsp] 5. JSP 내장객체 (0) | 2024.07.05 |
[jsp] 4. 커스텀 태그 클래스 등록해 사용하는 법 (taglib Directive) (0) | 2024.07.05 |
[jsp] 3. Include Directive를 통한 사이트 구축 (중형사이트에 최적) (0) | 2024.07.04 |