傳智播客168期JavaEE就業班(第十一天 cookie session)

葬天VS曉偉發表於2016-03-22
* 課程回顧:
    * response物件(響應)
        * 響應行
            * 狀態碼    :setStatus(int a)    設定狀態碼        302重定向        304控制快取
        * 響應頭
            * setHeader()    一個key對應一個value
            * addHeader()    一個key對應多個value
        * 響應體
            * getOutputStream()    位元組輸出流
            * getWriter()        字元輸出流
            
        * 案例:重定向到登陸頁面
            設定狀態碼(302)    設定頭location
            重定向的方法:sendRedirect("客戶端絕對路徑"); 寫專案名
            
        * 頁面的定時重新整理
            使用refresh頭完成頁面的定時重新整理        setHeader("refresh","5;url=/day10/xxx");
            使用HTML的標籤<meta>
            
        * 禁用瀏覽器的快取(設定三個頭資訊    CEP)
            
        * 向頁面輸出中文亂碼的問題
            * 位元組
                設定瀏覽器開啟檔案時的編碼
                    response.setHeader("Content-Type","text/html;charset=UTF-8");
                獲取字串的位元組陣列
                    "中文".getBytes("UTF-8");
                
            * 字元
                * 設定瀏覽器開啟檔案時的編碼
                    response.setHeader("Content-Type","text/html;charset=UTF-8");
                * 設定response緩衝區的編碼(預設是ISO-8859-1)
                    response.setCharacterEncoding("UTF-8");
                    
                * 簡寫的方式
                    response.setContentType("text/html;charset=UTF-8");
                    
        * 檔案下載
            * 通過IO流進行讀取
            * 設定頭資訊    setHeader("Content-Disposition","attachment;filename="+檔名稱);    以附件的形式開啟
            
        * 驗證碼(用到哪些類)
            * 在記憶體中生成圖片    BufferedImage    
            * 獲取畫筆的物件
            * 畫一些東西
            * 把圖片輸出客戶端    ImageIO.write(BufferedImage,"jpg",response.getOutputStream());
            
            * 需要驗證加入圖片中    通過img標籤的src的屬性    
            
    * request物件(請求)
        * 獲取客戶機的資訊
            request.getRemoteAddr()        獲取ip
            request.getMethod()            獲取請求方式
            request.getContextPath()    獲取虛擬路徑
            
        * 獲取請求引數(*****)
            request.getParameter("表單中name屬性的值");
            request.getParameterValues();    獲取核取方塊的內容
            
            request.getParameterMap()        獲取鍵值對的形式
            
        * request獲取中文亂碼的問題
            * post
                * 設定request緩衝區的編碼
                request.setCharacterEncoding("UTF-8");
                
            * get
                * 通過String的構造方式
                username = new String(username.getBytes("ISO-8859-1"),"UTF-8");
            
        * request域物件(*****)
            * ServletContext域物件:代表整個WEB應用。
            * request域:一次請求範圍內。
            
        * 重定向和轉發區別
            * 重定向兩次請求,兩次響應,轉發一次。
            * 重定向位址列發生了變化,轉發位址列沒變
            * 重定向不能使用request傳值,轉發就可以。
            * 重定向可以定向到任何資源。轉發只能是系統內部。
            
