EL表達式、JSTL標簽庫
一、EL(Expression Language)表達式
語法結構:${var}
若要停用對EL表達式的評估的話,需要使用page指令將isELIgnored屬性值設為true:
<%@ page isELIgnored ="true|false" %> 這樣,EL表達式就會被忽略。若設為false,則容器將會計算EL表達式。
EL表達式的應用:
- 獲取數據:用於替換Jsp中的腳本表達式,從web域中檢索java對象、獲取數據。
- 執行運算:執行一些基本的邏輯運算、關系運算、算術運算。
- 獲取Web開發常用對象:利用EL定義的隱式對象,可以獲得對web常用對象的引用,從而獲取這些對象中的的數據。
- 調用java方法:EL允許自定義EL函數,可以通過EL表達式調用java類的方法。
1 <h3>EL表達式中使用二元表達式</h3> 2 <% 3 session.setAttribute("user",new User("孤傲蒼狼")); 4 %> 5 ${user==null? "對不起,您沒有登陸 " : user.username} 6 7 8 <% 9 List<String> emptyList = null; 10 %> 11<%--使用empty運算符檢查對象是否為null(空) --%> 12 <c:if test="${empty(emptyList)}"> 13 對不起,沒有您想看的數據 14 </c:if>
EL表達式語言中定義了11個隱含對象,他們都是java.util.Map類型,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,並讀取這些對象的數據
1 <br/>---------------1、pageContext對象:獲取JSP頁面中的pageContext對象------------------------<br/> 2${pageContext} 3 <br/>---------------2、pageScope對象:從page域(pageScope)中查找數據------------------------<br/> 4 <% 5 pageContext.setAttribute("name","張三"); //map 6 %> 7 ${pageScope.name} 8 <br/>---------------3、requestScope對象:從request域(requestScope)中獲取數據------------------------<br/> 9 <% 10 request.setAttribute("name","李四"); //map 11 %> 12 ${requestScope.name} 13 <br/>---------------4、sessionScope對象:從session域(sessionScope)中獲取數據------------------------<br/> 14 <% 15 session.setAttribute("user","xdp"); //map 16 %> 17 ${sessionScope.user}
EL表達式語言可以訪問EL函數。EL函數實際上與Java類的方法對應,這個Java類必須定義為public類型,並且作為函數的方法必須聲明為public static類型。當Java類定義好以後,應該在標簽描述符(TLD)文件中,把Java類的方法映射為函數。
EL Function:
一般來說, EL自定義函數開發與應用包括以下三個步驟:
1、編寫一個Java類的靜態方法。
2、編寫標簽庫描述符(tld)文件,在tld文件中描述自定義函數。
3、在JSP頁面中導入和使用自定義函數。
詳情參考:(1)http://www.cnblogs.com/xdp-gacl/p/3938361.html(1.5EL Function開發步驟)
(2)http://blog.csdn.net/goskalrie/article/details/51315397(自定義和使用EL函數)
二、JSTL(JavaServer Pages Standard Tag Library,JSP標準標簽庫)
JSTL是apache對EL表達式的擴展(也就是說JSTL依賴EL),JSTL是標簽語言。JSTL標簽使用以來非常方便,它與JSP動作標簽一樣,只不過它不是JSP內置的標簽,需要我們自己導包,以及指定標簽庫。
1、JSTL標簽庫包含四類:
- core:核心標簽庫,學習重點
- fmt:格式化標簽庫,只學習兩個
- sql:數據庫標簽庫,已過時,不學習
- xml:xml標簽庫,已過時,不學習
2、使用taglib指令導入標簽庫
除了JSP動作標簽外,使用其他第三方的標簽庫都需要:(1)導包;(2)在使用標簽的JSP頁面中使用taglib指令導入標簽庫。
導入JSTL的core標簽庫:<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>
- prefix="c":指定標簽庫的前綴,這個前綴可以隨便給值,但大家都會在使用core標簽庫時指定前綴為c;
- uri="http://java.sun.com/jstl/core":指定標簽庫的uri,它不一定是真實存在的網址,但它可以讓JSP找到標簽庫的描述文件;
3、核心標簽庫(core)
JSTL的核心標簽庫標簽共13個,分為4類:
1.表達式控制標簽:out、set、remove、catch
2.流程控制標簽:if、choose、when、otherwise
3.循環標簽:forEach、forTokens
4.URL操作標簽:import、url、redirect
(1)<c:out>標簽主要是用來輸出數據對象(字符串、表達式)的內容或結果。JSTL的使用是和EL表達式分不開的,<c:out>有特定的結果處理功能,EL的單獨使用會降低程序的易讀性,建議把EL的結果輸入放入<c:out>標簽中。
(2)<c:set>標簽用於把某一個對象存在指定的域範圍內,或者將某一個對象存儲到Map或者JavaBean對象中。
<c:set value="趙五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>
<li>從Bean中獲取對象person的name值:<c:out value="${person.name}"></c:out></li>
<li>從Bean中獲取對象person的age值:<c:out value="${person.age}"></c:out></li>
(3)<c:remove>標簽主要用來從指定的JSP範圍內移除指定的變量。
(4)<c:catch>標簽用於捕獲嵌套在標簽體中的內容拋出的異常。
(5)<c:if>標簽和程序中的if語句作用相同,用來實現條件控制。
<%--使用if標簽進行判斷並把檢驗後的結果賦給adminchock,存儲在默認的page範圍中。 --%> <c:if test="${param.uname==‘admin‘}" var="adminchock">
(6)<c:choose>、<c:when>和<c:otherwise>這3個標簽通常情況下是一起使用的,<c:choose>標簽作為<c:when>和<c:otherwise>標簽的父標簽來使用。 使用<c:choose>,<c:when>和<c:otherwise>三個標簽,可以構造類似 “if-else if-else” 的復雜條件判斷結構。
(7)<c:forEach>標簽該根據循環條件遍歷集合(Collection)中的元素。
(8)<c:import>該標簽可以把其他靜態或動態文件包含到本JSP頁面,與<jsp:include>的區別為:<jsp:include>只能包含同一個web應用中的文件。而<c:import>可以包含其他web應用中的文件,甚至是網絡上的資源。
(9)<c:url>標簽用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。
(10)<c:redirect>該標簽用來實現請求的重定向。同時可以配合使用<c:param>標簽在url中加入指定的參數。
4、fmt標簽庫
fmt標簽庫是用來格式化輸出的,通常需要格式化的有時間和數字:
(1)格式化日期
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %> ...... <% Date date = new Date(); pageContext.setAttribute("d", date); %> <fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>
(2)格式化數字
<% double d1 = 3.5; double d2 = 4.4; pageContext.setAttribute("d1", d1); pageContext.setAttribute("d2", d2); %> <fmt:formatNumber value="${d1 }" pattern="0.00"/><br/> <fmt:formatNumber value="${d2 }" pattern="#.##"/>
5、自定義JSTL標簽
詳見:http://blog.csdn.net/qq_25827845/article/details/53311722(自定義標簽)
以上均為簡單學習的過程。
參考資料:
EL:
(1)http://www.runoob.com/jsp/jsp-expression-language.html
(2)http://blog.csdn.net/goskalrie/article/details/51315397
(3)http://www.cnblogs.com/xdp-gacl/p/3938361.html
(4)http://blog.csdn.net/qwerasdf123/article/details/4189889
JSTL:
(5)http://www.runoob.com/jsp/jsp-jstl.html
(6)http://blog.csdn.net/qq_25827845/article/details/53311722
(7)http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html
(8)http://www.cnblogs.com/xdp-gacl/p/3943390.html
EL表達式、JSTL標簽庫