HttpServletRequest詳解

一、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ù)。

推薦閱讀更多精彩內(nèi)容