2016-09-22 67 views
0

我有一個JSR-356 WebSocket應用程序。我使用監聽器對其進行初始化,這樣我就不需要依靠jar掃描註釋來減慢啓動速度。如何將ServletListener限制爲單個上下文?

例如,我用一個ServletContextListener實現,登記的WebSocket的EndPoint

@Override 
public void contextInitialized(ServletContextEvent sce) { 

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

    serverContainer.addEndpoint(MyEndPoint.class); 
} 

,然後註冊在web.xml部署描述符聽衆:

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

的問題是,現在EndPoint被註冊了所有的Web上下文,這不是我想要的。

如何限制偵聽器到特定的上下文?或者通過配置在監聽器上設置「init params」,然後我可以在我的ServletContextListener中檢查配置,並僅在與一些初始參數相匹配時才註冊EndPoint?

回答

1

每個webapp都是它自己的ServletContext,它不可能有一個servlet監聽器響應多個webapp上下文。

你的情況還在繼續。

0

Web應用程序只有兩種上下文。
全球稱爲應用程序上下文,它可以訪問整個Web應用程序。而其他的是一個Servlet配置,這隻能訪問一個特定的servlet。

當你想限制你的監聽器到特定的上下文時,你應該使用Servlet的init-params(即Servlet配置)到你的特定的servlet。

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

每個servlet將其拿下servlet配置,所以你必須給init-參數「javax.websocket.server.ServerContainer」添加到您想要限制

所有的servlet
相關問題