request和response
生命週期
一旦訪問服務器,服務器就會建立對應的servlet中的rquest和response對象
request 響應前銷燬
response 數據回寫到瀏覽器後銷燬
request
獲取請求相關信息
請求轉發
做爲域對象進行存取數據
response
設置響應相關信息(行,頭,體)
重定向
請求轉發和重定向區別
1.地址欄
2.請求次數
3.數據共享
4.是否訪問內部資源
請求轉發是 基於服務器的絕對路徑
其餘 基於瀏覽器的絕對路徑
##ServletContext(表明整個Web應用,能夠和程序的容器(服務器)來通訊)
一、生命週期:
從項目啓動的時候建立
在項目關閉時銷燬(正常關閉)
二、獲取:
1. 經過request對象獲取
request.getServletContext()
2. 經過HttpServlet獲取
this.getServletContext()
做用:
1. 獲取MIME類型 文件的類型 .jpg .txt
* MIME類型:在互聯網通訊過程當中定義的一種文件數據類型
* 格式:大類型/小類型 text/html image/jpeg
* 獲取:String getMimeType(String file)
2. 域對象:共享數據
getAttribute()
setAttribute()
removeAttribute()
* ServletContext對象範圍:全部用戶全部請求的數據(謹慎使用)
3. 獲取文件的真實(服務器)路徑
1. 方法:String getRealPath(String path)
不一樣的文件位置訪問方式不一樣
src下:/WEB-INF/classes/a.txt
web下:b.txt
WEB-INF下:/WEB-INF/c.txt(通常不會使用,裏面存在敏感信息)
案例:文件下載(中文文件名稱)
1. 瀏覽器點擊下載觸發下載操做
2. 服務器必須存在對應的文件
3. 文件傳輸(輸入流和輸出流)
讀取文件--->輸入流
往瀏覽器回寫數據 ---> 輸出流(response.getOutputStream)
4. 中文文件名下載顯示問題:
* 解決:
1. 獲取客戶端使用的瀏覽器版本信息(user-agent)
2. 根據不一樣的版本信息,設置filename的編碼方式不一樣(利用工具類返回filename)
會話:客戶端瀏覽器訪問服務器資源,只要客戶端和服務器端不關閉,則能夠屢次請求和響應
一次會話包含屢次請求和響應。
* 一次會話:劉籃球第一次給服務器發送請求,會話創建,直到有一方斷開爲止
* 做用:在一次會話範圍內的屢次請求間,共享數據
* 方式:
1. 客戶端會話技術:Cookie
2. 服務器端會話技術:Session
Cookie+Session
##Cookie 保存在瀏覽器端的東西 客戶端會話技術
使用步驟:
1. 建立Cookie對象,綁定數據。
* new Cookie(String name,String value)
2. 發送Cookie對象
* response.addCookie(Cookie cookie)
3. 獲取Cookie,拿到數據
* Cookie[] request.getCookies()
Cookie細節:
1. 一次能夠發送多個Cookie
能夠建立多個Cookie對象,調用屢次addCookie方法.
2. Cookie在瀏覽器中保存時間
1. 默認狀況下,當瀏覽器關閉後,Cookie被銷燬
2. 設置Cookie的生命週期,持久化存儲:
* setMaxAge(int seconds)
1. 正數:將Cookie數據寫到硬盤的文件中.持久化存儲。Cookie存活時間。
2. 負數:默認值,存在瀏覽器內存中。
3. 零:刪除Cookie信息
3. Cookie存儲中文信息
* 在tomcat8以前,cookie中不能直接存儲中文數據
須要將中文數據轉碼--通常採用URL編碼(%E3)
cookie使用的過程當中:
1. 千萬不要出現中文
2. 千萬不要出現特殊字符(包括空格)
* 在tomcat8以後,cookie支持存儲中文數據
4. Cookie共享問題
1. 假設在一個tomcat服務器中,部署了多個web項目,那麼在這些web項目中cookie能不能共享?
* 默認狀況下cookie不能共享
* setPath():設置cookie的獲取範圍。默認狀況下,設置當前的虛擬目錄。
通常用於控制單個項目內cookie的共享,而不是控制多個項目cookie的共享
* 若是要共享,能夠將path設置爲「/」
2. 不一樣的tomcat服務器間cookie共享問題?
* setDomain(String path):若是設置一級域名相同,那麼多個服務器之間cookie就能夠共享
* setDomain(".baidu.com"),那麼tieba.baidu.com和news.baidu.com中cookie能夠共享
5. cookie的特色
1. cookie存儲數據在客戶端瀏覽器
2. 瀏覽器對於單個cookie的大小有限制(4KB),以及對同一個域名下的cookie數量也有限制(20個)。
* 做用:
1. cookie通常用於存儲少許的不太敏感的數據
2. 在不登陸的狀況下,完成服務器對客戶端的身份識別
html