response、session、cookie
response
response :響應對象
提供的方法:
void addCookie( Cookie cookie ); 服務端向客戶端增加cookie對象
void sendRedirect(String location ) throws IOException; :頁面跳轉的一種方式(重定向)
void setContetType(String type):設置服務端響應的編碼(設置服務端的contentType類型)
示例:登陸
login.jsp -> check.jsp ->success.jsp
. | 請求轉發 | 重定向 |
---|---|---|
地址欄是否改變 | 不變(check.jsp) | 改變(success.jsp) |
是否保留第一次請求時的數據 | 保留 | 不保留 |
請求的次數 | 1 | 2 |
跳轉發生的位置 | 服務端 | 客戶端發出的第二次跳轉 |
轉發、重定向:
轉發:
張三(客戶端) -> 【 服務窗口 A (服務端 ) -> 服務窗口B 】
重定向:
張三(客戶端) -> 服務窗口 A (服務端 ) ->去找B
張三(客戶端) -> 服務窗口 B (服務端 ) ->結束
session(服務端)
Cookie(客戶端,不是內置對象):Cookie是由 服務端生成的 ,再發送給客戶端保存。
相當於 本地緩存的作用: 客戶端(hello.mp4,zs/abc)->服務端(hello.mp4;zs/abc)
作用:提高訪問服務端的效率,但是安全性較差。
Cookie: name=value
javax.servlet.http.Cookie
public Cookie(String name,String value)
String getName():獲取name
String getValue():獲取value
void setMaxAge(int expiry);最大有效期 (秒)
服務端準備Cookie:
response.addCookie(Cookie cookie)
頁面跳轉(轉發,重定向)
客戶端獲取cookie: request.getCookies();
a.服務端增加cookie :response對象;客戶端獲取對象:request對象
b.不能直接獲取某一個單獨對象,只能一次性將 全部的cookie拿到
通過F12可以發現 除了自己設置的Cookie對象外,還有一個name爲 JSESSIONID的cookie
建議 cookie只保存 英文數字,否則需要進行編碼、解碼
session (會話)
a.瀏覽網站:開始-關閉
b.購物: 瀏覽、付款、退出
c.電子郵件:瀏覽、寫郵件、退出
開始-結束
session機制:
客戶端第一次請求服務端時,(jsessionid-sessionid)服務端會產生一個session對象(用於保存該客戶的信息);
並且每個session對象 都會有一個唯一的 sessionId( 用於區分其他session);
服務端由會 產生一個cookie,並且 該cookie的name=JSESSIONID ,value=服務端sessionId的值;
然後 服務端會在 響應客戶端的同時 將該cookie發送給客戶端,至此 客戶端就有了 一個cookie(JSESSIONID);
因此,客戶端的cookie就可以和服務端的session一一對應(JSESSIONID - sessionID)
客戶端第二/n次請求服務端時:服務端會先用客戶端cookie種的JSESSIONID 去服務端的session中匹配sessionid,如果匹配成功(cookie jsessionid和sesion sessionid),說明此用戶 不是第一次訪問,無需登錄;
例子:
客戶端: 顧客(客戶端)
服務端: 存包處 - 商場(服務端)
顧客第一次存包:商場 判斷此人是 之前已經存過包(通過你手裏是否有鑰匙)。
如果是新顧客(沒鑰匙) ,分配一個鑰匙 給該顧客; 鑰匙 會和 櫃子 一一對應;
第二/n次 存包:商場 判斷此人是 之前已經存過包(通過你手裏是否有鑰匙)
如果是老顧客(有鑰匙),則不需要分配;該顧客手裏的鑰匙 會 和櫃子 自動一一對應。
cookie和session的區別:
/ | session | cookie |
---|---|---|
保存的位置 | 服務端 | 客戶端 |
安全性 | 較安全 | 較不安全 |
保存的內容 | Object | String |
四種範圍對象(小->大)
pageContext JSP頁面容器 (page對象); 當前頁面有效
request 請求對象 同一次請求有效
session 會話對象 同一次會話有效
appliation 全局對象 全局有效(整個項目有效)
👇
a.
pageContext 當前頁面有效 (頁面跳轉後無效)
b.
request 同一次請求有效;其他請求無效 (請求轉發後有效;重定向後無效)
c.
session 同一次會話有效 (無論怎麼跳轉,都有效;關閉/切換瀏覽器後無效 ; 從 登陸->退出 之間 全部有效)
d.
application
全局變量;整個項目運行期間 都有效 (切換瀏覽器 仍然有效);關閉服務、其他項目 無效
注意:
1.以上的4個範圍對象,通過 setAttribute()賦值,通過getAttribute()取值;
2.以上範圍對象,儘量使用最小的範圍。因爲 對象的範圍越大,造成的性能損耗越大。