Servlet四種數據共享方案

一、ServletContext接口
全局作用域對象。
1、工作原理:每一個網站都存在一個全局作用域對象,這個對象相當於一個Map,將一個Servlet中的數據存入該對象,當前網站中其他的Servlet都可以從該對象中的得到數據並使用。
2、生命週期:貫穿於整個網站運行期間。

//存放
	ServletContext application=request.getServletContext();
	application.setAttribute("key","共享數據");
//獲取
	ServletContext application=request.getServletContext();
	Object data=application.getAttribute("key");

二、cookie類
1、工作原理:用戶通過瀏覽器向myweb網站發送請求申請OneServlet,OneServlet在運行期間創建了一個cookie存儲當前用戶相關數據。OneServlet工作完畢後,將cookie寫入到響應頭交還給瀏覽器,瀏覽器收到響應包之後,將cookie存在瀏覽器的緩存中。
用戶通過同一個瀏覽器再次向myweb網站發送請求申請TwoServlet時,瀏覽器需要無條件的將myweb網站之前推送過來的cookie寫入到請求頭髮送過去。
2、前提:兩個Servlet來自於同一個網站並且爲同一個瀏覽器/用戶提供服務。
3、生命週期:默認情況下,瀏覽器關閉則銷燬。但可以手動設置,要求瀏覽器將接受的cookie存放在客戶端計算機的硬盤上,同時需要指定cookie在硬盤上的存活時間:cookie.setMaxAge(秒)
4、注意:一個cookie只能存放一個鍵值對,鍵和值的類型都只能是String,鍵不能是中文。

//存放
	Cookie card1=new Cookie("key","共享數據1");
	Cookie card2=new Cookie("key","共享數據2");
	response.addCookie(card1);
	response.addCookie(card2);
//獲取
	Cookie[] cookies=request.getCookies();
	for(Cookie cookie:cookies){
		System.out.println(cookie.getName());
		System.out.println(cookie.getValue());
	}

三、HttpSession接口
會話作用域對象。
1、工作原理:Tomcat在創建一個HttpSession對象時自動爲這個HttpSession對象生成一個編號(箱號)。Tomcat將箱號保存到cookie對象中,推送到當前瀏覽器緩存。格式爲cookie:JSESSIONID=箱號。等到用戶第二次訪問,Tomcat根據請求頭JSESSIONID確認用戶是否有HttpSession以及哪一個HttpSession是當前用戶。
2、前提:兩個Servlet來自於同一個網站並且爲同一個瀏覽器/用戶提供服務。且不能禁用cookie,因爲session是藉助於cookie實現數據共享的。
3、生命週期:
1)cookie是用戶與session的關聯,瀏覽器關閉則cookie銷燬,也就是用戶與session的關聯斷開。但Tomcat無法檢測瀏覽器是否關閉,因此瀏覽器關閉時session並不會銷燬。
2)瞭解決這個問題,Tomcat爲session對象設置了空閒時間,默認爲30分鐘,超過30分鐘session將被銷燬。另外,可以在web.xml文件中自定義session空閒時間。

//存放
	HttpSession session=request.getSession();
	session.setAttribute("key","共享數據");
//獲取
	HttpSession session=request.getSession();
	Object data=session.getAttribute("key");

四、HttpServletRequest接口
請求作用域對象。
1、工作原理:在同一個網站中,如果兩個Servlet通過請求轉發方式進行調用,彼此之間共享一個請求協議包,而一個請求協議包共享一個請求對象,此時可利用請求對象進行數據共享。
2、前提:Servlet共享同一個請求協議包(請求對象)。

//存放
	request.setAttribute("key","共享數據");
	request.getRequestDispatcher("/two").forward(request,response);
//獲取 此處爲別名/two的servlet
	Object data=request.getAttribute("key");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章