我们正在将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时未加载的)构造函数创建实例。我是否仍然可以期待这种情况,或者容器是否自己创建了一个实例?
答案 0 :(得分:1)
问题是在部署文档中声明的侦听器在加载该文档时被实例化。我的类被设计为由portlet实例化,因此不需要信息。
解决方案是使用HttpSessionBindingListener并将类作为属性添加到会话中。然后在会话失效时调用unbound()。 :)
答案 1 :(得分:1)
您的侦听器节点在web.xml中的顺序是否正确?可能因为没有关注DTD而被忽略了?例如,servlet,servlet-mappings,session-configs都应该在监听器之前。