Context && Cookie

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

相關文章
相關標籤/搜索