-
웹애플리케이션 개발: 웹 컴포넌트간 공유하는 속성 범위개발입문/Servlet&JSP 2017. 2. 15. 22:48
속성 vs 파라미터
속성 (Attribute)
파라미터 (Parameter)
타입
Application / context
Request
Session
Application/Context
Request
Servlet
설정 메소드
setAttribute(String name, Object value)
애플리케이션과 서블릿의 초기화 파라미터 값은 런타임 시 설정 불가 (DD에서 설정가능)
리턴 타입
Object
String
참조 메소드
getAttribute(String name)
getInitParameter(String name)
Attribute
각 속성의 접근 범위는 이러한데.. 그래서 각자가 어떻게 쓰이고 있는 것일까?
속성 API 메소드
기본적인 게터, 세터 메소드들~
Object getAttribute(String name)
Void setAttribute(String name, Object value)
Void removeAttribute(String name)
Enumeration getAttributeNames()
Context, Session 생존범위 속성
Thread-safe 처리 필요- 동일 서블릿 인스턴스 + 다른 스레드
- 다른 서블릿 인스턴스 + 다른 스레드각 작업은 각 다른 스레드에서 처리되는데, 컨텍스트 속성은 모든 컴포넌트가 공유한다
그래서 컨텍스트 속성은 스레드-안전하지 않다. thread-unsafe그래서 ServletContext에 get, set 하는 부분에 대해 동기화 락을 걸어놓는다
synchronized (getServletContext()) {
getServletContext().setAttribute("foo", "22");
getServletContext().setAttribute("bar", "42");
out.println(getServletContext().getAttribute("foo"));
out.println(getServletContext().getAttribute("bar"));
}Session 속성도 같은 서블릿에 대한 요청이 다른 스레드로 처리될 수 있다. (유저가 하나이상의 브라우저를 사용할경우) 이 때는 HttpSession에 속성을 get, set 하는 부분에 동기화 락을 걸어 놓는다.
단, 락, 동기화 블록은 가능한 짧은 시간동안 걸어놓아야합니다!
'개발입문 > Servlet&JSP' 카테고리의 다른 글
[헤드퍼스트 Servlet&JSP] 7-1. JSP 요소 (0) 2017.02.18 Request 속성과 Request 디스패칭 (0) 2017.02.16 ServletContextListener 컨텍스트 리스너 (0) 2017.02.15 Servlet LifeCycle & Parameter (0) 2017.02.14 [헤드퍼스트 Servlet&JSP] 4. 요청과 응답 (0) 2017.02.05