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,属性添加到会话"
所以,如果是TestValueimplements 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 次 |
| 最近记录: |