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(使用者推出)