【问题标题】:How to Limit ServletListener to a Single Context?如何将 ServletListener 限制为单个上下文?
【发布时间】:2017-01-31 08:04:18
【问题描述】:

我有一个 JSR-356 WebSocket 应用程序。我使用监听器来初始化它,这样我就不需要依赖 jar 扫描来减慢启动速度。

例如,我使用注册 WebSocket 的EndPointServletContextListener 实现:

@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 参数时才注册它?

【问题讨论】:

    标签: java servlets glassfish jetty servlet-listeners


    【解决方案1】:

    每个 webapp 都有自己的 ServletContext,不可能让单个 servlet 侦听器像这样响应多个 webapp 上下文。

    你的情况还有其他问题。

    【讨论】:

      【解决方案2】:

      Web 应用程序只有两个上下文。
      一个全局的叫做Application Context,它可以被整个web 应用程序访问。还有一个是Servlet Config,只有特定的servlet才能访问。

      当您想将您的侦听器限制在特定的上下文中时,您应该将 servlet 的 init-params(即 Servlet Config)用于您的特定 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-param "javax.websocket.server.ServerContainer" 添加到所有要限制的 servlet

      【讨论】:

        猜你喜欢
        • 2012-01-15
        • 1970-01-01
        • 2012-06-27
        • 1970-01-01
        • 2015-03-23
        • 2012-06-30
        • 2017-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多