2016-09-22 7 views
0

JSR-356 WebSocket 응용 프로그램이 있습니다. 리스너를 사용하여 초기화하므로 주석을 검색 할 때 jar 검색에 의존 할 필요가 없으므로 시작 속도가 느려집니다.ServletListener를 단일 컨텍스트로 제한하는 방법?

<listener> 
    <listener-class>my.ServletContextListenerImpl</listener-class> 
</listener> 

문제는 지금이다 : web.xml 배치 기술자에 해당 리스너를 등록 후

@Override 
public void contextInitialized(ServletContextEvent sce) { 

    ServerContainer serverContainer = (ServerContainer) sce 
     .getServletContext() 
     .getAttribute("javax.websocket.server.ServerContainer"); 

    serverContainer.addEndpoint(MyEndPoint.class); 
} 

그리고 :

예를 들어, 나는 웹 소켓의 EndPoint 레지스터 ServletContextListener 구현을 사용 EndPoint는 모든 웹 컨텍스트에 대해 등록됩니다.

어떻게 특정 컨텍스트로 수신기를 제한 할 수 있습니까? 또는 구성을 통해 리스너에서 "init params"를 설정하면 내 ServletContextListener에서 검사 할 수 있으며 일부 init param과 일치하는 경우에만 EndPoint를 등록 할 수 있습니까?

답변

1

각 webapp는 자체적으로 ServletContext이며 하나의 서블릿 수신기가 여러 웹 응용 프로그램 컨텍스트에 응답하는 것은 불가능합니다.

다른 상황이 진행 중입니다.

0

웹 응용 프로그램에는 두 가지 컨텍스트 만 있습니다.
응용 프로그램 컨텍스트이라고하는 전역이며 전체 웹 응용 프로그램에서 액세스 할 수 있습니다. 그리고 다른 하나는 서블릿 구성입니다.이 서블릿은 특정 서블릿에서만 액세스 할 수 있습니다.

리스너를 특정 컨텍스트로 제한하려면 특정 서블릿에 대해 서블릿 (즉, 서블릿 구성)의 init-params를 사용해야합니다. 당신은 당신이

을 제한하려면 모든 서블릿 초기화-PARAM "javax.websocket.server.ServerContainer"를 추가 할 수 있도록
<servlet> 
<description>This is config servlet</description> 
<servlet-name>ConfigContext</servlet-name> 
<servlet-class>com.configcontext.ConfigContext</servlet-class> 
<init-param> 
    <param-name>javax.websocket.server.ServerContainer</param-name> 
    <param-value>servlet container</param-value> 
</init-param> 
</servlet> 
<servlet-mapping> 
    <servlet-name>ConfigContext</servlet-name> 
    <url-pattern>/ConfigContext</url-pattern> 
</servlet-mapping> 

각 서블릿은 그 원 서블릿 설정을해야합니다