一、HttpServletRequest詳解
代表著客戶端的請求。要客戶的信息只要找這個對象即可,該對象由容器創(chuàng)建。
學(xué)習(xí)關(guān)鍵:時刻記住HTTP協(xié)議的請求部分的具體內(nèi)容。
6.1常用簡單方法
6.2獲取請求消息頭
6.3獲取請求參數(shù)(內(nèi)省)
6.4常用表單數(shù)據(jù)的獲取
表單輸入域類型:
radio checkbox,即使表單中有對應(yīng)名稱輸入域,如果一個不選擇,則什么數(shù)據(jù)不會帶給服務(wù)器。(注意空指針異常)
如果選擇了其中的一個或多個,則把他們的value的取值提交給服務(wù)器。
如果選擇了其中的一個或多個,他們又沒有value取值,則提交給服務(wù)器的值是on.
請求參數(shù)的編碼:
瀏覽器當(dāng)前使用什么編碼,就以什么編碼提交請求參數(shù)。<meta http-equiv="content-type" content="text/html; charset=UTF-8">
request.setCharacterEncoding(編碼):通知程序,客戶端提交的數(shù)據(jù)使用的編碼。但是只對POST請求方式有效
如果是get請求提交數(shù)據(jù),編碼就是ISO-8859-1
Tips:目前采用POST提交方式。
6.5域?qū)ο螅? ServletRequest也是一個域?qū)ο螅▋?nèi)部維護(hù)了一個Map<String,Object>)
Object getAttribute(Stirng name):
void setAttribute(String name,Object value):
void removeAttribute(String name):
6.6請求轉(zhuǎn)發(fā)和重定向
請求轉(zhuǎn)發(fā)借助于RequestDispatcher
如何得到RequestDispatcher對象:
方式一:ServletContext.getRequestDispatcher(目標(biāo)資源的URI);
方式二:ServletRequest.getRequestDispatcher(目標(biāo)資源的URI);
區(qū)別:
方式一中的目標(biāo)資源的URI必須以"/"開頭,否則報錯,此"/"就表示的是當(dāng)前應(yīng)用(絕對路徑表示法)
方式二中的目標(biāo)資源的URI如果以"/"開頭,就表示的是當(dāng)前應(yīng)用(絕對路徑表示法)。如果不以"/"開頭,就表示相對路徑。
(了解原則)6.7轉(zhuǎn)發(fā)和重定向細(xì)節(jié)(實(shí)際開發(fā)中知道一個原則)
1、請求轉(zhuǎn)發(fā):由源組件轉(zhuǎn)發(fā)到目標(biāo)組件時,容器會清空源組件輸出的數(shù)據(jù)。因此,用戶只會看到目標(biāo)組件輸出的頁面結(jié)果。
但是,響應(yīng)頭信息是不清空的。
編碼原則:不要在轉(zhuǎn)發(fā)前后向頁面輸出數(shù)據(jù),也不要關(guān)閉輸出流。(做無用功)
(了解原則)6.8包含:(動態(tài)包含)
由源組件包含到目標(biāo)組件時,容器會清空目標(biāo)組件的頭。因此,源組件設(shè)置的頭才有效。
但是,響應(yīng)體信息是不清空的。
編碼原則:不要在目標(biāo)組件中設(shè)置響應(yīng)頭。(做無用功)
二、會話概述
1、會話過程就好比打電話。
2、學(xué)習(xí)會話要解決的問題是什么?
會話過程中的數(shù)據(jù)保存。
三、Cookie和HttpSession簡介
Cookie是客戶端技術(shù)
HttpSession是服務(wù)器端技術(shù)
四、Cookie詳細(xì)介紹
javax.servlet.http.Cookie
1、Cookie是什么?
一個小信息,由服務(wù)器寫給瀏覽器的。由瀏覽器來保存。
客戶端保存的Cookie信息,可以再次帶給服務(wù)器。
2、Cookie的屬性:
name:必須的
value:必須的
comment:可選的。注釋
path:可選的。
寫Cookie的程序的訪問路徑是:http://localhost:8080/day07/servlet/CookieDemo1
其中:localhost就是域名;/day07/servlet就是當(dāng)前Cookie的path
訪問的地址的URI.startWith(cookie的路徑),為true就帶
比如IE存的cookie的路徑是/day07
現(xiàn)在訪問的地址是:http://localhost:8080/day07/servlet/CookieDemo1 帶
現(xiàn)在訪問的地址是:http://localhost:8080/day07/CookieDemo1 帶
比如IE存的cookie的路徑是/day07/servlet/
現(xiàn)在訪問的地址是:http://localhost:8080/day07/servlet/CookieDemo1 帶
現(xiàn)在訪問的地址是:http://localhost:8080/day07/CookieDemo1 不帶
如果一個Cookie的路徑設(shè)置成了/day07,意味著什么?當(dāng)前應(yīng)用下的所有資源瀏覽器都會帶著它給服務(wù)器。
domain:可選的。該Cookie所屬的網(wǎng)站域名。(itcast.cn)默認(rèn)值。
maximum age:可選的。不設(shè)置就是會話過程(存在瀏覽器的內(nèi)存中)。單位是秒
如果是0,說明要刪除。
version:可選的。
3、如何向客戶端寫Cookie:HttpServletResponse.addCookie(javax.servlet.http.Cookie)(就是寫了一個響應(yīng)消息頭:Set-Cookie:cookie的信息)
特點(diǎn):一個瀏覽器針對一個網(wǎng)站最多存20個Cookie;最多存300個Cookie,每個Cookie的長度不能超過4KB。(稀缺)
4、服務(wù)器如何得到客戶端傳來的Cookie。HttpServletRequest.getCookies()
5、如何區(qū)分Cookie:通過名稱不行。
domain+path+name來區(qū)分的。
localhost/day07/servlet/lastAccessTime
五、Cookie案例:
5.1記住用戶最后一次的訪問時間
5.2記住用戶登錄時的用戶名
5.3電商網(wǎng)站:記住用戶商品的歷史瀏覽記錄
六、各種URL地址的寫法
相對路徑
絕對路徑:(建議的)
絕對路徑怎么寫?什么時候需要加上應(yīng)用名稱"/day07"?
原則:地址是不是給服務(wù)器用的,如果是,"/"就代表著當(dāng)前應(yīng)用。如果是給客戶端用的絕對路徑要加上應(yīng)用名稱。
<link href=path/> 要加/day07
<script src=path/> 要加/day07
<img src=path/> 要加/day07
<a href=path/> 要加/day07
RequestDispatcher.include(path) 不要加,"/"就代表著當(dāng)前應(yīng)用
RequestDispatcher.forward(path) 不要加,"/"就代表著當(dāng)前應(yīng)用
HttpServletResponse.sendRedirect(path) 要加/day07
ServletContext.getRealPath(path) 不要加,"/"就代表著當(dāng)前應(yīng)用
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。