1. 程式人生 > >JSTL和EL 表示式

JSTL和EL 表示式

 

 

目錄

1、為什麼需要EL

1、JavaBean在JSP中的侷限

2、解決辦法

2、EL表示式簡介

1、什麼是EL

2、EL的功能

3、EL的特點

4、EL表示式語法

1、使用變數名獲取值

2、變數屬性範圍名稱

3、獲取物件的屬性值

3、EL隱式物件

4、為什麼使用JSTL

5、什麼是JSTL

6、JSTL 的優點

7、JSTL的環境搭建

使用JSTL的步驟

8、 JSTL標準標籤庫內的標籤

1、set:設定指定範圍內的變數值

2、out:計算表示式並將結果輸出顯示

3、remove:刪除指定範圍內的變數

4、if:實現Java語言中if語句的功能

5、choose:實現Java語言中if-else if-else語句的功能

6、 forEach:實現對集合中物件的遍歷


1、為什麼需要EL

1、JavaBean在JSP中的侷限

  • 在JSP頁面中嵌入大量的Java程式碼
  • 獲取JavaBean屬性必須要例項化
  • 強制型別轉化
<%	
    Employee employee = (Employee)request.getAttribute("employee");
    Computer comp = employee.getComputer();
    String manufacturer = comp.getManufacturer();
%>

2、解決辦法

使用EL表示式簡化

${requestScope.employee.computer.manufacturer}

2、EL表示式簡介

1、什麼是EL

  • Expression Language(表示式語言)

2、EL的功能

  • 替代JSP頁面中的複雜程式碼

3、EL的特點

  • 自動轉換型別
  • EL得到某個資料時可以自動轉換型別
  • 使用簡單

4、EL表示式語法

${ EL exprission }

  • 使用變數名獲取值
  • 獲取物件的屬性值
  • 獲取集合

1、使用變數名獲取值

  • ${變數名}
<%  request.setAttribute("username","LiYang"); %>
姓名: ${username}

2、變數屬性範圍名稱

屬性範圍

EL中的名稱

說明

page

pageScope

${pageScope.username},表示在page範圍內查詢username變數,找不到返回Null

request

requstScope

 

session

sessionScope

 

application

applicationScope

 
${requstScope.username}

3、獲取物件的屬性值

<%	
    User user = (User )request.getAttribute("user");
    user.getName();
%>
  • 點操作符
${user.name} 
  • [ ]操作符
${user["name"]}

使用EL表示式輸出姓名

<%
    Map names = new HashMap();
    names.put("one","LiYang");
    names.put("two","WangHua");
    request.setAttribute("names",names);
%>
姓名:${names.one}<br/>
姓名:${names["two"] }<br/>
  • 關係操作符

    關係操作符

    說明

    示例

    結果

    ==(或eq)

    等於

    ${23==5}或${23 eq 5}

    ${"a" =="a"}或${"a" eq "a"}

    false

    true

    !=(或ne)

    不等於

    ${23!=5}或${23 ne 5}

    true

    <(或lt)

    小於

    ${23<5}或${23 lt 5}

    false

    >(或gt)

    大於

    ${23>5}或${23 gt 5}

    true

    <=(或le)

    小於等於

    ${23<=5}或${23 le 5}

    false

    >=(或ge)

    大於等於

    ${23>=5}或${23 ge 5}

    ture

  • 邏輯操作符

    邏輯操作符

    說明

    示例

    結果

    &&(或and)

    邏輯與

    如果A為true,B為false,則A&&B(或A and B)

    false

    ||(或or)

    邏輯或

    如果A為true,B為false,則A||B(或A or B)

    true

    ! (或not)

    邏輯非

    如果A為true,則!A (或not A)

    false

  • Empty操作符

變數 a不存在,則${empty a}返回的結果為true

${not empty a}或${!empty a}返回的結果為false

3、EL隱式物件

作用域訪問物件:pageScope、requestScope、sessionScope、applicationScope

引數訪問物件:param、paramValues

JSP隱式物件:pageContext

物件名稱

說  明

pageScope

返回頁面範圍的變數名,這些名稱已對映至相應的值

requestScope

返回請求範圍的變數名,這些名稱已對映至相應的值

sessionScope

返回會話範圍的變數名,這些名稱已對映至相應的值

applicationScope

返回應用範圍內的變數,並將變數名對映至相應的值

param

返回客戶端的請求引數的字串值

paramValues

返回對映至客戶端的請求引數的一組值

pageContext

提供對使用者請求和頁面資訊的訪問

4、為什麼使用JSTL

雖然EL表示式可以訪問JavaBean的屬性,但是並不能實現在JSP中進行邏輯判斷,因而要使用JSTL標籤。

5、什麼是JSTL

