Web前端之cookie、session、請求轉發與重定向
阿新 • • 發佈:2018-12-20
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