finerss's world!

속성이라는 것은 3개의 서블릿 API객체 즉

ServletContext, HttpServletRequest(또는 ServletRequest), HttpSession 객체 중 하나에 설정해놓는(바인딩(binding)라고함)

객체를 말한다.

간단히 이를 Map 인스턴스(java.util.Map)에 이름/값의 쌍으로 저장하는 것이라고 생각해도 무방하다(이름은 String/ 값 Object)

사실 내부적으로 이것이 어떻게 구현되어 있는지 신경쓸필요없다 .단지 속성이 생존하는 범위(scope)이 중요하다.

속성은 게시판에 핀으로 고정시킨 게시물과 같다.

누군가 게시판에 다른 사람들이 읽으라고 붙여놓은 것이다
여기서 의문을 가져야할 사항은
누가 게시물을 등록하는가?
게시물의 게시기간은 얼마나 되는가?
개발자적인 용어로 바꾸면 속성의 생존범위(scope)는 어떻게 되는가? 이다

서블릿에 입문한지 얼마되지 않았다면, 속성과 파라미터의 차이에대해 고민을 꽤 시간을 낭비했을 것이다
밑에 표로 파라미터와 속성의 차이를 알아보자

속성 파라미터
타입 Application/context
Request
Session
Application/context 초기화 파라미터
Request 파라미터
Servlet 초기화 파라미터
설정 메소드 setAttribute(String name, Object value) 애플리케이션과 서블릿의 초기화 파라미터 값은 런타임 시 설정할 수 업다. 오로지 DD에서 초기화 설정때만 가능하다(Request 파라미터를 가지고, 좀어렵긴하지만 쿼리스트링을 설정 할수있다)
리턴 타입 Object String
참조 메서드 getAttribute(String name)
*속성은 리턴될떄 Object이므로
캐스트(cast)해야한다
getInitParameter(String name)


세 가지 생존 범위 : context, Request, Session

context 속성 : 애플리 케이션에 있는 것이라면 누구나 접근할 수 있다.(get/set)
Session 속성 : 특정 HttpSession에 접근 권한을 가진 녀석만 접근할 수 있다.(get/set)
REQUEST 속성 : 특정 ServletRequest에 접근 권한을 가진 녀석만 접근할 수 있다.(get/set)



속성들의 API를 살펴보면

모든 인터페이스에서 속성의 API 메소드는 동일한 것을 볼수있다.

속성범위

   접근(누가볼수있는가) 생존범위
(얼마나 생존해 있는가) 
 이곳이 가장 적당한 곳
 Context

스레드-안전(x)
웹 애플리케이션에 있는것은
어떤 것이든. 서블릿,JSP,
ServletContextListener,
servletContextAttribute,
Listener
 애플리케이션 생존시간과 동일
서버나 애플리케이션이 내려가면 컨텍스트도 소멸
 전체 애플리케이션에서 공유하고자하는 자원.
데이터베이서Connection,
JNDI검색명(lookup name),
이메일 주소 등.
 HttpSession

스레드-안전(x)
특정 세션에 접근할 수 있는
어떤 서블릿이나 JSP 모두.
세션은 여러개의 요청에 대하여 정보를 간직할 수 있다.
한 서블릿뿐만아니라 여러 서블릿에 대해서도 가능하다. 
 세션의 생존시간, 세션을 프로그램적으로 소멸시킬수 있으며, 간단히 시간이 만료될 수도 있다.  하나의 Request에만 관련된 것이 아니라 클라이언트 세션에 관련된 데이터와 자원.
클라이언트와 지속적인 대화를 유지하고 싶은것들. 장바구니가 가장 좋은 예.
 Request

스레드-안전(o)
 애플리케이션 내에서 Request객체에 직접 접근이 가능한것 모두. RequestDispatcher를 사용하여 요청을 처리할 수 있는 서블릿이나 JSP를 대부분 의미. 문론 Request관련 리스너포함  Request의 생존시간. 서블릿의 서비스 메소드가 끝날 떄까지이다. 즉 스래드가 Request를 핸들링 할때까지만 살아있는것이다  모델 정보를 컨트롤러에서 뷰로 넘길떄, 또는 특정 요청에만 관련된 데이터 등.



'공부 > Sevlets&JSP' 카테고리의 다른 글

RequestDispatcher  (0) 2011.06.29
동기화  (0) 2011.06.29
ServletContextListener  (0) 2011.06.27
ServletConfig 와 ServletContext  (0) 2011.06.27
Request, Response  (0) 2011.06.27