我对Tomcat中的会话有疑问。

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

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

我该如何处理?

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

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

请教我你的方式。

最佳答案

当您的会话过期时,会话对象将从请求对象返回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);
    }
}

08-03 23:15