JAVA Web基礎6-EL表達式與JSTL標簽庫


一.EL表達式語言
1.EL表達式全稱expression language,用於在JSP頁面獲取其內置對象的內容
語法:${...}
在jsp中page指令有一個屬性是isELIgnored, 用來標記此頁面是否忽略EL表達式, 默認為false,即不忽略
2.用法說明
常規寫法舉例:<%= request.getAttribute("test")>
EL表達式寫法:${test}//當作用域屬性名都是唯一時可以這么寫
            ${requestScope.test}//表示獲取請求作用域中屬性名為test的值
            ${requsetScope["test"]}
.與[]的寫法多數情況下可以通用,但下列幾種情況只能用[]的寫法:
當表達式中有特殊字符如test_name則只能用[]的寫法;
當需要獲取動態屬性時則只能用[]的寫法,即[]中可以寫變量名;
[]也可以用來表示數組或者集合中的索引值,如arr的值為{a,b,c},可以通過${arr[0]}的方式獲取a;
3.EL變量
${test}
當前面不指定哪個作用域下面的值的時候, 會默認按照下面的順序去找, 如果都找不到, 就輸出一個空字符串
pageScope --> requestScope --> sessionScope --> applicationScope
4.EL中可以對獲取的值自動進行類型轉換
如獲取的test1和test2中的值為字符串型數值,可以直接進行運算:${test1 + test2}
5.獲取請求參數
獲取請求參數可通過表單或超鏈接方式獲取
常規寫法:<%= request.getParameter("name")>
EL表達式寫法:${param.name}
6.EL運算符
算術運算符: +   -   *   /或div   %或mod    例:${5 div 3 } 或${5 / 3 }
關系運算符: ==或eq(equals)   !=或ne(not equals)   <或lt(less than)   >或gt(great then)   <=或le(less equals)   >=或ge(great equals)
邏輯運算符: &&或and   ||或or   !或not
驗證運算符: empty(empty 對於 null和"" 的判斷都是返回true)
例:使用驗證運算符實現當變量test的值為空時,輸出"test為空",否則輸出test值
${empty test?"test為空":test}
二.JSTL標簽庫應用
JSTL全稱JSP Standard Tag Library(標准標簽庫),由五個功能不同的標簽庫組成,分別是核心標簽庫、格式標簽庫、SQL標簽庫、XML標簽庫、函數標簽庫。

標簽庫的使用需要引入兩個jar包:jstl.jar和standard.jar包,將其放置在WEB-INF的lib文件夾下。
使用這些標簽庫必須在JSP頁面頂部使用<%@ taglib %>指令定義引用的標簽庫和訪問前綴;由於實際項目開發中一般只應用核心標簽庫,所以這里主要學習核心標簽庫的內容。
核心標簽庫的指令格式為:<%@ taglib uri="http ://java.sun.com/jsp/jstl/core" prefix="c" %> 這里將前綴定義為c是約定俗稱的。
核心標簽庫里主要包括表達式標簽、流程控制標簽、循環標簽。
1.表達式標簽
<c: out /> 或<c: out></c:out>;輸出標簽
格式:
<c: out value="" default="" escapeXml="ture/false"/>
相當於<%= 表達式%>,分為有標簽體和沒有標簽體,功能一樣;
value:可以直接賦值常量,也可以賦值EL表達式:value="${test}" ;該標簽會將引號里的值輸出;
default:默認輸出值,當value值為null時輸出此值,如果也不定義默認值則輸出空字符串;
escapeXml:控制轉義字符;默認為true;也就是默認情況下如果值里有標簽存在則視為字符串;


<c: set/>或<c: set></c: set>;變量設置標簽
格式
<c: set var="" value="" scope="">
var:指定變量名;
value:指定變量值;可以為EL;也可以寫在標簽體中如:<c:set var="t" value="小明" />或<c:set var="t1">小明</c:set>
scope:指定變量作用域;默認為page,可選值包括:page,request,response,application;


<:c remove/>;變量移除標簽
格式:
<c: remove var="" scope=""/>
var:指定要移除的變量名
scope:指定要移除的變量有效范圍,當不同范圍的變量名有重復的時候, 可以通過這個屬性來確定移除的是哪個, 如果不指定, 則全部移除掉,默認值為page;


<c: catch></c: catch>;捕獲異常標簽
格式:
<c: catch var="">
    可能存在異常的代碼:${5 / 0}
</c: catch>
var:指定存儲異常信息的變量,如不保存,可省略了;類似於try...catch;上述代碼會輸出Infinity(無限大),屬於EL表達式里的異常;
2.流程控制標簽
<c:if></c:if>條件判斷標簽
格式:
<c:if var ="" test="" scope="">
    標簽體
</c:if>
var:指定判斷結果的變量名;
test:必選屬性,指定條件表達式,可以用EL,返回值為true或false,當為true時,執行標簽體,標簽體里可以為任何JSP能夠使用的元素;
scope:指定變量的有效范圍;


<c:choose></c:choose>;條件選擇標簽
一般與<c:when></c:when>條件測試標簽和<c:otherwise></c:otherwise>其他條件標簽組合使用,類似於switch...case語句
格式:
<c:choose>
    <c:when test="">
        <c:out value=""></c:out>//或其他標簽體
    </c:when>
    <c:otherwise>//可不寫
        <c:out value=""></c:out>
    </c:otherwise>
</c:choose>
3.循環標簽
<c:forEach></c:forEach>循環標簽
用於遍歷集合或數組中的所有或部分數據
格式:
<c: forEach  items = "" var = "list" begin="" end="" step="" varStatus="vs" >
    ${list} ${vs.index} ${vs.count} ${vs.first} ${vs.last}
</c:forEach>
items: 指定需要遍歷的數組或者集合
var: 設定一個變量名來存儲從數組或者集合中遍歷出來的值
begin, end: 指定需要遍歷的開始, 結束位置,默認全部遍歷
step: 每次遍歷跳過的個數, 默認值為1
varStatus:指定循環狀態變量
index:在原集合中的索引值, 從0開始
count:當前循環計數,從1開始,
first:是否是當前循環第一個
last:是否是當前循環最后一個
注意first和last, 是判斷的是否在輸出結果中的第一個或者最后一個, 並不是原來的集合中
例:輸出1到10之間所有整數
<c:forEach var ="i" begin="1" end= "10">
    ${i},
</c:forEach>


<c: forTokens></c: forTokens>迭代標簽
用於使用指定分隔符分割字符串,並遍歷分割后的字符串數組;
格式:
<c:forTokens items="" delims="" var=""></c:forTokens>
items:指定要迭代的String對象
delims:指定分隔符,可以同時有多個如:delims=", ; : "
var:指定變量名,保存分割后的字符串
其他屬性用法同forEach標簽


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM