我有一个JSR-356 WebSocket应用程序。我使用侦听器对其进行初始化,因此无需依赖jar扫描注释即可减慢启动速度。

例如,我使用一个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>


问题在于,现在已经为所有Web上下文注册了EndPoint,这不是我想要的。

如何将侦听器限制为特定的上下文?还是通过配置在侦听器上设置“初始参数”,然后我可以在ServletContextListener中对其进行检查并仅在匹配某些初始化参数的情况下注册EndPoint?

最佳答案

每个Web应用程序都是其自己的ServletContext,不可能有一个Servlet侦听器响应这样的多个Web应用程序上下文。

您遇到的其他情况正在发生。

07-24 21:51