首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将ServletListener限制在单个上下文中?

如何将ServletListener限制在单个上下文中?
EN

Stack Overflow用户
提问于 2016-09-23 00:23:53
回答 2查看 47关注 0票数 0

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

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

代码语言:javascript
复制
@Override
public void contextInitialized(ServletContextEvent sce) {

    ServerContainer serverContainer = (ServerContainer) sce
        .getServletContext()
        .getAttribute("javax.websocket.server.ServerContainer");

    serverContainer.addEndpoint(MyEndPoint.class);
}

然后在web.xml部署描述符中注册该侦听器:

代码语言:javascript
复制
<listener>
  <listener-class>my.ServletContextListenerImpl</listener-class>
</listener>

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

如何将监听器限制在特定的上下文中?或者通过配置在侦听器上设置"init params“,然后我可以在我的ServletContextListener中检查并注册EndPoint,前提是它与某个初始化参数匹配?

EN

回答 2

Stack Overflow用户

发布于 2016-09-23 01:58:27

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

在你的情况下发生了一些其他的事情。

票数 1
EN

Stack Overflow用户

发布于 2016-09-23 02:22:37

web应用程序只有两个上下文。

一个是全局的,称为应用程序上下文,它是整个web应用程序都可以访问的。另一个是Servlet配置,这只能由特定的servlet访问。

当您想要将侦听器限制到特定的上下文时,那么您应该对特定的servlet使用Servlet的init-params (即Servlet Config)。

代码语言:javascript
复制
<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配置,因此必须将初始参数"javax.websocket.server.ServerContainer“添加到所有要限制的servlet

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39644206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档