속성(Attribute)
영역(Scope)
영역 | 영역 객체 | 속성의 유효 범위 |
---|---|---|
page | pageContext | 해당 페이지가 클라이언트에 서비스를 제공하는 동안에만 유효(서블릿 인스턴스의 _jspServicer() 메소드가 실행되는 동안에만 유효) |
request | request | 클라이언트의 요청이 처리되는 동안 유효(포워딩 또는 include를 이용하는 경우 여러 개의 페이지에서도 요청 정보가 계속 유지되므로 request 영역의 속성을 여러 페이지에서 공유 할 수 있다.) |
session | session | 세션이 유지되는 동안 유효 (하나의 브라우저에 1개의 세션이 생성되므로 같은 웹 브라우저 내에서 실행되는 페이지들이 속성을 공유할 수 있다. |
application | application | 웹 어플리케이션이 실행되고 있는 동안 유효 (웹 컨테이너에서 해당 어플리케이션은 오직 하나만이 실행되므로 네 가지 영역 중 가장 큰 영역에 해당 된다. |
속성과 관련된 메소드들
리턴 타입 | 메소드명 | 해설 |
---|---|---|
Object | getAttribute(String key) | key 값으로 등록되어 있는 속성을 Object 타입으로 리턴(key 값에 해당되는 속성이 없을 경우 null 을 리턴) |
Enumeration | getAttributeNames() | 해당 영역에 등록되어 있는 모든 속성들의 이름을 Enumeration 타입으로 리턴 |
없음 | setAttribute(String key,Object obj) | 해당 영역에 key 값의 이름으로 obj객체를 등록 |
없음 | removeAttribute(String key) | key 값으로 등록되어 있는 속성을 제거 |
예제
attributeTest1_Form.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>attribute Test Form</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<form action="attributeTest1.jsp" method="post">
<table border="1">
<tr><td colspan="2">Application 영역에 저장할 내용들</td></tr>
<tr>
<td>이름</td>
<td><input type="text" name="name"></td>
</tr>
<tr>
<td>아이디</td>
<td><input type="text" name="id"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="전송"></td>
</tr>
</table>
</form>
</body>
</html>
attributeTest1.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>attributeTest</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
String id=request.getParameter("id");
if(name!=null && id != null){
application.setAttribute("name", name); //웹서버가 구동되는 순간 자동으로 단 하나 생성
application.setAttribute("id", id);
}
%>
<h3><%=name %>님 반갑습니다.<br><%=name %>님의 아이디는 <%=id %>입니다.</h3>
<form action="attributeTest2.jsp" method="post"></form>
<table>
<tr><td colspan="2">Session 영역에 저장할 내용들</td></tr>
<tr>
<td>email 주소</td>
<td><input type="text" name="email"></td>
</tr>
<tr>
<td>집 주소</td>
<td><input type="text" name="address"></td>
</tr>
<tr>
<td>전화번호</td>
<td><input type="text" name="tel"></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="전송"></td>
</tr>
</table>
</body>
</html>
attributeTest2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Attribute Test</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<%
request.setCharacterEncoding("utf-8");
String email=request.getParameter("eamil"); //데이터 읽어오기
String address=request.getParameter("address");
String tel=request.getParameter("tel");
session.setAttribute("email", email); //세션 객체에 저장
session.setAttribute("address", address);
session.setAttribute("tel", tel);
String name=(String)application.getAttribute("name"); //getAttribute 의 리턴 타입은 Object 라서 (String) 앞에 붙여줌
%>
<h3><%=name %>님의 정보가 모두 저장되었습니다.</h3>
<a href="attributeTest3.jsp">확인하러 가기</a>
</body>
</html>
attributeTest3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%@page import="java.util.Enumeration" %>
<html>
<head>
<meta charset="UTF-8">
<title>Attribute Test</title>
</head>
<body>
<h2>영역과 속성 테스트</h2>
<table border="1">
<tr><td colspan="2">Application 영역에 저장된 내용들</td></tr>
<tr>
<td></td>
<td><%=application.getAttribute("name") %></td>
</tr>
<tr>
<td></td>
<td><%=application.getAttribute("name") %></td>
</tr>
</table>
<table border="1"></table>
<tr><td colspan="2">Session 영역에 저장된 내용들</td></tr>
<%
Enumeration e=session.getAttributeNames();
while(e.hasMoreElements()){
String attributeName=(String)e.nextElement();
String attributeValue= (String)session.getAttribute(attributeName);
%>
<tr>
<td><%=attributeName %></td>
<td><%=attributeValue %></td>
</tr>
<%
}
%>
</body>
</html>
attributeTest1_Form.jsp 실행 시 화면
전송 버튼 클릭 시 test1.jsp 로 전환되어 나오는 화면
전송 버튼 클릭 시 test2.jsp 로 전환
확인하러 가기 클릭 시 test3.jsp 로 전환되어 나오는 화면
모든 브라우저 닫고 test3.jsp 접속 시 화면
서버 재구동 시 화면
내장 객체 영역 (scope)
예제
attributeTest4.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.setAttribute("pageScope", "pageValue");
request.setAttribute("requestScope", "requestValue");
%>
pageValue=<%=pageContext.getAttribute("pageScope") %><br>
requestValue=<%=request.getAttribute("requestScope") %>
</body>
</html>
attributeTest5.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.setAttribute("pageScope", "pageValue");
request.setAttribute("requestScope", "requestValue");
%>
<jsp:forward page="requestTest5Result.jsp"></jsp:forward>
</body>
</html>
requestTest5Result.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>
pageValue=<%=pageContext.getAttribute("pageScope") %><br>
requestValue=<%=request.getAttribute("requestScope") %>
</body>
</html>
attributeTest5.jsp 실행시 화면