1. 程式人生 > >JavaWeb 之 JSP簡介及Cookie Session

JavaWeb 之 JSP簡介及Cookie Session

## JSP的簡介 EL的表示式 ##

**JSP的簡介**          1.先學習Servlet技術,為什麼還要學習JSP的技術呢?         * 缺點:讓你使用Servlet的技術動態生成的網頁?response.getWriter("<form action='' >")             * 開發人員忙死了             * 美工不好給你加樣式     2.HTML的技術         * 做網頁非常的強大。靜態的資源。     3.推出JSP的語言(ASP  PHP)         * 在JSP語言編寫HTML的程式碼。              4.JSP的簡介         * JSP(java server pages)    和Servlet一樣,執行在伺服器端。              5.JSP的組成         * HTML的程式碼 + java程式碼 + JSP自己的東西      **JSP的指令碼元素**         1.<%! java程式碼  %>    (不常用)作為類的成員變數。     2.<%= java程式碼  %>     輸出的語句     3.<%  java程式碼  %>     編寫變數和語句(區域性的變數和語句出現)

**JSP的原理(理解)**     1.建立一個JSP的檔案,在檔案編寫一個程式碼(HTML+JAVA程式碼)     2.JSP的原理:JSP -- 翻譯成.java檔案(Servlet程式) -- 編譯.class檔案 -- 執行。         * JSP翻譯成.java的檔案 -- tomcat/work目錄下

    3.在JSP編寫的內容,後臺幫咱們翻譯成一個.java的檔案,使用out物件把所有的東西輸出客戶端上。

     **JSP開發中佔用的角色**          1.看圖      ## cookie和session 會話技術(重要) ##              1.會話:概念:先開啟一個瀏覽器,瀏覽器的網頁(資源,包含多次請求和響應),關閉整個瀏覽器,這個過程稱為一次會話。     2.作用:通過cookie和session技術來儲存使用者相關的一些資料。           **cookie的技術**

**理解cookie原理(理解)**          1.cookie的原理:Cookie是客戶端技術,程式把每個使用者的資料以cookie的形式寫給使用者各自的瀏覽器。當用戶使用瀏覽器再去訪問伺服器中的web資源時,就會帶著各自的資料去。這樣,web資源處理的就是使用者各自的資料了。          2.看圖           **cookie物件的api**          1.Cookie(String name, String value)         cookie的構造方法:         2.String getName()                             獲取cookie的名稱     3.String getValue()                         獲取cookie的值     4.void setValue(String newValue)              設定cookie的值           5.void addCookie(Cookie cookie)              在伺服器端把cookie儲存到客戶端     6.Cookie[] getCookies()                     從客戶端獲取cookie的陣列      **顯示使用者上次訪問的時間(和Cookie的原理)**     /**      * 1.先判斷是否是第一次訪問?因為:第一次訪問和第n次處理的業務是不同的。      * 2.如果是第一次訪問:先輸出一句歡迎,記錄當前的時間,儲存到cookie中,回寫到瀏覽器端。      * 3.如果不是第一次訪問,獲取cookie中的值(就是你上次的訪問的時間),把時間輸出到頁面上。記錄當前的時間,儲存到cookie中。回寫到瀏覽器端。      */

    * 程式碼

