ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹애플리케이션 개발: 웹 컴포넌트간 공유하는 속성 범위
    개발입문/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 하는 부분에 동기화 락을 걸어 놓는다.

    단, 락, 동기화 블록은 가능한 짧은 시간동안 걸어놓아야합니다!

    댓글

Designed by Tistory.