javaee筆記(8)JSTL&EL

EL表達式

EL的全稱是表達式語言(Expression Language,EL),它是JSP2.0新增加的技術規範。引入EL表達式語言目的之一是爲JSP頁面計算、訪問和打印數據提供方便,儘可能減少JSP頁面中的Java代碼,使JSP頁面更簡潔、更易於開發和維護。
EL表達式的基本語法
在這裏插入圖片描述
前者爲即時計算。後者爲延遲計算,通常用於JSF框架中
EL表達式可以寫在HTML標記的標記體內,也可以寫標記屬性值內。
EL表達式中數值常量直接書寫,例如:${3+5}

EL隱含對象

EL定義了11個隱含對象來方便讀取JSP環境中的數據。
訪問JSP域變量
EL訪問4個JSP域變量(pageContext、request、session和application)對應的EL隱含對象是:pageScope、requestScope、sessionScope和applicationScope。
例如:

<%
    session.setAttribute("aa","bb");
	application.setAttribute("cc","dd");
%>
${sessionScope.aa}
${applicationScope.cc}

讀取request請求報頭
在EL表達式中讀取request請求報頭信息的隱含對象有header、headerValues
讀取cookie
讀取客戶端cookies對象的EL隱含對象cookie。
讀取客戶端表單或查詢串參數
讀取客戶端表單或查詢串中參數的EL隱含對象爲param或paramValues。
讀取上下文初始化參數
通過EL的initParam隱含對象可讀取上下文初始化參數。

EL運算符

EL表達式中可使用的運算符有:算術算符、關係算符、邏輯算符。
算術算符
主要有+、-、*、/、%、(),含義和用法基本同Java語言。例如:

<body>
${3+(8*4)}
</body> 

關係算符
主要有:>(大於)、<(小於)、<=(小於等於)、>=(大於等於)、==(等於)、!=(不等於),含義和用法基本同Java語言,例如:

<body>
${7<5}
</body> 

邏輯算符
主要有&&、||、!,算符含義同Java,這三個算符也可用保留字and、or、not表示,例如:

<%
    session.setAttribute("a","3");
    request.setAttribute("b","5");
%>
${a==3 && a<b}

empty和not empty //(!empty)算符
empty算符的作用是判斷作用範圍變量的取值是否爲空null,爲空則返回true,非空則返回false。

${empty s}//s=null s="" 都爲true

. 與 [] 算符
EL使用“.”或“[]”來讀取變量中的數據,兩個算符的作用相同。

EL的自動數據類型轉換
EL會根據表達式的運算性質,將讀取到的數據自動轉換爲適合的數據類型後再參與表達式的運算。

訪問JSP隱含對象中的getXXX()方法
在EL表達式中訪問JSP隱含對象的getXXX()方法,EL語法如下:
${pageContext.JSP隱含對象名.XXX}
例如,訪問request隱含對象的getRequestURI()方法,EL語法爲:

 ${pageContext.request.requestURI} 

訪問JavaBean中的屬性
EL表達式通過“.”算符訪問JavaBean中的屬性,基本用法爲:
${JavaBean名.屬性名}
“.”算符實際上是調用JavaBean中的getXXX()方法。

JSTL

JSTL,即JSP標準標記庫(JSP Standard Tag Library),它是SUN公司爲簡化JSP頁面設計而提出的一種技術規範。JSTL使用一套新的標準標籤庫取代原來的scriptlet(代碼嵌入<% %>中)進行JSP頁面開發,使頁面代碼的可讀性有了顯著提高。

JSTL標記的結構
一個JSTL標記主要包含三部份:起始標記(可能包含屬性)、標記體、結束標記。如:

<c:if test="${6>5}">
         結果:6>5
</c:if> 

JSTL標記的使用
要在JSP頁面中使用JSTL標記(有5個標籤庫),首先要使用taglib指令聲明,基本語法爲:
<%@ taglib uri=“標記庫的URI” prefix=“標記前綴” %>
例如:

   <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
     <c:out value="JSTL的使用"/> 

JSTL核心標記庫

 JSTL核心標記庫提供了控制流、循環語句、異常處理、信息輸出、變量定義等動作。

<c:set>標記
用於定義一個JSP作用範圍變量,並對變量進行賦值。主要有以下兩種用法:
用<c:set>定義作用範圍變量,語法如下:
<c:set var=“變量名” [value=“對象”] [scope=“作用範圍”]>
[標記體]
</c:set>

例子:

<c:if test="${empty c}">
<c:set var="c" value="1"  scope="session"></c:set>
</c:if> 

