我有一个 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>
问题是,现在 EndPoint 已为所有 Web 上下文注册,这不是我想要的。
如何将监听器限制在特定上下文?或者通过配置在监听器上设置“init params”,然后我可以在 ServletContextListener 中检查并仅在 EndPoint 与某些 init 参数匹配时才注册 EndPoint?
最佳答案
每个 Web 应用程序都有自己的 ServletContext
,不可能让单个 Servlet 监听器像这样响应多个 Web 应用程序上下文。
您的情况还存在其他问题。
关于java - 如何将 ServletListener 限制为单个上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39644206/