1. 程式人生 > >源自其他博主分析的jstl+el整理

源自其他博主分析的jstl+el整理

一個 範圍 返回 container other 定義 vps ice i++

JSTLEL的使用

是簡化代碼,如果你以前用JAVA嵌入代碼時會這麽做
<%names = request.getAttribute("name");%>
jsp代碼...
<%for(int i=0;i<names.length;i++){
String name=names.get(i);

%>
<tr>
<td>

<%=name%>

</td>

</tr>
<%}%>
如果你用JSTL+EL的話就不用這麽麻煩了,而且企業也不會像上面代碼一樣操作的,主要是代碼量巨大,如果用Jstl+El的話就好多了
<c:forEach var=‘name‘ items=‘${names}‘>//此句是Jstl表達式
<tr>
<td>

${name}//此句是El表達式

</td>

</tr>
//就可以觀看性來就肯定是JSTL+El容易理解,而且他能動獲取來自服務器傳過來的值,與JSP實現高度耦合。

上述為對比

下述為舉例說明

使用JSTL前的準備

想要使用JSTL,首先需要給工程導入JSTL的包(JSTL.jarstandard.jar).

JSTL標簽庫

在JSTL中分為以下五個標簽

  1. 核心標簽
  2. 格式化標簽
  3. SQL標簽
  4. XML標簽
  5. JSTL函數

使用不同的標簽的時候需要在JSP中引入不同的庫

核心標簽(Core):

引入標簽庫

1 <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<c:set>

<c:set> 等同於JSP中的 sessionsetAttribute() 方法

使用方法:

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類似於JAVAfor 循環 設置一個開始數字 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 那麽它會以:

  1. Page
  2. Request
  3. Session
  4. 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}

當然,返回的是一個數組對象.

源自其他博主分析的jstl+el整理