서브렛-jsp 입문부터 정통까지(3)

4763 단어
감청기
서브렛 API에는 서브렛Context, HttpSession, 서브렛Request 객체의 라이프 사이클 이벤트를 수신할 수 있는 8개의 모니터 인터페이스가 정의되어 있습니다.
  • 서브렛ContextListener가 서브렛 컨텍스트 객체의 초기화 또는 제거를 수신
  • 서브렛 컨텍스트 AttributeListener가 서브렛 컨텍스트의 속성 목록 변화를 수신
  • HttpSessionListener가 Session의 라이프 사이클을 수신
  • HttpSessionActionListener는session이 둔화되거나 활성화됨을 감청
  • HttpSessionAttributeListener가Session 속성 목록의 변화를 감청
  • HttpSessionBindingListener는Session에 대상이 귀속되거나 삭제되었는지 감청하고 이 대상이 이 인터페이스를 실현해야 한다
  • 서브렛RequestListener가 서브렛Request 객체의 라이프 사이클을 수신
  • 서브렛Request AttributeListener가 서브렛Request 속성 목록의 변화를 감청
  • 자세한 설명:
  • 서브렛ContextListener가 서브렛Context의 부팅 또는 제거를 수신
  • contextInitialized(Servlet Context Event sce) 웹 응용 프로그램 초기화 프로세스가 시작되었을 때 웹 용기에서 이 방법을 호출합니다. 이 방법은 모든 필터와 서브렛이 초기화되기 전에 호출됩니다.contextDestroyed (Servlet Context Event sce) 는 서브렛 상하문이 닫힐 때 웹 용기에서 이 방법을 사용합니다. 이 방법은 모든 서브렛과 필터를 제거한 후에 호출됩니다.
          :
           Web          DataSource  ,      ServletContext 
             
    
  • HttpSessionBindingListener, (무질서한 설정) 대상이 HttpSessionBindingListener 인터페이스를 실현하면 이 대상이 귀속된Session이나Session에서 삭제될 때 Servlet 용기가 이 대상을 알립니다.
  • valueBound(Http Session Binding Event 이벤트) 대상이 Session에 귀속되어 있을 때 서브렛 용기에서 이 방법을 호출하여 대상을 알립니다
  • valueUnBound(HttpSessionBindingEvent 이벤트)Session에서 대상을 삭제할 때 서브렛 용기에서 이 방법을 호출하여 이 대상을 알립니다
         :           ,        ,web              Session 。 Session   ,Servlet        ,   Session     。           ,                   。
    
  • 필터
    원본 데이터와 목적 데이터 사이의 필터 역할을 하는 중간 구성 요소는 웹 용기가 자원에 대한 요청을 받을 때 필터가 이 자원과 관련이 있는지 판단합니다. 만약 있다면 용기는 요청을 필터에 맡겨 처리합니다.필터에서 요청의 내용을 바꾸거나 요청의 헤더 정보를 다시 설정한 다음 요청을 목표 자원에 보낼 수 있습니다.대상 자원이 요청에 응답할 때 용기 역시 응답을 필터에 전달합니다.클라이언트에게 보냅니다.
    Filter 커넥터
  • init(FilterConfig filterConfig) 필터를 초기화합니다.filterconfig는 서브렛Context를 가져오고 매개변수를 초기화하는 데 사용됩니다.
  • doFilter(ServletRequest request,ServletResponse response,FilterChain chain); 여과 기능을 실현하다.chain을 호출할 수 있습니다.doFilter (request,response) 방법은 요청을 다음 필터나 목표 자원에 전달하고 클라이언트에게 응답 정보를 직접 되돌려줍니다.
  • destory () 필터의 설명 주기를 끝냅니다.

  • FilterConfig 인터페이스
  • getInitParameter(String name)는name이라는 초기화 매개 변수의 값
  • 을 반환합니다.
  • getInitParameterNames () 는 초기화된 모든 매개 변수의 이름의 매거 집합을 되돌려줍니다.
  • getServletContext()가 서브렛 컨텍스트 객체의 참조를 반환
  • FilterChain 커넥터
  • doFilter(Servlet Request request, Servlet Response response)가 이 방법을 호출하면 필터 체인의 다음 필터가 호출됩니다. 이 방법이 필터 체인의 마지막 필터일 경우 대상 자원이 호출됩니다.

  • 필터 구성
        
                  
                  
              
                   
                   
              
        
        
              
              
              
              REQUEST,INCLUDE,FORWARD,ERROR
        
    

    dispatcher:
  • REQUEST는 사용자가 직접 페이지에 접근할 때 웹 용기에서 필터를 호출하지만,include,forward () 방법으로 호출할 때 이 필터는 호출되지 않습니다
  • INCLUDE 대상 자원은include () 방법으로 이 필터에 접근해야 호출됩니다
  • FORWARD 목표 자원은 forward() 방법으로 이 필터에 접근해야 호출됩니다
  • ERROR 대상 리소스가 선언식 예외 처리 메커니즘을 통해 호출될 때만 필터가 호출됩니다
  • 스레드 보안 서브렛 개발
    대형 웹 응용 프로그램에서 서브렛 용기는 여러 클라이언트의 수천 개의 요청을 동시에 수신할 수 있으며, 여러 라인으로 모든 요청을 동시에 처리할 수 있다.
    다중 스레드 서브렛 모델
    서브렛 용기는 하나의 스레드 탱크 서비스 요청을 유지한다. 스레드 탱크는 실제적으로 실행 코드를 기다리는 스레드이다. 이런 스레드를 작업 스레드라고 한다. 서브렛 용기는 스케줄러 스레드를 사용하여 작업자 스레드를 관리한다. 용기가 서브렛에 접근하는 요청을 받으면 스케줄러 스레드는 스레드 탱크에서 작업자 스레드를 선택하여 요청을 전달한다.그런 다음 이 스레드에서 서브렛의 서비스 () 방법을 실행합니다.서브렛은 단일 예이므로 모든 서브렛의 서비스 방법은 여러 스레드에서 동시에 실행됩니다.서브렛 컨테이너는 단일 인스턴스 다중 스레드 방법을 사용하여 서브렛 인스턴스의 오버헤드를 최소화하고 요청에 대한 응답 시간을 크게 향상시킵니다.
    서브렛Context는 스레드가 안전하지 않습니다.
    우리는 서브렛 상하문에서 수정된 데이터만 적게 저장하고 다른 자주 수정해야 하는 데이터에 대해서는 여러 서브렛에서 HttpSession을 공유하는 다른 방식이 안전하지 않다는 것을 합리적으로 설계해야 한다.Http Session은 같은 Session에 속하는 요청을 처리하는 라인에서만 접근할 수 있지만 사용자는 같은 프로세스에 속하는 여러 개의 브라우저 창을 열 수 있습니다. 이 창의 접근 요청은 같은 Session에 속합니다. 여러 개의 요청을 동시에 처리하기 위해 서브렛 용기에서 여러 개의 라인을 만들고 여러 라인이 동시에Session에 접근할 수 있습니다.이 문제를 해결하기 위해 세션 액세스를 동기화할 수 있습니다.
        synchronized(session){
        
        }
    

    ServletRequest 스레드는 안전합니다.서브렛 컨테이너가 수락한 모든 요청에 대해 새 서브렛 Request 객체를 작성하므로 서브렛 Request 객체는 스레드에 액세스하기 위한 것입니다.
    모범 사례:
  • 가능한 한 서브렛에서 로컬 변수만 사용
  • 읽기 전용 실례 변수와 정적 변수만 사용해야 한다
  • 서브렛에서 자체 스레드를 만들지 마십시오
  • 공유 대상을 수정할 때 반드시 동기화를 사용하고 가능한 한 동기화 코드의 범위를 좁혀야 한다. 서비스 방법이나doXX 방법에서 직접 동기화하지 말고 성능에 영향을 주지 않도록 해야 한다
  • 여러 서브렛에서 외부 객체(예: 파일)를 수정하려면 잠금을 설정해야 합니다.
  • 다중 스레드 환경에서 집합 클래스의 대상을 사용할 때 동기화된 집합 클래스를 사용해야 한다. 예를 들어 Array List 대신 Vector를 사용하고 HashMap 대신 Hashtable를 사용해야 한다
  • serlvet-jsp 입문에서 정통까지 (二)serlvet-jsp 입문에서 정통까지 (4)

    좋은 웹페이지 즐겨찾기