2015/1/21 ## 回顧昨天案例 ## # 模擬購物車; >> 基本步驟; |-- 顯示所有的書籍; |-- 制作書記列表/模仿數據庫; |-- 參見昨天示例; |-- 制作查看詳情鏈接; |-- 參見昨天示例; |-- 顯示購物車中的所有商品; |-- request.getSession(); --- 得到session對象; |-- 假定購物車的名字 "cart"; |-- 用集合制作購物車; |-- 可以用泛型限定購買的商品類型; |-- 遍歷; |-- 先判斷!null; |-- 輸出購物車中商品的名字; |-- 制作購買鏈接; |-- request.getSession(); --- 得到session對象; |-- 獲取購物車; |-- 判斷,如果是第一次進入,將購物車綁定到session上; |-- 將商品添加到購物車; |-- 提供返回鏈接; # Cookie和Session的關系; >> 當本地Cookie被禁用之后,Session將失效; |-- 解決方案 |-- 重寫URL; |-- response.encodeURL(String str); |-- 注意,該方法需要重寫所有URL; |-- 原理:將jsessionID帶到超鏈接里; # Session的生命周期; >> 新建; |-- 第一次創建; >> 運行; |-- > 鈍化 --- 序列化到磁盤上; 活化 < --- 從磁盤上反序列化到內存中; >> 銷毀; ## JSP和EL表達式 ## # 基本概念; >> Java Server Page |-- 一個可以嵌入java代碼和HTML代碼的界面; >> 基本運行流程; |-- 當客戶端第一次訪問jsp的時候,服務器會將其中的java抽出編譯成為servlet; |-- 然后分離出HTML代碼,顯示在瀏覽器上; |-- 最后會將編譯完成的class文件返回給客戶端; # 基本語法; >> JSP表達式; |-- <%= %> 聲明一個表達式,其中不能有分號,因為是用於輸出, 內部語句被out.println();包裹; |-- <% %> 聲明一個片段,其中主要存放Java代碼; |-- Java代碼片段中支持Java注釋; |-- <!-- --> 聲明一個注釋,會被發送給客戶端, 其中如果嵌套<% %>表達式的話,內部的代碼會被執行; 但執行完畢的結果依然會被作為HTML的注釋發送到客戶端; |-- <%-- --%> jsp注釋;內部代碼在編譯時會被忽略; |-- <%! %> 聲明一個變量或方法;內部代碼會被放到service方法外部; # JSP指令; >> taglib指令 |-- 導入一個外部的標簽庫; >> <%@include file="地址" %> --- 靜態包含; |-- 包含一個外部界面; 該指令將被包含的界面中的源碼全部獲取; 和發起包含的文件一起編譯; |-- 動態包含;<jsp:include page="地址"></include> |-- 包含的兩個文件會分別編譯; >> <%@ page language="java " import="java.util.*" pageEncoding="UTF-8"%> |-- import --- 導入需要使用的包; |-- pageEncoding --- 告知瀏覽器界面使用哪種編碼進行顯示; |-- contentType --- 告知瀏覽器界面使用哪種編碼進行顯示; |-- language --- 聲明界面包含的語言,可以不寫; |-- errorPage --- 可以在源碼中生成一個Exception對象; >> jsp標簽 |-- <jsp:forward page="add"></jsp:forward> 實現轉發; |-- <jsp:param value="20" name="xxx" /> 轉發中實現攜帶參數; |-- 該標簽無法解決中文參數傳遞的問題; # JSP九大內置對象; >> 基本概念; |-- 由JSP本身定義好的一些對象,這些對象不需要聲明可以直接使用; >> 九個內置對象; |-- request > 四大作用域中的一個; > 作用於每次請求; |-- response |-- pageContext > 四大作用域中的一個; > 作用於當前頁面; > 可以通過它操作其他三個域對象; > 可以通過它獲取其他八個內置對象; > 可以依次從四個域范圍中找值; > 實現轉發和包含功能; |-- session > 四大作用域中的一個; > 作用於每次會話; |-- exception |-- application |-- ServletContext > 四大作用域中的一個; > 作用於整個servlet; |-- config |-- out > 在輸出是默認輸出到頁面緩沖區中(默認8KB); > 可以將buffer關閉,讓數據直接輸出到界面; > 也可以寫出后直接采用flush();將數據刷到response緩存中; |-- page # JavaBean >> 基本概念; |-- 簡單java類 |-- 有一定的規范 |-- 用於封裝數據; >> 開發模型; |-- JSP+JavaBean; |-- MVC M: javabean; V: jsp+html C: servlet; ## EL表達式 ## # 基本概念; >> 替代Java代碼; >> 進行算術計算; >> 從域中搜索值; # 基本格式; >> ${放在域范圍中的變量} |-- 內部實現原理; |-- pageContext.findAttribute("值"); >> 只能寫在JSP界面上面; >> 在指定的域中搜索; |-- ${requestScope.name} |-- ${sessionScope.name} |-- ${applicationScope.name} |-- ${pageScope.name} (默認范圍,可以不寫) >> 兩種運算符; |-- 【.】 > .后跟取值名稱; > 注意 --- EL不支持.調用方法; |-- 【[]】 > 取值需要加上""/'' ; > 當對數組進行取值時,可以加也可以不加; > 對於數組只能使用[]操作; >> 獲取集合; |-- 使用[]獲取對應角標元素; |-- 獲取Map集合; |-- map集合可以用. 后跟字符串獲取元素; |-- 可以用[]跟上""/''獲取元素; >> EL的三元運算符; |-- ${表達式?值1:值2} |-- ${seesionScope.loginedUser==null ?"未登錄":"歡迎"} |-- EL表達式不支持字符串相關運算,即連接符等用法; # EL的11個內置隱式對象; >> 總結如下; 1.requestScope 2.sessionScope 3.applicationScope 4.pageScope //--------------通過以上4個內置對象可以對4大域進行訪問 //--------------下面的內置對象用處不大, 5.param 6.paramValues 這兩個對象封裝了表單參數 7.header 8.headerValues 這兩個對象封裝了HTTP請求頭 9.initParam 封裝了web.xml中 配置 10.pageContex 封裝了 9大內置對象中的 pageContext 11.cookie 封裝了cookie信息 # EL函數 >> 基本概念; |-- 簡化頁面中靜態方法的調用,使用EL函數代替JAVA代碼. >> 使用步驟; |-- 在外部定義Java工具類; |-- 配置tld文件; |-- 從tomcat的配置中尋找然后替換相關標簽內容; |-- <uri> |-- <function> |-- 在JSP中引入tld文件; |-- 然后就可以在JSP中調用EL自定義函數; >> 實際使用; |-- SUN已經定義了足夠的函數; |-- 基本不需要自己定義新的函數;