2013-08-05 101 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。當您嘗試訪問舊會話丟失的會話屬性時。