1

我对 Tomcat 中的会话有疑问。

当Tomcat默认会话过期时间是30分钟我知道。

我想向用户显示会话过期消息页面。

我该如何处理?

如果存在会话过期错误代码,请指导我。

我用谷歌搜索了会话过期的错误代码,但我找不到它。

请教我你的方法。

4

2 回答 2

6

当您的会话到期时,会话对象将从请求对象返回 null。

if(request.getSession(false)==null){
     //Session expired or never existed
} else{
   //session is still good.
}

更好的做法是将此类测试留给可以检查每个请求的过滤器,但您可以在 JSP 或 servlet 内部进行。将重定向代码放在 JSP 中往往会使它变得更加复杂,并使您的注意力从 UI 上移开。我建议使用过滤器,如果没有,那么在将请求路由到您的 JSP(您的控制器)的 servlet 中。如果您不使用控制器...

JSP 版本(不推荐) - 在您的 JSP 中使用以下内容

<%
         if(request.getSession(false)==null){
            //session has expired
            response.sendRedirect("/ExpiredPage");
         } else{
           //Do what you normally would               
        }
%>

Servlet 版本(更好) - 在调用 JSP 的 servlet 内部使用以下内容

public void doGet(HttpServletRequest request,HttpServletResponse){    
     if(request.getSession(false)==null){
        //session has expired
        response.sendRedirect("/ExpiredPage");
     } else{
       //Do what you normally would
    }
}

过滤器版本(最佳选择) - 在您的过滤器中调用您的 servlet 并调用您的 JSP,使用以下内容

public void doFilter(ServletRequest request,ServletResponse, FilterChain chain){    
     if((HttpServletRequest)request.getSession(false)==null){
        //session has expired
        ((HttpServletResponse)response).sendRedirect("/ExpiredPage");
     } else{
       //Do what you normally would
       chain.doFilter(request,response);
    }
}
于 2013-08-05T20:49:04.240 回答
0

如果您使用的是 Servlet,那么您将抛出 java.lang.IllegalStateException。当您尝试使用会话时。
如果您使用的是 JSP,那么您将抛出 NullPointerException。当您尝试访问因旧会话丢失的会话属性时。

于 2013-08-05T17:14:30.450 回答