1. 程式人生 > >Web前端之cookie、session、請求轉發與重定向

Web前端之cookie、session、請求轉發與重定向

http協議的特點:稱之為無狀態, 請求與請求之間不會記錄狀態(狀態就包括請求引數等資訊)

Cookie:記錄多個請求之間的聯絡,儲存伺服器狀態(實現記住使用者名稱的功能)

建立Cookie

Cookie c = new Cookie("名字", "值");
瀏覽器每個域名下能夠包含30~50個cookie
每個cookie的長度大約是4k左右

方法:

c.setMaxAge(整數);      // 設定cookie的壽命,秒,沒有設定壽命的是會話cookie瀏覽器關閉就刪除
c.setMaxAge(0);         // 壽命為0,刪除此cookie
response.addCookie(c);  // 通過響應物件,把建立的cookie返回給瀏覽器

獲取cookie

Cookie[] cookies = request.getCookies(); //獲取所有的

el的語法:

${cookie.cookie的名稱.value}

session 會話

儲存多次請求之間的狀態資訊,資訊存在伺服器的內容當中

建立

HttpSession session = request.getSession();  
// 首次呼叫是建立session物件
// 後續呼叫是獲取第一次建立好的session物件

方法:

存入內容:session.setAttribute("變數名", 任意資訊);
獲取內容:Obejct 資訊 = session.getAttribute("變數名");
刪除內容:Obejct 資訊 = session.removeAttribute("變數名");
讓session失效(清空session中所有內容):session.invalidate();

應用-使用者登入、使用者登出(安全退出)

jsp頁面獲取session中的變數

${sessionScope.變數名}

實現原理

針對同一瀏覽器,才能實現在請求儲存資訊,在之後的請求獲取資訊的效果
每個使用者訪問伺服器,伺服器會建立一個獨立的session

session和cookie的區別:

1. session將資訊儲存於伺服器端,cookie將資訊儲存於瀏覽器端
2. session更安全
3. session的生命週期相對較短, 
	兩次請求間隔超過30分鐘,伺服器會銷燬session
	呼叫session.invalidate方法時,會立刻銷燬
   cookie 
	會話cookie是瀏覽器關閉就銷燬
	setMaxAge的cookie會根據設定的壽命存活一段時間
4).儲存的資訊量上
	cookie 每個最大是4k左右
	session不太適合儲存太多的內容
	資訊要永久儲存,需用資料庫
5.cookie裡資料都得是字串,session裡可以存任意型別

重定向請求

請求轉發:

 request.getRequestDispatcher("目錄路徑").forward(request,response);

請求重定向:

 response.sendRedirect("目錄路徑");

兩者區別:

	1.請求轉發時,位址列第一個servlet的地址不變
	   重定向,位址列是最後一個servlet的地址
	2.請求轉發時一次請求,跳轉發生在伺服器內部
	   重定向是兩次請求,第一次請求會返回302的狀態碼和目標地址, 瀏覽器根據目標地址傳送第二次請求,才完成整個流程
	3. 重定向是兩次請求, 用session作用域來存值取值	   
	   請求轉發是同一次請求,用request作用域存值取值
	4. 請求轉發的目標只能是本專案的servlet或jsp
	   重定向可以是任意的

查詢:

servlet  -->  jsp   // 關係密切的跳轉使用請求轉發 		
forward()

刪除:

刪除servlet --> 查詢列表servlet  // 關係不密切的跳轉使用重定向 
redirect()

page(頁號), size(每頁記錄數)

m=(page-1)*size
n=size