想要使用JSTL,首先需要給工程導入JSTL的包(JSTL.jar和standard.jar).
在JSTL中分為以下五個標簽
使用不同的標簽的時候需要在JSP中引入不同的庫
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set> 等同於JSP中的 session的setAttribute() 方法
使用方法:
1.<c:set var=”名字” value=”值”/>
2.<c:set var=”名字”>值</c:set>
<c:out> 等同於 JSP中的 <%= %>
使用方法:
<c:out value=”需要輸出的值”>
在這裡可以用EL表達式來進行輸出session中的Attrbute
例:
<c:set var=”test” value=”這是一個測試”> <c:out value=”${test}”>
輸出結果: 這是一個測試
<c:remove> 和c:set標簽正好相反,c:set標簽是設置setAttrbute 這個標簽則是 刪除 Attrbute中設置的值 等同於 session中的removeAttrbute()方法
使用方法:
<c:remove var=”名字”/>
<c:if> 等同於 java 中的 if 語句
使用方法:
<c:if test=”條件”>滿足條件執行的JSP代碼</c:if>
<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> 類似於 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> 等同於 java switch 中的 default
使用方法
<c:choose> <c:otherwise>處理</c:otherwise> </c:choose>
當choose 中的 when 沒有滿足條件的時候 會執行 otherwise 中的內容
注意: choose 和 when 和 otherwise 是一組 when 和 otherwise 必須寫在choose中
使用方法:
<c:import var=”date” url=”http://www.baidu.com” />
通過上面的寫法會將 百度 的源代碼返回到 date 變量中,使用
<c:out value=”${date}”>
輸出
類似於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中
類似於service中的重定向
使用方法:
<c:redirect url=”http://www.baidu.com”/>
重定向到百度去
另外還有<c:url> 和 <c:param>兩個標簽
EL表達式定義規則:以 $ 開頭 內容寫在 {} 中 例: ${test}
當然,因為EL表達式所有的代碼都是寫在{}中的,所以我們也可以在裡面寫運算
比如:
${test+100}
最終輸出的結果就是test這個變量加上數字100後的值了
再比如
${test != null}
最終輸出的結果就是一個true 通過這種方式 我們可以很好的和JSTL結合起來一起使用.
EL中的運算符分為 . 和 [] 兩種
如果要動態取值 可以使用[] 比如:
${session.user[date]}
其中的date是一個變量
上面代碼的意思是 取出 session.user這個數組裡面的第 date 個元素
需要注意的是,EL表達式限制了我們調用JAVA方法,如果想要調用,可以自定義一個TAG
如果使用類似於 ${username} 的時候沒有在哪一個范圍查找username 那麼它會以:
為順序來進行查找,加入中途找到了 username 那麼就會返回值 如果一路沒找到 返回 null
從這裡開始就是介紹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}
當然,返回的是一個數組對象.