我对Tomcat中的会话有疑问。
当Tomcat默认会话过期时间为30分钟时,我知道。
我想向用户显示会话过期的消息页面。
我该如何处理?
如果会话过期错误代码存在,请指导我。
我用谷歌搜索会话过期的错误代码,但我找不到它。
请以你的方式教我。
答案 0 :(得分:5)
当会话到期时,会话对象将从请求对象返回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
}
}
过滤版本(最佳选择) - 在调用调用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);
}
}
答案 1 :(得分:0)
如果您使用的是Servlet,则会抛出java.lang.IllegalStateException。当您尝试使用会话时。
如果您使用的是JSP,那么您将抛出NullPointerException。当您尝试访问使用旧会话丢失的会话属性时。