1. 程式人生 > 實用技巧 >JSP&EL表示式&JSTL標籤

JSP&EL表示式&JSTL標籤

JSP:入門學習

1. 概念:
	* Java Server Pages: java伺服器端頁面
		* 可以理解為:一個特殊的頁面,其中既可以指定定義html標籤,又可以定義java程式碼
		* 用於簡化書寫!!!

2. 原理
	* JSP本質上就是一個Servlet

3. JSP的指令碼:JSP定義Java程式碼的方式
	1. <%  程式碼 %>:定義的java程式碼,在service方法中。service方法中可以定義什麼,該指令碼中就可以定義什麼。
	2. <%! 程式碼 %>:定義的java程式碼,在jsp轉換後的java類的成員位置。
	3. <%= 程式碼 %>:定義的java程式碼,會輸出到頁面上。輸出語句中可以定義什麼,該指令碼中就可以定義什麼。

4. 指令
	* 作用:用於配置JSP頁面,匯入資原始檔
	* 格式:
		<%@ 指令名稱 屬性名1=屬性值1 屬性名2=屬性值2 ... %>
	* 分類:
		1. page		: 配置JSP頁面的
			* contentType:等同於response.setContentType()
				1. 設定響應體的mime型別以及字符集
				2. 設定當前jsp頁面的編碼(只能是高階的IDE才能生效,如果使用低階工具,則需要設定pageEncoding屬性設定當前頁面的字符集)
			* import:導包
			* errorPage:當前頁面發生異常後,會自動跳轉到指定的錯誤頁面
			* isErrorPage:標識當前也是是否是錯誤頁面。
				* true:是,可以使用內建物件exception
				* false:否。預設值。不可以使用內建物件exception


		2. include	: 頁面包含的。匯入頁面的資原始檔
			* <%@include file="top.jsp"%>
		3. taglib	: 匯入資源
			* <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
				* prefix:字首,自定義的
5. 註釋:
	1. html註釋:
		<!-- -->:只能註釋html程式碼片段
	2. jsp註釋:推薦使用
		<%-- --%>:可以註釋所有

6. JSP的內建物件:
	* 在jsp頁面中不需要獲取和建立,可以直接使用的物件
	* jsp一共有9個內建物件。
		* request
		* response
		* out:字元輸出流物件。可以將資料輸出到頁面上。和response.getWriter()類似
			* response.getWriter()和out.write()的區別:
				* 在tomcat伺服器真正給客戶端做出響應之前,會先找response緩衝區資料,再找out緩衝區資料。
				* response.getWriter()資料輸出永遠在out.write()之前
	* 在jsp頁面中不需要建立,直接使用的物件
	* 一共有9個:
		變數名					        真實型別					作用
		* pageContext				        PageContext				當前頁面共享資料,還可以獲取其他八個內建物件
		* request					HttpServletRequest			一次請求訪問的多個資源(轉發)
		* session					HttpSession				一次會話的多個請求間
		* application				        ServletContext				所有使用者間共享資料
		* response					HttpServletResponse			響應物件
		* page						Object					當前頁面(Servlet)的物件  this
		* out						JspWriter				輸出物件,資料輸出到頁面上
		* config					ServletConfig				Servlet的配置物件
		* exception					Throwable				異常物件

MVC:開發模式

1. jsp演變歷史
	1. 早期只有servlet,只能使用response輸出標籤資料,非常麻煩
	2. 後來又jsp,簡化了Servlet的開發,如果過度使用jsp,在jsp中即寫大量的java程式碼,有寫html表,造成難於維護,難於分工協作
	3. 再後來,java的web開發,借鑑mvc開發模式,使得程式的設計更加合理性

