我想在JSP页面中重置会话而不使其失效.原因是,用户可能已经使用会话打开了一个页面并使其无效会抛出一个NullPointerException.由于已经捕获了一个新的会话,我不想添加额外的短语.目标是清除所有属性.
我正在寻找类似的东西:
session = new HttpSession(); //this does obviously not work
Run Code Online (Sandbox Code Playgroud)
另一种选择是(?)
while(session.getAttributeNames().hasMoreElements()){
session.removeAttribute(session.getAttributeNames().nextElement());
} //cleans session?
Run Code Online (Sandbox Code Playgroud)
但我不确定,如果这会删除一些必要的会话属性,如login-data.
有一个很好的方法来做到这一点?
编辑:最好的解决方案是,每次打开某个页面时,都会为该窗口/选项卡创建一个新会话,直到您关闭该选项卡或重新访问该选项卡中的该页面.这个问题是通过尝试解决这个问题而发生的.
是的,有一个很好的方法可以做到这一点。HttpSession创建一个包装对象并实现接口的类Map。在实现中,您可以操作会话属性而不会使会话失效。SessionMap与Struts2框架中的实现代码类似。您可以在SessionMap此处阅读文档页面。
Map用于处理 HTTP 会话属性集合的接口的简单实现。该entrySet()方法枚举所有会话属性并创建一个Set条目。请注意,这将延迟发生 - 仅当请求条目集时。
您可以在 JSF 中找到类似的SessionMap实现。您可以在此处找到文档页面。
Run Code Online (Sandbox Code Playgroud)public class SessionMap extends java.util.AbstractMap<java.lang.String,V>也可以看看:
javax.faces.context.ExternalContext#getSessionMap()
如果您使用任何这些框架,您可以使用或覆盖clear()方法来获得您想要的。
| 归档时间: |
|
| 查看次数: |
2150 次 |
| 最近记录: |