**cookie的api(另外)**

    * 演示的效果:直接關閉瀏覽器,cookie沒有了,再訪問是最新的。     * 預設的cookie:預設儲存瀏覽器端。     * 持久的cookie:通過setMaxAge()方法,把cookie儲存到本地的磁碟上。          * 注意:需求:假如編寫儲存使用者名稱的程式碼,預設儲存7天。到第5天,不想儲存了,清除cookie。     * 刪除儲存本地磁碟上的cookie。setMaxAge(0); 但是前提條件:如果在之前的程式碼中設定有效路徑的話,你在設定setMaxAge(0)之前必須先設定有效路徑一次。          1.void setMaxAge(int expiry)                 設定cookie的有效時間(單位是秒)      2.void setPath(String uri)                  設定cookie的有效路徑         * 有效路徑:訪問WEB其他資源的時候是否攜帶cookie內容。         * 不設定有效路徑:說明我程式預設的有效路徑。    /day11              * 由誰決定:LastTimeServlet訪問路徑是http://localhost/day11/lasttime         * 訪問WEB資源下的jsp/demo1.jsp的時候:http://localhost/day11/jsp/demo1.jsp。攜帶了cookie的內容。         * 總結:只要是訪問/day11下面的其他資源,預設攜帶cookie的內容。                  * 把LastTimeServlet的訪問路徑修改了 <url-pattern>/servlet/lasttime</url-pattern>         * 預設的有效路徑已經改變了 /day11/servlet         * 訪問WEB資源下的jsp/demo1.jsp的時候:http://localhost/day11/jsp/demo1.jsp。不攜帶了cookie的內容。                  * 不想讓它有預設的有效路徑,通過setPath來進行設定              3.void setDomain(String pattern)              設定cookie的有效域名         * 設定域名    cookie.setDomain(".sina.com.cn");         * 訪問域名其他的內容是否攜帶cooikie             * www.sina.com.cn             * sports.sina.com.cn             * xxxx.sina.com.cn      **商品的瀏覽記錄**          /**      * 0.獲取傳過來id值      * 1.判斷是否是第一次訪問?(獲取指定名稱的cookie如果為null,說明是第一次訪問)      *         * 如果是第一次訪問,把商品的id儲存到cookie中,回寫cookie。      *         * 如果不是第一次訪問      *             * 先獲取cookie中的內容,進行判斷(判斷cookie中是否包含當前點選的商品)      *                 * 如果cookie中已經包含了該商品,那麼就不用處理了      *                 * 如果不包含,在cookie中追加該商品    product=1    product=1,2      * 2.重定向商品的列表頁面      * 3.需要在商品的列表頁面中獲取cookie的中內容,把內容顯示到頁面上。      */

**seesion的原理**

    * 看圖。

**session物件的api**

    * 獲取session物件    HttpSession request.getSession() 第一次執行,在伺服器的內部建立一個獨享的session。如果是第二次執行,要是有鑰匙的情況,不會建立新的session。            * ServletContext:代表整個WEB應用。     * session又是一個域物件。一次會話的範圍。(在一次會話的過程中,可以有多次請求和響應,只要是瀏覽器不關閉,一直有效)     * request域物件,一次請求。          * Object getAttribute(String name)                     獲取域物件的屬性值      * void setAttribute(String name, Object value)      設定域物件中的屬性值      * void removeAttribute(String name)                  刪除域物件中的屬性值          * String getId()                                     獲取session   id的值     * void invalidate()                                 手動的銷燬(使用者退出)            **簡單的購物車**          * 購物車(商品的名稱和數量) 物件  就使用Map<String,Integer> cart 當前購物車了。有多次請求和響應,cart一直有,把cart存入到session中。     

**session的追蹤(瞭解)**

    * session的追蹤的技術。禁用了瀏覽器的cookie中。通過session回寫的cookie的鑰匙沒有了。     * 伺服器內部的session還是有的。如果你要是給我一把鑰匙。          * 可以使用一些方法,在請求的後面拼接jsessionid 證明:session在伺服器磁碟上,沒有被銷燬。     

**session域物件**          * 域物件:用來傳遞資料。          * ServletContext:代表整個WEB應用。     * session又是一個域物件。一次會話的範圍。(在一次會話的過程中,可以有多次請求和響應,只要是瀏覽器不關閉,一直有效)     * request域物件,一次請求。      **session的建立和銷燬**          * session什麼時候建立呢?第一次訪問的時候,呼叫request.getSession(),因為沒有session的id。          * session的銷燬         * 非正常原因關閉伺服器         * session預設銷燬時間 30分鐘    在tomcat/conf/web.xml 有一段配置             <session-config>                 <session-timeout>30</session-timeout>                </session-config>         * void invalidate()     手動的銷燬session(使用者推出)