我的web.xml中的监听器出了什么问题?

时间:2009-09-17 15:56:37

标签: java jboss portlet

我们正在将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>

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

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:1)

您的侦听器节点在web.xml中的顺序是否正确?可能因为没有关注DTD而被忽略了?例如,servlet,servlet-mappings,session-configs都应该在监听器之前。