JSP的學習(二)——EL和JSTL表示式
一、EL表示式
①基本概念
EL表示式: expression language表示式語言
EL(Expression Language) 是為了使JSP寫起來更加簡單。表示式語言的靈感來自於 ECMAScript 和 XPath 表示式語言,它提供了在 JSP 中簡化表示式的方法,讓Jsp的程式碼更加簡化。把JSP中出現的相關的JAVA程式碼簡化。
格式:${ EL表示式 } 等價於 findAttribute(name)
②EL獲取作用域中的值
Ⅰ普通值
例如:${name}
按照 page,request,session,application(ServletContext)的順序,查詢作用域,找 key是name的 value值 。也可以指定查詢的範圍
${pageScope.key}
${requestScope.key}
${sessionScope.key}
${applicationScope.key}
當不指定查詢的範圍的時候,預設作用域從小到大的順序查詢。
其與getAttribute的區別:語法不同,當key不存在的時候,getAttribute(key)返回null,${key}返回空字串""
Ⅱ
訪問物件的屬性
User user = new User(1,"zhangsan",20);
request.setAttribute("user", user);
${user.id}
${user.name}
${user.age}
user----> 儲存在request中時的key值
id,name ,age 物件的屬性名
要求: 屬性必須有get方法 EL表示式才能訪問到
Ⅲ訪問集合
<% List<String> list = new ArrayList<String>(); pageContext.setAttribute("list", list); %> ${empty list } 判斷list中是否有元素 陣列 List Map <% String[] ss = {"aaa","bbb","ccc"}; pageContext.setAttribute("ss", ss); List<String> list = new ArrayList<String>(); list.add("xxx"); list.add("yyy"); list.add("zzz"); request.setAttribute("list",list); List<User> list2 = new ArrayList<User>(); User u1 = new User(1,"aaa",20); User u2 = new User(2,"bbb",20); User u3 = new User(3,"ccc",20); list2.add(u1); list2.add(u2); list2.add(u3); request.setAttribute("list2",list2); Map<String,String> map = new HashMap<String,String>(); map.put("aaa-a", "111"); map.put("bbb", "222"); map.put("ccc", "333"); pageContext.setAttribute("map", map); %> ${pageScope.ss[1] }<br> ${requestScope.list[2] }<br> ${list2[0].name}<br> ${map.bbb } <br> ${map["aaa-a"] }
EL不能遍歷集合結構
二、JSTL表示式
JSTL:JavaServer Pages Standard Tag Library,JSP標準標籤庫是一個不斷完善的開放原始碼的JSP標籤庫,是由apache的jakarta小組來維護的。
JSTL支援通用的、結構化的任務,比如迭代,條件判斷,XML文件操作,國際化標籤,SQL標籤。 除了這些,它還提供了一個框架來使用整合JSTL的自定義標籤。
下載jakarta-taglibs-standard-1.1.2.zip 包並解壓,將jakarta-taglibs-standard-1.1.2/lib/下的兩個jar檔案:standard.jar和jstl.jar檔案拷貝到/WEB-INF/lib/下。(1.2版本,只需要jstl.jar即可)
根據JSTL標籤所提供的功能,可以將其分為5個類別:
ⅰc(core)核心標籤庫
ⅱfmt格式化(國際化)
ⅲ函式(JSTL提供的EL函式)
ⅳXML
ⅴSQL
①核心標籤
核心標籤是最常用的JSTL標籤。引用核心標籤庫的語法如下:
常用標籤:
通用標籤:
set、out、remove
條件標籤:
if、choose
迭代標籤
for
foreach遍歷
<h3>測試list集合遍歷獲取學生列表</h3>
<table border="1" width="80%" bordercolor="red" cellspacing="0"
align="center">
<tr>
<th>學號</th>
<th>姓名</th>
<th>成績</th>
<th>班級</th>
<th>是否是第一個</th>
<th>是否是最後一個</th>
<th>計數count</th>
<th>索引index</th>
</tr>
<!-- varStatus:變數狀態:遍歷出的每一項內容的狀態:
isFirst() first
isLast() last
getCount() count 計數
getIndex() index
-->
<!-- var :遍歷出的每一項使用變數先儲存
items:集合(使用El表示式)
-->
<c:forEach var="stu" items="${students}" varStatus="vs">
<tr>
<td>${stu.id}</td>
<td>${stu.name}</td>
<td>${stu.score}</td>
<td>${stu.classes}</td>
<td>${vs.first}</td>
<td>${vs.last}</td>
<td>${vs.count}</td>
<td>${vs.index}</td>
</tr>
</c:forEach>
</table>
②格式化標籤
JSTL格式化標籤用來格式化並輸出文字、日期、時間、數字。引用格式化標籤庫的語法如下:
常用標籤
<fmt:formatDate>標籤:格式化時間和日期
例如:
<fmt:formatDate value="${current}"/>
通過type格式指定具體的格式形式。
<fmt:formatDatevalue="${d}"type="date"/>只格式成日期
<fmt:formatDatevalue="${d}"type="time"/>只格式成時間
<fmt:formatDatevalue="${d}"type="both"/>格式成日期+時間
通過pattern屬性指定具體的格式要求
<fmt:formatDatevalue="${d}"pattern="yyyy-MM-dd"/>
③fn標籤庫
fn:contains(string, substring)
如果引數string中包含引數substring,返回true
fn:containsIgnoreCase(string, substring)
如果引數string中包含引數substring(忽略大小寫),返回true
fn:endsWith(string, suffix)
如果引數 string 以引數suffix結尾,返回true
fn:escapeXml(string)
將有特殊意義的XML (和HTML)轉換為對應的XML character entity code,並返回
fn:indexOf(string, substring)
返回引數substring在引數string中第一次出現的位置
fn:join(array, separator)
將一個給定的陣列array用給定的間隔符separator串在一起,組成一個新的字串並返回。
fn:length(item)
返回引數item中包含元素的數量。引數Item型別是陣列、collection或者String。如果是String型別,返回值是String中的字元數。
fn:replace(string, before, after)
返回一個String物件。用引數after字串替換引數string中所有出現引數before字串的地方,並返回替換後的結果
fn:split(string, separator)
返回一個數組,以引數separator 為分割符分割引數string,分割後的每一部分就是陣列的一個元素
fn:startsWith(string, prefix)
如果引數string以引數prefix開頭,返回true
fn:substring(string, begin, end)
返回引數string部分字串, 從引數begin開始到引數end位置,不包括end位置的字元
fn:substringAfter(string, substring)
返回引數substring在引數string中後面的那一部分字串
fn:substringBefore(string, substring)
返回引數substring在引數string中前面的那一部分字串
fn:toLowerCase(string)
將引數string所有的字元變為小寫,並將其返回
fn:toUpperCase(string)
將引數string所有的字元變為大寫,並將其返回
fn:trim(string)
去除引數string 首尾的空格,並將其返回