Web.xml 裏面的Session-Config 屬性

1、首先說明Web.xml 裏面的Session-Config 屬性

當session超時時,會調用httpSessionListener中的sessionDestroy()方法。
html

具體設置方法有三種:java

(1)在主頁面或者公共頁面中加入:session.setMaxInactiveInterval(900);能夠經過對應的getMaxInactiveInterval()獲取。參數900單位是秒,即在沒有活動15分鐘後,session將失效。另外,經過調用Session的invalidate()方法可使Session顯示失效。web

這裏要注意這個session設置的時間是根據服務器來計算的,而不是客戶端。因此若是是在調試程序,應該是修改服務器端時間來測試,而不是客戶端。spring

(2)也是比較通用的設置session失效時間的方法,就是在項目的web.xml中添加Xml代碼服務器

session-config :若是某個會話在必定時間內未被訪問,服務器能夠拋棄它以節省內存。session

可經過使用HttpSession的setMaxInactiveInterval方法明確設置單個會話對象的超時值,app

或者可利用session-config元素制定缺省超時值。框架

<!-- session-config包含一個子元素session-timeout.定義web站臺中的session參數.  -->  
 <session-config>  
     <!-- 定義這個web站臺全部session的有效期限.單位爲分鐘. 例子中爲600分鐘 -->  
     <session-timeout>600</session-timeout>  
 </session-config>

2、基於Session操做的一些應用

2.1 基於servlet API 的Session 操做

 在通常系統中,也可能須要在session失效後作一些操做,性能

(1)控制用戶數,當session失效後,系統的用戶數減小一個等,控制用戶數在必定範圍內,確保系統的性能。測試

(2)控制一個用戶屢次登陸,當session有效時,若是相同用戶登陸,就提示已經登陸了,當session失效後,就能夠不用提示,直接登陸了。

 那麼如何在session失效後,進行一系列的操做呢?

這裏就須要用到監聽器了,即當session由於各類緣由失效後,監聽器就能夠監聽到,而後執行監聽器中定義好的程序就能夠了。

監聽器類爲:HttpSessionListener類,有sessionCreated和sessionDestroyed兩個方法 

本身能夠繼承這個類,而後分別實現。

sessionCreated指在session建立時執行的方法

sessionDestroyed指在session失效時執行的方法

package com.yuan.Session;

import java.text.SimpleDateFormat;
import java.util.Date;

import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {

	public void sessionCreated(HttpSessionEvent se) {
		// session建立時執行
		SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
		String nowtimes = simpleFormat.format(new Date());
		//User u = (User)ActionContext.getContext().getSession().get("user");//structs的方法
		//String username = (String)se.getSession().getAttribute("username");//用於獲取元素,對象
		System.out.println("執行。。 當前時間:"+nowtimes+");
		HttpSession ses= se.getSession();
		String id=ses.getId()+"_"+ses.getCreationTime();
	}
	public void sessionDestroyed(HttpSessionEvent arg0) {
		// session失效時執行
		SimpleDateFormat simpleFormat = new SimpleDateFormat("mm-ss-ms");
		String nowtimes = simpleFormat.format(new Date()); 
		System.out.println("session失效時間: "+nowtimes);
	}
}

        這樣的代碼在傳統的Servlet程序中是很常見的:由於使用了 Servlet API,從而對 Servlet API產生依賴。這樣若是咱們要測試 action,咱們就必須針對 HttpServletRequest、HttpServletResponse 和 HttpSession類提供 mock 或者 stub 實現。固然如今已經有不少開源的 Servlet 測試框架幫助咱們減輕這個痛苦,包括 Spring 就自帶了對了這些類的 stub 實現,但那仍是太冗繁瑣碎了。那有沒有比較好的辦法來讓咱們的 controller 更 POJO,讓咱們的 action 脫離 Servlet API 依賴,更有益於測試和複用呢?咱們來看看在 Spring2.5 中訪問 Session 屬性的幾種解決方案,並將在本博的後續文章繼續探究解決方案選擇背後的深層含義。

備註:感受測試會有問題,比較麻煩。

參考博文:能夠查看該博文讀取詳細內容

2.2 spring 經過 申明來使用

Spring對annotationed的 action 的參數提供自動綁定支持的參數類型包括 Servlet API 裏面的 Request/Response/HttpSession(包含Request、Response在Servlet API 中聲明的具體子類)。因而開發人員能夠經過在 action 參數中聲明 Request 對象或者 HttpSession 對象,來讓容器注入相應的對象。

  action 的代碼以下:

  Java代碼

  @RequestMapping
  public void hello(HttpSession session){
  User user = (User)session.getAttribute("currentUser");
  //...
  }
相關文章
相關標籤/搜索