java中会话超时的重定向页面

java中会话超时的重定向页面,java,session,servlets,Java,Session,Servlets,我需要在会话超时时将页面重定向到索引页面。我的sessionDestroyed方法是这样的 @Override public void sessionDestroyed(HttpSessionEvent se) { HttpSession sess = se.getSession(); HttpServletRequest request = null; String username = (String) sess.getAttrib

我需要在会话超时时将页面重定向到索引页面。我的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");
    }

这是我尝试过的,它没有重定向到索引页面。

您可以在会话超时的情况下将JavaScript刷新片段放入响应页面

您还可以使用“刷新”字段HTTP头


请参阅:并搜索“刷新”

只要客户端尚未发送HTTP请求,您就无法发送HTTP响应。就这么简单。HTTP就是这样工作的。如果任何一个网站能够在没有客户端请求的情况下,毫不犹豫地推送HTTP响应,那么互联网看起来就会大不相同

如果您基本上是一个单页webapp(因此,您实际上使用的不是会话范围,而是视图范围),那么基于客户端键盘/鼠标活动(如此处所述)的基于JavaScript的心跳或如此处所述的元刷新头将是解决方案,但是,如果您在同一个会话中在多个选项卡/窗口中打开页面,这将无法很好地工作

理论上,Websockets是将内容推送到客户端的正确解决方案,但这反过来又需要一个活动会话。鸡蛋问题。而且,它在目前仍在相对广泛使用的旧浏览器中不起作用,因此它目前应该仅用于渐进增强


最好只定义一个错误页面,该页面处理终端用户在会话过期时调用操作的情况。另请参见javax.faces.application.ViewExpiredException:视图无法还原。

当然它不是重定向。键入时,它甚至不会编译,但假设这是一个输入错误,当您调用
request.getRequestDispatcher()
时,它会得到一个
NullPointerException
,其空值为
request.
,当您修复该问题时,您无法修复,因为您无法从
HttpSessionEvent获取
HttpServletRequest
它仍然不会做任何事情,因为您没有对
getRequestDispatcher()
的结果做任何事情。