2. MVC:
	1. M:Model,模型。JavaBean
		* 完成具體的業務操作,如:查詢資料庫,封裝物件
	2. V:View,檢視。JSP
		* 展示資料
	3. C:Controller,控制器。Servlet
		* 獲取使用者的輸入
		* 呼叫模型
		* 將資料交給檢視進行展示
	* 優缺點:
		1. 優點:
			1. 耦合性低,方便維護,可以利於分工協作
			2. 重用性高
		2. 缺點:
			1. 使得專案架構變得複雜,對開發人員要求高

EL表示式

1. 概念:Expression Language 表示式語言
2. 作用:替換和簡化jsp頁面中java程式碼的編寫
3. 語法:${表示式}
4. 注意:
	* jsp預設支援el表示式的。如果要忽略el表示式
		1. 設定jsp中page指令中:isELIgnored="true" 忽略當前jsp頁面中所有的el表示式
		2. \${表示式} :忽略當前這個el表示式
5. 使用:
	1. 運算:
		* 運算子:
			1. 算數運算子: + - * /(div) %(mod)
			2. 比較運算子: > < >= <= == !=
			3. 邏輯運算子: &&(and) ||(or) !(not)
			4. 空運算子: empty
				* 功能:用於判斷字串、集合、陣列物件是否為null或者長度是否為0
				* ${empty list}:判斷字串、集合、陣列物件是否為null或者長度為0
				* ${not empty str}:表示判斷字串、集合、陣列物件是否不為null 並且 長度>0
	2. 獲取值
		1. el表示式只能從域物件中獲取值
		2. 語法:
			1. ${域名稱.鍵名}:從指定域中獲取指定鍵的值
				* 域名稱:
					1. pageScope		--> pageContext
					2. requestScope 	--> request
					3. sessionScope 	--> session
					4. applicationScope --> application(ServletContext)
				* 舉例:在request域中儲存了name=張三
				* 獲取:${requestScope.name}

			2. ${鍵名}:表示依次從最小的域中查詢是否有該鍵對應的值,直到找到為止。

			3. 獲取物件、List集合、Map集合的值
				1. 物件:${域名稱.鍵名.屬性名}
					* 本質上會去呼叫物件的getter方法

				2. List集合:${域名稱.鍵名[索引]}

				3. Map集合:
					* ${域名稱.鍵名.key名稱}
					* ${域名稱.鍵名["key名稱"]}

	3. 隱式物件:
		* el表示式中有11個隱式物件
		* pageContext:
			* 獲取jsp其他八個內建物件
				* ${pageContext.request.contextPath}:動態獲取虛擬目錄

JSTL

1. 概念:JavaServer Pages Tag Library  JSP標準標籤庫
	* 是由Apache組織提供的開源的免費的jsp標籤		<標籤>

2. 作用:用於簡化和替換jsp頁面上的java程式碼		

3. 使用步驟:
	1. 匯入jstl相關jar包
	2. 引入標籤庫:taglib指令:  <%@ taglib %>
	3. 使用標籤

4. 常用的JSTL標籤
	1. if:相當於java程式碼的if語句
		1. 屬性:
            * test 必須屬性,接受boolean表示式
                * 如果表示式為true,則顯示if標籤體內容,如果為false,則不顯示標籤體內容
                * 一般情況下,test屬性值會結合el表示式一起使用
   		 2. 注意:
       		 * c:if標籤沒有else情況,想要else情況,則可以在定義一個c:if標籤
	2. choose:相當於java程式碼的switch語句
		1. 使用choose標籤宣告         			相當於switch宣告
        2. 使用when標籤做判斷         			相當於case
        3. 使用otherwise標籤做其他情況的宣告    	相當於default

	3. foreach:相當於java程式碼的for語句

5. 練習:
	* 需求:在request域中有一個存有User物件的List集合。需要使用jstl+el將list集合資料展示到jsp頁面的表格table中

三層架構:軟體設計架構

1. 介面層(表示層):使用者看的得介面。使用者可以通過介面上的元件和伺服器進行互動
2. 業務邏輯層:處理業務邏輯的。
3. 資料訪問層:操作資料儲存檔案