我需要在会话超时时将页面重定向到索引页面。我的sessionDestroyed方法是这样的;
@Override
public void sessionDestroyed(HttpSessionEvent se) {
HttpSession sess = se.getSession();
HttpServletRequest request = null;
String username = (String) sess.getAttribute("username");
LogoutDao lgod = new LogoutDao();
lgod.logoutUser(username);
request.getrequestDispatcher("/index.jsp");
}
这是我尝试过的,它没有重定向到索引页面。
答案 0 :(得分:2)
只要客户端未发送HTTP请求,您就无法发送HTTP响应。就那么简单。这就是HTTP的工作原理。如果任何网站能够在没有客户请求的情况下轻松推送HTTP响应,那么互联网看起来会有很大不同。
基于客户端键盘/鼠标活动的基于JavaScript的心跳,如此处所回答的,或者像这里所回答的元刷新标题,如果你基本上是一个单页的webapp(那么,你实际上不是使用会话范围,但视图范围),但如果您在同一会话中的多个选项卡/窗口中打开页面,这将无法正常工作。
理论上,Websockets是向客户端推送内容的正确解决方案,但这又需要一个活动会话。鸡蛋问题。此外,它在目前仍然相对广泛使用的旧浏览器中不起作用,因此它目前仅应用于渐进增强。
最好的办法是定义一个错误页面,用于处理最终用户在会话过期时调用操作的情况。另请参见javax.faces.application.ViewExpiredException:无法恢复视图。
答案 1 :(得分:0)
您可以使用会话的超时时间将JavaScript刷新代码段放入响应页面。
您还可以使用“刷新”字段HTTP标头。
请参阅:http://en.wikipedia.org/wiki/List_of_HTTP_header_fields并搜索“刷新”