2016-09-22 3 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); 
} 

そして:

は例えば、私はのWebSocketのEndPointを登録ServletContextListener実装を使用しますエンドポイントはすべてのWebコンテキストに登録されていますが、これは私が望むものではありません。

どのように特定のコンテキストにリスナーを制限できますか?または、リスナー上で「init params」を設定して、私のServletContextListenerで検査し、いくつかのinit paramと一致する場合にのみEndPointを登録できるようにします。

答えて

1

各webappはそれ自身のServletContextです。そのような複数のWebアプリケーションコンテキストに単一のサーブレットリスナーが応答することはできません。

あなたの状況で何かが起こっています。

0

Webアプリケーションには2つのコンテキストしかありません。
アプリケーションコンテキストと呼ばれるグローバルなWebアプリケーション全体にアクセスできます。その他はサーブレットコンフィグですが、これは特定のサーブレットのみがアクセスできます。

リスナーを特定のコンテキストに制限する場合は、特定のサーブレットに対してサーブレットのinit-params(つまりServlet Config)を使用する必要があります。

<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> 

各サーブレットは、その獲得したサーブレットの設定を持っていますので、あなたが

を制限したいすべての人々のサーブレットにINIT-PARAM「javax.websocket.server.ServerContainer」を追加する必要があります
関連する問題