티스토리 뷰

 기본 객체의 속성(Attribute) 사용

- 네 개의 기본객체 pagecontext, request, session, application 는 속성을 갖고 있다.

- 속성은 각각의 기본 객체가 존재하는 동안에 사용될 수 있고, JSP 페이지 사이에서 정보를 주고 받거나 공유하기 위한 목적으로 사용된다.

- <속성이름, 값> 형태를 가지고, 서로 다른 이름을 가진 속성을 여러개 포함할 수 있다.

- request 기본 객체는 한 번의 요청에 대해 유효하게 동작하며 , 한 번의 요청을 처리하는 데 사용되는 모든 JSP에서 공유된다.

 

 

 메서드  반환형   설명 
 setAttribute(String name, Object value)   void   이름이 name인 속성의 값을 value로 지정한다. 
 getAttribute(String name)   Object   이름이 name인 속성의 값을 구한다. 존재하지 않을 경우 null을 반환한다. 
 removeAttribute(String name)  void   이름이 name인 속성을 삭제한다. 
 getAttributeNames()   Enumeration   속성의 이름 목록을 구한다. (pageContext 제외)



또 다른 실시간 베스트 글

 

현직 5년차가 직접 겪은 국비지원 패스트캠퍼스 후기 보러가기

 

국비지원 패스트캠퍼스 후기 현직 5년차 개발자가 알려주는 코딩학원 현실

국비지원 패스트캠퍼스 후기 현직 개발자가 경험한 코딩학원 선택 기준 및 현실에 대해 알려드립니다. 이런 분들은 절대 수업 듣지도 마세요.

www.allinfospace.com

 

 

목적

-<jsp:param>은 String타입의 값만 전달할 수 있기 때문에 형변환이 필요로한 반면, request.setAttribute는 객체의 속성을 이용하기 때문에 , 이런 변환 과정이 필요 없다.

 

Request 는 사용자의 요청 이라고 보시면 됩니다.

Response는 사용자의 요청에 대한 서버의 응답입니다.

 

예제)

 

makeTime.jsp

<%@page import="java.util.Calendar"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<%
	Calendar cal = Calendar.getInstance();
	request.setAttribute("time", cal);
%>

	<jsp:forward page="/WebContent/viewTime.jsp" />
	
	<!-- 여기서 "/" 의 의미는절대경로라는 뜻이다.   -->
	
	

viewTime.jsp

<%@page import="java.util.Calendar"%>
<%@ page contentType="text/html; charset=UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>ViewTime.jsp</title>
</head>
<body>
	<% Calendar cal = (Calendar) request.getAttribute("time"); %>
    <!-- 형변환 필요 object type이기 때문에 -->
	
	현재 시간은   <%= cal.get(Calendar.HOUR) %> 시
	 			<%= cal.get(Calendar.MINUTE %>분 입니다.
</body>
</html>

 

2. 속성의 값 타입

- 속성의 이름은 문자열을 나타내는 String 타입이지만, 값은 기본 데이터 타입을 제외한 나머지는 모든 클래스 타입이 올 수 있다.

- 기본 데이터 타입의 경우는 래퍼 타입을 대신 사용해야 하지만, 자바 5버전부터 자동 변환을 처리해주는 오토 박싱/오토 언박싱 기능이 추가되었다.

 

setAttribute() 메소드의 value 파라미터의 타입이 Object이고 getAttribute() 메소드의 리턴타입이 Object인데, 이것은 모든 클래스 타입을 속성의 값으로 사용가능하다는 것을 의미 합니다.

다양한 타입의 객체를 속성값으로 저장할수 있습니다.

session.setAttribute("session_start",new java.util.Date());
session.setAttribute("memberid","madvirus");
application.setAttribute("application_temp",new File("c:\\temp"));

위 코드에서는 각각 차례대로 Date, String, File 타입의 객체를 속성의 값으로 사용하고 있습니다. 이렇게 다양한 타입의 값을 속성 값으로 지정할수 있는데, getAttribute() 메소드를 사용해서 속성의 값을 읽어올때에는 속성값을 지정할때 사용한 타입으로 알맞게 형변환을 해주어야 합니다.

Date date = (Date)session.getAttribute("session_start");
String memberID = (String)session.getAttribute("memberid");
File tempDir = (File)application.getAttribute("application_temp");

 

기본데이터 타입의 경우는 직접 사용할수 없고 래퍼 타입을 대신 사용해야 합니다. 예를 들어 ,int타입의 값속성에 넣고 싶다면 int타입의 래퍼 타입인 Integer를 사용해주어야 합니다.

 

//int의 래퍼 타입인 Integer를 이용해서 값을 설정
request.setAttribute("age", new Integer(20));
Integer ageAttr = (Integer)request.getAttribute("age");
int ageValue=ageAttr.intValue();

하지만

 

자바 5버전부터 기본 데이터 타입과 래퍼 타입 간의 변환을 자동으로 처리해주는 오토박싱/오토 언방식 기능이 추가되었기 때문에, setAttribute() 메소드에 기본 데이터 타입의 값을 전달하거나 getAttribute()에서 래퍼 타입으로 읽어온 값을 기본 데이터 타입에 할당 할수 있습니다.

 

오토박싱과 언방싱을 사용한 코드의 예

//int 값 20이 자동으로 Integer로 변환되어 속성 값으로 저장
request.setAttribute("age",20);
//Integer 타입의 값이 자동으로 int타입으로 변환됨
int age= (Integer)request.getAttribute("age");

->즉 , 자바 5버전 이상부터는 request.setAttribute("age",20);만 해주어도 알아서 Integer로 변환되기 때문에

기본형인 int age에 값을 넣을 수 있게 되었다. !

3. 속성의 활용

- 속성을 저장하기 위해서 request, session 객체가 많이 사용된다.

- request 객체의 속성은 MVC 패턴 구축에 많이 사용되고, session 객체의 속성은 로그인 로그아웃 같은 사용자 인증정보에 많이 사용된다.

 

속성의 쓰임새

 기본객체 영역  쓰임새 
 pageContext  PAGE  (한번의 요청을 처리하는) 하나의 JSP페이지 내에서 공유될 값을 저장합니다. 주로 커스텀 태그에서 새로운 변수를 추가할때 사용됩니다.
 request  REQUEST  한번의 요청을 처리하는데 사용되는 모든 JSP페이지에서 공유될 값을 저장합니다. 주로 하나의 요청을 처리하는데 사용되는 JSP페이지 사이에서 정보를 전달하기 위해 사용됩니다.
 session  SESSION  한 사용자와 관련된 정보를 JSP들이 공유하기 위해서 사용됩니다. 사용자의 로그인 정보와 같은 것들을 저장합니다.
 application  APPLICATION  모든 사용자와 관련해서 공유할 정보를 저장합니다. 임시 디렉터리 경로와 같은 웹 어플리케이션의 설정 정보를 주로 저장합니다. 

 

 request 기본 객체의 속성을 사용하는 방법은 오늘날 널리 사용되고 있는 MVC(Model-View-Controller)패턴에 기반해서 웹 어플리케이션을 구축할때 많이 사용한다.