EL表達式和JSTL
- 第七章 EL表達式和JSTL
-
- 7.1 初識JavaBean
-
- 概述
- BeanUtils工具
- 7.2 EL表達式
-
- EL中辨別符正斜杠
- EL中的關鍵字
- EL中的變量
- 常量
- EL中的運算符
- 比較運算符
- 邏輯運算符
- empty運算符
- 條件運算符
- “()”運算符
- 優先級
- EL隐式對象
- 7.3 JSTL
-
- 什麼是JSTL
- Core标簽庫
第七章 EL表達式和JSTL
資料和功能重複使用,便于移植,Sun公司提出“JavaBean技術”,使用JavaBean技術可以對這些資料和功能進行封裝,做到一次編寫,到處運作。
為了降低JSP頁面的複雜度,增強代碼重用性,Sun公司制定了一套标準标簽庫JSTL,同時為了擷取Servlet域對象中存儲的資料,JSP2.0規範裡提供EL表達式。
7.1 初識JavaBean
概述
重複使用的軟體元件,本質上就是Java類。
- 必須具有一個 公共的無參構造方法。
- 提供公共的get set方法
BeanUtils工具
方法聲明 | 功能描述 |
---|---|
static void populate(Object bean,Map<String,?extends Object> properties) | 根據指定的名稱/值為相應的JavaBean屬性設定值 |
static void setProperty(Object bean,String name,Object value) | 根據指定的屬性值,傳入的類型要求能轉換成相應的屬性的類型 |
static String getProperty(Object bean,String name) | 傳回指定bean指定屬性的值,傳回值為String類型 |
7.2 EL表達式
為了擷取Servlet域對象中存儲的資料,代碼更簡潔友善
EL中辨別符正斜杠
使用符号标記一些名稱,如變量名、自定義函數名等,這些符号被稱為辨別符。EL辨別符由任意大小寫字母、數字和下劃線組成。
- 不能那個以數字開頭
- 不能是EL中的關鍵字
- 不能是隐式對象
- 不能包含單引号(’)、(")、(-)和 (/)等特殊字元。
EL中的關鍵字
and eq gt true instanceof or ne le false empty not lt ge null div mod
EL中的變量
${product}
常量
EL中的常量又稱為字面量,它是不能改變的資料。
-
布爾常量
true or false
-
整型常量
取值範圍是Java語言定義的常量Long.MIN_VALUE 到 Long.MAX_VALUE 之間
- 浮點數常量 雙精度
-
字元串常量
本身包含的單引号雙引号反斜杠需要進行轉義, 前面再加個反斜杠()
-
Null常量
Null常量用于表示變量引用的對象為空,隻有一個值null
EL中的運算符
點運算符(.) 方括号運算符( [] ) 算術運算符( + - * /或div %或mod )
比較運算符
==(eq) !=(ne) <(it) >(gt) <=(le) >=(ge)
避免與JSP頁面的标簽産生沖突,後面四重通常用括号内的。
邏輯運算符
&&(and) ||(or) !(not)
empty運算符
判斷某個對象是否為null或者" "
${empty var}
變量不存在,變量值為null, 變量為集合且不包含任何元素
條件運算符
${A?B:C}
“()”運算符
優先級
優先級 | 運算符 |
---|---|
1 | [] |
2 | () |
3 | - not ! empty |
4 | * / div % mod |
5 | + - |
6 | < > <= >= lt gt le ge |
7 | == != eq ne |
8 | && and |
9 | or 短路或 |
10 | ? : |
注意: EL表達式取值,沒有數組的下标越界,沒有空指針異常,沒有字元串的拼接。
EL隐式對象
隐含對象名稱 | 描述 |
---|---|
pageContext | 對應于JSP頁面中的pageContext對象 ,可以擷取jsp其他八個隐式對象 |
pageScope | 代表page域中用于儲存屬性的Map對象 |
requestScope | 代表request域中用于儲存屬性的Map對象 |
sessionScope | 代表session域中用于儲存屬性的Map對象 |
applicationScpope | 代表application域中用于儲存屬性的Map對象 |
param | 儲存所有請求參數的Map對象 |
paramValues | 儲存所有請求參數的Map對象,對于某個請求參數,傳回的是一個String類型數組 |
header | 儲存了所有HTTP請求頭字段的Map對象 |
headerValues | 儲存所有HTTP請求頭字段的Map對象,傳回String類型數組 |
cookie | 用來取得使用者的cookie,cookie類型是Map |
initParam | 儲存了所有Web應用的初始化參數的Map對象 |
7.3 JSTL
降低JSP頁面的複雜度,增強代碼重用性。Sun公司定制了一套标準标簽庫,簡稱JSTL。
什麼是JSTL
JSTL雖然被稱為标準标簽庫,實際上這個标簽庫由5個不同的标簽庫共同組成
标簽庫 | 标簽庫的URI | 建議使用字首 |
---|---|---|
Core | http://java.sun.com/jsp/jstl/core | c |
l18n | http://java.sun.com/jsp/jstl/fmt | fmt |
SQL | http://java.sun.com/jsp/jstl/sql | sql |
XML | http://java.sun.com/jsp/jstl/xml | x |
Functions | http://java.sun.com/jsp/jstl/functions | fn |
-
Core
核心标簽庫 實作Web應用通用操作的标簽 。例如 <c:out> <c:if> <c:forEach>
-
l18n
國際化或格式化标簽,包含實作Web應用中國際化标簽和格式化标簽。例如,JSP頁面的本地資訊,設定JSP頁面的時區,使日期按照本地格式顯示等。
-
SQL标簽庫
包含用于通路資料庫和對資料庫中的資料進行操作的标簽。資料庫中獲得資料庫連接配接,從資料庫表中檢索資料等。一般不用
-
XML
一個操作文檔的标簽庫,包含對XML文檔中資料進行操作的标簽。解析XML檔案,輸出XML文檔中的内容,疊代處理XML文檔中的元素。處理XML文檔很友善
-
Functions
函數标簽庫,提供一套自定義EL函數,包含了JSP網頁制作者經常用到的字元串操作。
<%@ taglib uri=" xxx " prefix="x" %>
//使用taglib指令導入Core标簽庫
Core标簽庫
- <c:out>
<c:out value="value" [default="defaultValue"] // 預設值
[escapeXml="true|false"]/>//特殊字元是否HTML轉碼
- <c:if>
<c:if text="textCondition" var="result" //條件 變量
[scope="{page | request | session | application }"] > //變量範圍
标簽體 //條件為真執行标簽體
</c:if>
-
<c:choose>
有點類似switch,與<c:when> <c:otherwise>
<c:choose>
<c:when test="${xxx}">
xxx
</c:when>
<c:otherwise>
xxx
</c:otherwise>
</c:choose>
-
<c:forEach>
對集合對象進行循環疊代操作,Set List Map 數組 等
//文法1: 疊代包含多個對象的集合
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"]
[begin="begin"] - [end="end"] - [step="step"]
body content
</c:forEach>
//文法2: 疊代指定範圍的集合
<c:forEach [var="varName"] - [varStatus="varStatusName"] begin="begin"
end="end" [step="step"]>
body content
</c:forEach>
- var目前疊代元素儲存到page域中的名稱
- items 用于指定要疊代的集合
- varStatus 指定目前疊代狀态資訊的對象儲存到page域中的名稱
- begin從第幾個元素開始疊代 索引從0開始 沒有指定items 從begin指定值開始疊代
- step疊代步長 疊代因子的增量
varStatus内屬性
- count:集合内序号 1開始
- index: 索引 0開始
- first 是否為集合中第一個元素
- last 是否為集合中最後一個元素
-
<c:param> 和<c:url>
前者擷取參數,後者用于重新構造URL
<c:param>一般嵌套在<c:url>中,在URL位址中附加參數
- value,指定構造的URL
- context 指定導入同一伺服器下其他Web應用的名稱
- var 屬性 指定構造的URL儲存到域中的屬性名稱
- scope屬性 指定儲存到域對象