1. 程式人生 > >session和el表達式

session和el表達式

實現原理 內容 fig 足夠 jsession 用法 port el表達式 數據

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指令
		|-- 導入一個外部的標簽庫;

	>> <[email protected]
/* */ 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已經定義了足夠的函數; |-- 基本不需要自己定義新的函數;

session和el表達式