use*_*704 2 servlets java-ee httpsession
我刚刚尝试在我的测试Web应用程序中添加会话侦听器HttpSessionBindingListener和HttpSessionAttributeListener ; 它们都在我的测试对象中实现为:
public class MySessionListener implements HttpSessionBindingListener,HttpSessionAttributeListener
{
//implemented methods...
}
Run Code Online (Sandbox Code Playgroud)
事情是...
我试过像一个代码
session.setAttribute("name",new TestValue());
Run Code Online (Sandbox Code Playgroud)
因此,我希望调用HttpSessionBindingListener
事件,valueBound(...)
但我只调用了HttpSessionAttributeListener
一个attributeAdded(...)
:(
而且,关于valueUnbound(...)
方法态度与我提到的完全相同,我使用的代码就像
session.removeAttribute("name");
Run Code Online (Sandbox Code Playgroud)
...但我attributeRemoved(...)
只是被称为同一个:S
我想尝试putValue()方法,但现在我正在观看HttpSession文档,其中说"putValue已弃用.从版本2.2开始,此方法被setAttribute(java.lang.String,java.lang.Object)取代"
所以我不知道为什么调用valueBound(...)
或valueUnbound(...)
不调用以及如何调用它们?
谢谢
valueBound未被调用,因为MySessionListener
不是要添加到会话的对象.
如果TestValue
实现HttpSessionBindingListener
它的valueBound
方法将被调用.
HttpSessionBindingListener
用于通知对象它正被添加到会话中.
HttpSessionAttributeListener
用于(如您所发现的)从会话中添加/删除的属性.
随着HttpSessionBindingListener
这里是什么容器在说:"嘿TestValue
,你添加到会话"
随着HttpSessionAttributeListener
这里是什么容器在说:"嘿MySessionListener,属性添加到会话"
所以,如果是TestValue
implements HttpSessionBindingListener
,它会在添加到会话时调用valueBound:
session.setAttribute("name",new TestValue());
Run Code Online (Sandbox Code Playgroud)
在您的情况下,如果您向MySessionListener
会话添加了一个实例(不是您想要的,但是因为它实现了HttpSessionBindingListener
),它会valueBound
在添加到会话时调用该方法:
session.setAttribute("name", new MySessionListener());
Run Code Online (Sandbox Code Playgroud)
另见:HttpSessionBindingListener和HttpSessionAttributeListener的实际用法
归档时间: |
|
查看次数: |
2544 次 |
最近记录: |