2013-08-05 103 views
0

我有一个关于Tomcat会话的问题。Tomcat会话过期处理

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

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

我该如何处理?

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

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

请教我你的方式。

+0

如果会话过期,用户将被注销,如果他们刷新或导航到一个受保护的页面将被带到登录页面。 – EJP

+0

@EJP,感谢您的评价。 但是如何及时识别会话过期的情况? – lv0gun9

+1

你可以发布你的web.xml的相关部分吗?你是否在web xml中配置了你的受保护页面? – Subin

回答

4

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

不错,善良的解决方案。 :3 tyvm。 – lv0gun9

0

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