==============================================================================================================
    * JSP、EL表示式的入門(要用)    
        * Servlet/JSP    是兩種動態的WEB資源的兩種技術。
        * 使用Servlet生成HTML的頁面
            response.getWriter("<form action='' method='post'>");
            response.getWriter("<input type='text' name='username'>");
        * JSP簡介
            * java server pages        java伺服器端的網頁們,是在伺服器端執行。
            * JSP不僅可以寫HTML+java程式碼+JSP自己的程式碼
            * JSP的執行原理(*****):JSP -- 翻譯成Servlet -- 編譯 -- 訪問
            
        * JSP的指令碼元素(JSP的頁面可以編寫java程式碼)
            
            <%!  %>        :定義類、定義變數、定義方法(不常用)    成員變數。
            <%=  %>        :輸出語句(輸出到頁面,不能有分號)    
            <%   %>        :定義變數、語句
            
        * EL快速入門
            * 獲取域物件中的內容        request.setAttribute("xx","yy");
            ${xx}
            
            
    * 兩個會話的技術
        * 會話概念:開啟瀏覽器,可以訪問WEB資源,多次訪問WEB資源,關閉瀏覽器,整個過程一次會話。
        
        * 購買商品
            使用者點選超連結通過一個servlet購買了一個商品,程式應該儲存使用者購買的商品,
            以便於使用者點結帳servlet時,結帳servlet可以得到使用者商品為使用者結帳。
            
        * 把商品存入到ServletContext獲取request域中呢?
        * cookie和seesion的原理
            看圖02
            
    * cookie
        * 顯示上次的訪問時間(案例)
            * 第一次訪問,輸出歡迎,在伺服器端,記錄當前的時間,把當前的時間通過cookie回寫到瀏覽器。
            * 第二次訪問,會帶著上次的時間,獲取時間,可以把時間顯示到頁面上,記錄當前的時間,再把回寫瀏覽器。
            輸出上次的訪問時間。
            
        * Cookie的API
            * cookie的構造方式    Cookie(String name, String value)
            * String getName()  獲取cookie的名稱
            * String getValue() 獲取cookie的值
            
            * void setMaxAge(int expiry)              :設定有效時間
                * 失效cookie    setMaxAge(0);    前提條件:設定有效路徑(和之前設定過相同)
                
            * void setPath(String uri)              :設定有效路徑
                * 預設的有效路徑()
                    * 配置    /last                預設路徑    /day11
                    * 配置    /servlet/last        預設路徑    /day11/servlet
            
            * void setDomain(String pattern)          :設定有效域名
                * www.sina.com.cn
                * sports.sina.com.cn
                * xxx.sina.com.cn
                * 設定有效域名    setDomain(".sian.com.cn");
            
            * 會話級別的cookie:預設儲存到瀏覽器的記憶體中。
            * 持久的cookie:把cookie儲存到磁碟上。通過setMaxAge(int a)進行設定。
            
            
        * 顯示使用者上次訪問過的商品資訊(需求)
             *     1.獲取請求引數
             *     2.獲取cookie陣列,通過指定的名稱(自己指定)查詢cookie
             *     3.如果cookie==null,第一次訪問
             *         * 如果是第一次訪問,建立cookie,回寫瀏覽器
             *     4.如果cookie!=null,不是第一次訪問
             *         * 如果不是第一次訪問,說明我的cookie中已經存在id
             *             * 判斷,當前的id是否已經存在cookie的中value
             *             * 如果存在,不用操作
             *             * 如果不存在,在後面追加(product=1,2)
             *     5.重定向到商品頁面
                
                
    * session(伺服器)
        * cookie基於客戶端,不安全,並且大小和個數的限制。
        * session域物件,範圍一次會話範圍,存個人相關的資料。
            * setAttribute(String name, Object value)
            * Object getAttribute(String name)  
            
            * String getId()  獲取seesion的唯一的ID
            * void invalidate()  銷燬的seesion
            
            
        * 完成簡單的購物車
            * 購物車    Map<String,Integer> cart    購物車,把購物車存入seesion中。
            
            * 獲取資料
            * 判斷是否是第一次訪問    session.getAttribute("cart");
              * 如果第一次訪問,cart    建立一個購物車,放入商品的名稱和數量

              * 如果不是第一次訪問,cart!=null
                判斷是否包含該商品?
                   * 如果包含,數量拿出來,++,放回去,存入seesion中
                    
                   * 如果不包含,正常放入到購物車中。存入seesion中
            

   

相關文章