【问题标题】:What's wrong with my listener in my web.xml?我的 web.xml 中的侦听器有什么问题?
【发布时间】:2009-09-17 15:56:36
【问题描述】:

我们将 JBoss 4.22 与 portlet 一起使用。当监听器标记不在 web.xml 中时,portlet 会加载,但监听器 sessionDestroyed() 永远不会被调用(显然)。添加时,portlet 没有加载,也没有任何异常或日志消息。有什么我应该注意的问题吗?

   <web-app xmlns="http://java.sun.com/xml/ns/j2ee"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
             version="2.4">


           <!-- Listeners used by application -->
        <listener>
            <listener-class>listenerpackage.MyClassThatImplementsHttpSessionListener</listener-class>
        </listener>
    ...Other tags...
    </web-app>

在回复 cmets 时,我一直在查看代码以查找问题点。我的 Listener 的构造函数确实有一些可能的问题。通常(不是作为侦听器)一个实例将由相关的 portlet(当侦听器添加到 web.xml 时未加载的那个)构造函数创建。我还能期望这种情况还是容器本身创建一个实例?

【问题讨论】:

  • 原则上应该没问题。你的听众班有没有做过任何可能会产生连锁反应的俏皮话?
  • 我不熟悉“敲击”效果。侦听器是一个委托并管理许多对象和连接。我们让它实现 HttpSessionListener 以便它可以清理对象和清理连接。
  • 你的听众在做什么?它可能会以某种方式阻止整个网络应用程序吗?

标签: java jboss portlet


【解决方案1】:

问题是部署文档中声明的侦听器在加载该文档时被实例化。我的类被设计为由 portlet 实例化,因此所需的信息不可用。

解决方案是使用HttpSessionBindingListener 并将类作为属性添加到会话中。然后在会话无效时调用 unbound()。 :)

【讨论】:

    【解决方案2】:

    您的监听器节点在 web.xml 中的顺序是否正确?也许由于不遵循 DTD 而被忽略?例如,servlet、servlet-mappings、session-configs 都应该在监听器之前。

    【讨论】:

    • 你在哪里看到的?我的搜索倾向于在顶部和底部显示监听器标签。我还阅读了一些线程,指出它只对重复和参数很重要,尽管我现在没有它们。
    猜你喜欢
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 2013-11-01
    • 2010-11-26
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 2012-10-09
    相关资源
    最近更新 更多