JSTL和EL的使用 使用JSTL前的準備 想要使用JSTL,首先需要給工程導入JSTL的包(JSTL.jar和standard.jar). JSTL標簽庫 在JSTL中分為以下五個標簽 使用不同的標簽的時候需要在JSP中引入不同的庫 核心標簽(Core): 引入標簽庫 <c:set> <c:set ...
JSTL和EL的使用
使用JSTL前的準備
想要使用JSTL,首先需要給工程導入JSTL的包(JSTL.jar和standard.jar).
JSTL標簽庫
在JSTL中分為以下五個標簽
- 核心標簽
- 格式化標簽
- SQL標簽
- XML標簽
- JSTL函數
使用不同的標簽的時候需要在JSP中引入不同的庫
核心標簽(Core):
引入標簽庫
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set>
<c:set> 等同於JSP中的 session的setAttribute() 方法
使用方法:
1.<c:set var=”名字” value=”值”/>
2.<c:set var=”名字”>值</c:set>
<c:out>
<c:out> 等同於 JSP中的 <%= %>
使用方法:
<c:out value=”需要輸出的值”>
在這裡可以用EL表達式來進行輸出session中的Attrbute
例:
<c:set var=”test” value=”這是一個測試”> <c:out value=”${test}”>
輸出結果: 這是一個測試
<c:remove>
<c:remove> 和c:set標簽正好相反,c:set標簽是設置setAttrbute 這個標簽則是 刪除 Attrbute中設置的值 等同於 session中的removeAttrbute()方法
使用方法:
<c:remove var=”名字”/>
<c:if>
<c:if> 等同於 java 中的 if 語句
使用方法:
<c:if test=”條件”>滿足條件執行的JSP代碼</c:if>
<c:catch>
<c:catch> 類似於 java 中的 try
使用方法:
<c:catch var=”名字”>JSP代碼</c:catch>
如果在執行過程中,JSP代碼發生了錯誤,那麼將會複製給名字,因此我們可以通過判斷名字是否為NULL 來進行判斷是否有異常發生
例:
<c:catch var=”testException”> <% int i = 5/0; %> </c:catch> <c:if test=”${testException != null}”>
上面的代碼有錯誤發生
</c:if>
輸出結果: 上面的代碼有錯誤發生
如果將 上面的 0 改為 3 則沒有任何輸出結果
<c:choose> 和 <c:when>
<c:choose> 和 <c:when> 類似於 java 中的 switch 和 case
使用方法:(c:choose中可以有多個c:when標簽)
<c:choose> <c:when test=”條件”>處理</c:when> <c:when test=”條件”>處理</c:when> </c:choose>
例:
<c:set var=”test” value=”10”/> <c:choose> <c:when test=”${test > 5}”>test 大於5</c:when> <c:when test=”${test < 5}”>test小於5</c:when> </c:choose>
輸出結果: test大於5
<c:otherwise>
<c:otherwise> 等同於 java switch 中的 default
使用方法
<c:choose> <c:otherwise>處理</c:otherwise> </c:choose>
當choose 中的 when 沒有滿足條件的時候 會執行 otherwise 中的內容
註意: choose 和 when 和 otherwise 是一組 when 和 otherwise 必須寫在choose中
<c:import>
使用方法:
<c:import var=”date” url=”http://www.baidu.com” />
通過上面的寫法會將 百度 的源代碼返回到 date 變數中,使用
<c:out value=”${date}”>
輸出
<c:forEach> 和 <c:forTokens>
類似於JAVA中的 FOR迴圈 和 FOREACH迴圈
使用方法:
<c:forEach var=”名字(i)” begin=”開始數字(1)” end=”結束數字(5)”>
${i}
</c:forEach>
輸出結果是1 2 3 4 5
使用方法:
<c:forTokens items=”a,b,c,d,e” delims=”,” var=”name”>
${name}
</c:forTokens>
輸出結果 a b c d e
forEach類似於JAVA中 for 迴圈 設置一個開始數字 begin 設置一個結束數字 end 然後每次迴圈都會將值賦值給 var 另外還有個 setp參數 裡面可以設置值 意思是每次增加幾個數
forTokens類似於JAVA中的foreach 在items中放一個組 然後 delims設置以什麼分割 然後 將分割後迴圈的值賦值給 var 如果 items中存放的是一個集合 那麼可以不用寫delims 這樣每迴圈一次 就會取出集合中的一個放在 var中
<c:redirect>
類似於service中的重定向
使用方法:
<c:redirect url=”http://www.baidu.com”/>
重定向到百度去
另外還有<c:url> 和 <c:param>兩個標簽
EL表達式介紹:
EL表達式定義規則:以 $ 開頭 內容寫在 {} 中 例: ${test}
當然,因為EL表達式所有的代碼都是寫在{}中的,所以我們也可以在裡面寫運算
比如:
${test+100}
最終輸出的結果就是test這個變數加上數字100後的值了
再比如
${test != null}
最終輸出的結果就是一個true 通過這種方式 我們可以很好的和JSTL結合起來一起使用.
EL中的運算符分為 . 和 [] 兩種
如果要動態取值 可以使用[] 比如:
${session.user[date]}
其中的date是一個變數
上面代碼的意思是 取出 session.user這個數組裡面的第 date 個元素
需要註意的是,EL表達式限制了我們調用JAVA方法,如果想要調用,可以自定義一個TAG
EL表達式查找順序(都是針對Attrbute()):
如果使用類似於 ${username} 的時候沒有在哪一個範圍查找username 那麼它會以:
- Page
- Request
- Session
- Application
為順序來進行查找,加入中途找到了 username 那麼就會返回值 如果一路沒找到 返回 null
EL表達式的隱性變數:
從這裡開始就是介紹EL表達式的隱性變數,通過這些隱性變數可以讓我們簡便完成很多複雜的操作:
pageContext | 用來訪問JSP的隱性對象 |
pageScope | page對象的MAP |
requestScope | request對象的MAP |
requestScope | request對象的MAP |
sessionScope | session對象的MAP |
applicationScope | application對象的MAP |
param | 包含請求參數字元串的MAP |
paramValues | 包含請求參數字元串數組的MAP |
header | 包含請求頭字元串的MAP |
headerValues | 包含請求頭字元串數組的MAP |
cookie | 按名稱存儲請求附帶的cookie的MAP |
例:假設我們是想要session中的name值 那麼我們可以使用:
${sessionScope.name}
再例:我們想要獲得GET或則POST傳遞過來的name參數,在以前我們只能使用:
request.getParameter(name);
使用EL表達式可代替為:
${param.name}
同樣,如果我們想要得到一個參數的數組,可以使用:
${paramValues.name}
當然,返回的是一個數組對象.