什麼是JSTL JSP標準標籤庫(JavaServerPages Standard Tag Library)

JSTL通常會與EL表示式合作實現JSP頁面的編碼

6、JSTL 的優點

  • 提供一組標準標籤
  • 可用於編寫各種動態 JSP 頁面

7、JSTL的環境搭建

使用JSTL的步驟

  • 在工程中引用JSTL的兩個jar包和標籤庫描述符檔案
  • 在JSP頁面新增taglib指令
  • <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    

    使用JSTL標籤

8、 JSTL標準標籤庫內的標籤

核心標籤庫

通用標籤:set、out、remove

條件標籤:if、choose

迭代標籤:forEach

1、set:設定指定範圍內的變數值

將value值儲存到範圍為scope的變數variable中

<c:set var="variable" value=" v " scope="  scope  "/>

將value值設定到物件的屬性中

<c:set value="value" target="target" property="property" />
<%
    User user = new User(); 
    request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />

2、out:計算表示式並將結果輸出顯示

不指定預設值

<c:out value="value" />

指定預設值

<c:out value="value" default="default" />
<%
    User user = new User(); 
    request.setAttribute("user", user);
%>
<c:set target="${user}" property="name" value="defaultName " />
<c:out value="${user.name}" default="noUserName" />

轉義特殊字元

<p>${"<a href='http://www.baidu.com'>百度</a>"}</p>
<p>
    <c:out escapeXml="Y" value="<a href='http://www.baidu.com'>百度</a>"/>
</p>
<c:out value="<a href='http://www.baidu.com'>百度</a>"/>

3、remove:刪除指定範圍內的變數

<body>
<!-- 設定之前應該是空值 -->
設定變數之前的值是:msg=<c:out value="${msg}" default="null"/>

<!-- 給變數msg設值  使用set屬性進行賦值 -->
<c:set var="msg" value="Hello ACCP!" scope="page"></c:set>

<!-- 此時msg的值應該是上面設定的"已經不是空值了" 使用out屬性輸出顯示-->
設定新值以後:msg=<c:out value="${msg}"></c:out><br>

<!-- 把 msg變數從page範圍內移除  使用remove屬性移除-->
<c:remove var="msg" scope="page"/>

<!-- 此時msg的值應該顯示null -->
移除變數msg以後:msg=<c:out value="${msg}“ default="null">
</c:out>
</body>	

通用標籤的使用: 

引入使用核心標籤的指令
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> 

<body>

set 標籤用於給變數設定值和作用範圍
scope= "page|request|session|application" 
<c:set var= "example" value="${100+1}" scope="session"  />	

out 標籤在頁面上顯示資訊或變數值 
<c:out value="${example}"/>

remove 標籤用於刪除作用域內的變數
<c:remove var= "example" scope="session"/>
</body>	

4、if:實現Java語言中if語句的功能

<c:if   test="codition"    var="name"    scope="applicationArea" >
	…
</c:if>	

判斷登入:

<body>
<c:set var="isLogin" value="${empty sessionScope.user}"/>
<c:if test="${isLogin}">
…登入表單
</c:if>
<c:if test="${! isLogin}">
已經登入!
</c:if>
</body>

5、choose:實現Java語言中if-else if-else語句的功能

<c:choose var="varName" scope="scope">
	<c:when test="condition1">
		主體內容
 	</c:when>
	<c:when test="condition2">
		主體內容
 	</c:when>
	<c:otherwise>
		主體內容
	</c:otherwise>
</c:choose >

6、 forEach:實現對集合中物件的遍歷

通過迭代標籤顯示商品列表:

<%
	List products = GoodsDao.getAllProducts();
	request.setAttribute("products", products);
%>
…
<!-- 迴圈輸出商品資訊 -->
<c:forEach var="product" items="${requestScope.products}" varStatus="status">
<!-- 如果是偶數行,為該行換背景顏色 -->
    <tr <c:if test="${status.index % 2 == 1 }">style="background-color:rgb(219,241,212);"</c:if>>
        <td>${product.name }</td>
        <td>${product.area }</td>
        <td>${product.price }</td>
    </tr>
</c:forEach>

通過迭代標籤遍歷Map:

<%
    Map<String,String> map=new HashMap<String,String>();
    map.put("tom", "美國");
    map.put("lily", "英國");
    map.put("jack","中國");
    request.setAttribute("map", map);
%>
<c:forEach var="entry" items="${map}">
     ${entry.key}
     ${entry.value}<p>
</c:forEach>

 forEach:指定迭代的次數

<c:forEach  begin="start"   end="end"  step="count">

		…迴圈體程式碼…
</c:forEach>

<c:forEach  begin="1"   end="5"  step= "2">
	<c:out value="*"></c:out>
</c:forEach>