代码之家  ›  专栏  ›  技术社区  ›  Adam

web.xml中的侦听器有什么问题?

  •  1
  • Adam  · 技术社区  · 15 年前

    我们将JBoss4.22与portlet结合使用。当listener标记不在web.xml中时,portlet将加载,但不会调用listener 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>
    

    作为对评论的回应,我一直在通过代码查找故障点。我的侦听器的构造函数确实有一些可能的问题。通常(不是作为监听器)一个实例将由相关的portlet(当监听器添加到web.xml时未加载的portlet)构造函数创建。我是否仍能预料到这种情况,或者容器本身创建了一个实例?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Adam    15 年前

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

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

        2
  •  1
  •   Greg    15 年前

    在web.xml中,侦听器节点的顺序是否正确?可能因为没有遵循DTD而被忽略了?例如,servlet、servlet映射、会话配置都应该在侦听器之前。