我有一个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应用程序上下文。
您遇到的其他情况正在发生。