java - 如何将 ServletListener 限制为单个上下文?

标签 java servlets glassfish jetty servlet-listeners

我有一个 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/

相关文章:

java - 了解 servlet 和多线程

java - 在Servlet中使用org.json会导致java.lang.ClassNotFoundException:org.json.JSONException

java - 如何检查servlet的执行是否没有异常

java - 由于以下问题无法启动服务器 : java. lang.NullPointerException

java - listview onitemclicklistener 无法在 Activity 中使用

java - 如何在 VSCode 中重置或更改 SonarLint 的规则?

java - 为 DAO 编写测试用例的最佳 TDD 方法是什么?

用于校正和裁剪图像的 Java 图像库

java - Liferay 不捕获 portlet 中的表单,也不进行处理

java - 分发 glassfish 服务器应用程序