1

我们使用带有portlet 的JBoss 4.22。当监听器标记不在 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 时未加载的那个)构造函数创建。我仍然可以期望这种情况还是容器本身创建一个实例?

4

2 回答 2

1

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

一种解决方案是使用HttpSession绑定侦听器并将类作为属性添加到会话中。然后在会话无效时调用 unbound()。:)

于 2009-09-17T21:19:40.160 回答
1

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

于 2009-09-17T21:34:46.770 回答