Tomcat会话已过期处理

lv0*_*un9 1 session jsp tomcat

我对Tomcat中的会话有疑问.

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

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

我该怎么处理?

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

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

请教我你的方式.

Usm*_*kil 6

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

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

最好将此类测试留给可以检查每个请求的过滤器,但是您可以在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               
        }
%>
Run Code Online (Sandbox Code Playgroud)

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
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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);
    }
}
Run Code Online (Sandbox Code Playgroud)