1. 目錄
1.1. HTTP 狀態(tài)保持
- URL重寫
- 隱藏域
- cookies
- sessions
1.2. Servlet
- Spring Boot注冊過濾器
Filter
1.3. Spring MVC
- 轉(zhuǎn)發(fā)
- 重定向
- 請求參數(shù)
@RequestParam
- 路徑變量
@PathVariable
- 模型屬性
@ModelAttribute
2. HTTP 狀態(tài)保持
2.1. URL重寫
2.2. 隱藏域
2.3. Cookie
2.3.1. 特性
- 由服務(wù)端生成妙色,可以通過HTTP頭發(fā)送給瀏覽器,由瀏覽器存儲在本地;
- 瀏覽器在訪問同一Web服務(wù)器時哼御,會將之前收到的Cookie攜帶在HTTP請求頭中一并發(fā)送不见。
Cookie的缺陷
- cookie會被附加在每個HTTP請求中斑鼻,所以無形中增加了流量。
- cookie在HTTP請求中是明文傳遞的泊愧,所以安全性成問題。(除非用HTTPS)
- cookie的大小限制在4KB左右盛正。對于復(fù)雜的存儲需求來說是不夠用的删咱。
- 用戶出于安全考慮,可以通過改變?yōu)g覽器設(shè)置拒絕接受cookies豪筝。
2.3.2. 創(chuàng)建Cookie
import javax.servlet.http.Cookie;
Cookie cookie = new Cookie(name, value);
2.3.3. Cookie的屬性
- domain:
- path:
- maxAge:cookie的過期時間痰滋。
- httpOnly:
2.3.4. 服務(wù)器發(fā)送Cookie到瀏覽器
- 接口:
HttpServletResponse#addCookie(Cookie):void
服務(wù)器端發(fā)送cookie給客戶端,使用HTTP頭的Set-Cookie
字段续崖。包括了對應(yīng)的cookie的名稱敲街,值,以及各個屬性严望。例如:
Set-Cookie: lu=YLjVg7qi3bZjzgRg3vHJZneh; Expires=Tue, 15 Jan 2021 22:37:38 GMT; Path=/; Domain=.it168.com; HttpOnly
Set-Cookie: made_write_conn=1295214458; Path=/; Domain=.it168.com
Set-Cookie: reg_fb_gate=deleted; Expires=Thu, 01 Jan 1970 00:00:01 GMT; Path=/; Domain=.it168.com; HttpOnly
2.3.5. 瀏覽器提交cookie到服務(wù)端
瀏覽器發(fā)送cookie給服務(wù)器的時候多艇,是不發(fā)送cookie的各個屬性的,而只是發(fā)送對應(yīng)的名稱和值像吻。使用HTTP頭的Cookie
字段:
GET /spec.html HTTP/1.1
Host: www.example.org
Cookie: name=value; name2=value2
Accept: */*
服務(wù)端提取Cookie使用如下接口:HttpServletRequest#getCookies():Cookie[]
墩蔓。
2.3.6. 查找指定名稱的Cookie
public static Cookie findCookie(String cookieName) {
if (cookieName == null) {
return null;
}
for (Cookie c : httpServletRequest.getCookies()) {
if (cookieName.equals(c.getName())) {
return c;
}
}
return null;
}
2.3.7. 刪除Cookie
創(chuàng)建一個同名Cookie,設(shè)置maxAge為0萧豆,添加到HttpServletResponse中奸披,相當(dāng)于刪除同名cookie:
Cookie cookie = new Cookie("name", "");
cookie.setMaxAge(0);
httpServletResponse.addCookie(cookie);
2.4. Session
2.4.1. 特性
- 由服務(wù)端創(chuàng)建和維護,不會發(fā)送給客戶端涮雷,只會將其唯一ID發(fā)送給客戶端
- 服務(wù)端發(fā)送Session id給客戶端通常有兩種方式:(1)創(chuàng)建一個名為JSESSIONID的cookie阵面,其值為會話ID,(2)在URL后附加一個名為jsessionid的參數(shù)