<c:if test="${not empty c}">
<c:set var="c" value="${c+1}"  scope="session"></c:set>
</c:if> 
${c}

用<c:set>操作JavaBean對象,基本用法如下:
<c:set target=“Bean對象名” property=“屬性名” [value=“新值”]>
[新值]
</c:set>

<c:remove>標記
<c:remove>用於移除一個作用範圍變量,基本語法如下:
<c:remove var=“對象的變量名” scope=“作用範圍”/>
例子:

<c:set var="c" scope="session"></c:set>

<c:out>標記
用來顯示數據,功能相當於<%=%>。可輸出常量或EL表達式。語法如下:
<c:out value=“待顯示的數據” [default=“變量的默認值”]
[escapeXml=“true|false”]>
[變量的默認值]
</c:out>

例子

 <c:out value="&lt要顯示的數據對象(未使用轉義字符)&gt" escapeXml="true" default="默認值"></c:out>

<c:catch>標記
用來捕獲異常,基本語法如下:
<c:catch [var=“變量名”]>
… 可能發生異常的代碼段 …
</c:catch>

例子:

<c:catch var ="catchException">
   <% int x = 5/0;%>
</c:catch>

<c:if test = "${catchException != null}">
   <p>異常爲 : ${catchException} <br />
   發生了異常: ${catchException.message}</p>
</c:if>

<c:if>標記
類似於Java語言中的if語句,用於測試判斷。基本語法爲:
<c:if test= “">[..]</c:if><c:if><c:iftest="{條件表達式}"> […標記體…..] </c:if>** <c:if>語句可以逐層嵌套,例如: **<c:if test="{條件表達式1}”>
<c:if test="${條件表達式2}">
條件都成立時,最後顯示的內容.
</c:if>
</c:if>

例子:

<c:if test="${6>5}">
         結果:6>5
</c:if> 

<c:choose>標記
實現多分支判斷。它的基本語法爲:
<c:choose>
<c:when test=“${條件表達式1}”>
… 標記體1 …
</c:when>
… 其它的<c:when>標記 …
<c:otherwise>
… 標記體n …
</c:otherwise>
</c:choose>

例子

<c:set var="salary" scope="session" value="${2000*2}"/>
<p>你的工資爲 : <c:out value="${salary}"/></p>
<c:choose>
    <c:when test="${salary <= 0}">
       太慘了。
    </c:when>
    <c:when test="${salary > 1000}">
       不錯的薪水,還能生活。
    </c:when>
    <c:otherwise>
        什麼都沒有。
    </c:otherwise>
</c:choose>

<c:redirect>標記
實現重定向功能,它的基本用法如下:
<c:redirect url="" [context=""]>
…[<c:param>]…
</c:redirect>

例子

<c:redirect url="http://www.runoob.com"/>

<c:forEach>標記
(1) 計數循環
實現類似Java的for計數循環,它的基本用法如下:
<c:forEach begin=“初值”
end=“終值”
[step=“步長”]
[var=“變量”]
[varStatus=“狀態變量”]>
… 標記體(循環體) …
</c:forEach>

例子:

<c:forEach begin="1"  end="10"  var="i"  varStatus="j">
${i} 
<br/>
</c:forEach>
 (2) 集合或數組的遍歷

使用<c:forEach>來遍歷集合對象或數組的基本用法如下:
<c:forEach items=“對象名” var=“變量” [varStatus=“狀態變量”]>
… 標記體(循環體) …
</c:forEach>

例子:

<c:forEach items="sdgsdhs" var="i"  >
${i} 
</c:forEach>

<c:forTokens>標記
用來遍歷一個字符串中的單詞,單詞用指定分隔符隔開。基本用法爲:
<c:forTokens items=“字符串” delims=“單詞分隔符”
[varStatus=“狀態變量”] [begin=“起始位置”]
[end=“結束位置”] Step=“步長值” var=“變量”>
…(循環體)…
</c:forTokens>

例子:

<c:forTokens items="google,runoob,taobao,dsge" delims=","  begin="0"  end="3" step="2" var="name">
   <c:out value="${name}"/><p>
</c:forTokens>

<c:import>標記
將其它文本資源包含到當前頁面中。基本用法爲:
<c:import url="" [context=""] [var=""] [scope=""] [charEncoding=""]>
… [<c:param>] …
</c:import>

在這裏插入圖片描述
例子:

<c:import var="data" url="http://www.runoob.com"/>
<c:out value="${data}"/>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章