1. 程式人生 > >EL表達式、JSTL標簽庫

EL表達式、JSTL標簽庫

glib art min 對不起 元素 利用 動態 替換 輸出數據

一、EL(Expression Language)表達式

  語法結構:${var}

  若要停用對EL表達式的評估的話,需要使用page指令將isELIgnored屬性值設為true:

  <%@ page isELIgnored ="true|false" %>  這樣,EL表達式就會被忽略。若設為false,則容器將會計算EL表達式。

  EL表達式的應用:

  • 獲取數據:用於替換Jsp中的腳本表達式,從web域中檢索java對象、獲取數據。
  • 執行運算:執行一些基本的邏輯運算、關系運算、算術運算。
  • 獲取Web開發常用對象:利用EL定義的隱式對象,可以獲得對web常用對象的引用,從而獲取這些對象中的的數據。
  • 調用java方法:EL允許自定義EL函數,可以通過EL表達式調用java類的方法。
 1      <h3>EL表達式中使用二元表達式</h3>
 2      <% 
 3          session.setAttribute("user",new User("孤傲蒼狼"));
 4      %>
 5      ${user==null? "對不起,您沒有登陸 " : user.username}
 6 
 7 
 8     <%
 9          List<String> emptyList = null;
10      %>
11
<%--使用empty運算符檢查對象是否為null(空) --%> 12 <c:if test="${empty(emptyList)}"> 13 對不起,沒有您想看的數據 14 </c:if>

  EL表達式語言中定義了11個隱含對象,他們都是java.util.Map類型,使用這些隱含對象可以很方便地獲取web開發中的一些常見對象,並讀取這些對象的數據

技術分享

 1 <br/>---------------1、pageContext對象:獲取JSP頁面中的pageContext對象------------------------<br/>
 2
${pageContext} 3 <br/>---------------2、pageScope對象:從page域(pageScope)中查找數據------------------------<br/> 4 <% 5 pageContext.setAttribute("name","張三"); //map 6 %> 7 ${pageScope.name} 8 <br/>---------------3、requestScope對象:從request域(requestScope)中獲取數據------------------------<br/> 9 <% 10 request.setAttribute("name","李四"); //map 11 %> 12 ${requestScope.name} 13 <br/>---------------4、sessionScope對象:從session域(sessionScope)中獲取數據------------------------<br/> 14 <% 15 session.setAttribute("user","xdp"); //map 16 %> 17 ${sessionScope.user}

  EL表達式語言可以訪問EL函數。EL函數實際上與Java類的方法對應,這個Java類必須定義為public類型,並且作為函數的方法必須聲明為public static類型。當Java類定義好以後,應該在標簽描述符(TLD)文件中,把Java類的方法映射為函數。

  EL Function:

  一般來說, EL自定義函數開發與應用包括以下三個步驟:
  1、編寫一個Java類的靜態方法。
  2、編寫標簽庫描述符(tld)文件,在tld文件中描述自定義函數。
  3、在JSP頁面中導入和使用自定義函數。

  詳情參考:(1)http://www.cnblogs.com/xdp-gacl/p/3938361.html(1.5EL Function開發步驟)

       (2)http://blog.csdn.net/goskalrie/article/details/51315397(自定義和使用EL函數)

二、JSTL(JavaServer Pages Standard Tag Library,JSP標準標簽庫)

   JSTL是apache對EL表達式的擴展(也就是說JSTL依賴EL),JSTL是標簽語言。JSTL標簽使用以來非常方便,它與JSP動作標簽一樣,只不過它不是JSP內置的標簽,需要我們自己導包,以及指定標簽庫。

  1、JSTL標簽庫包含四類:

  • core:核心標簽庫,學習重點
  • fmt:格式化標簽庫,只學習兩個
  • sql:數據庫標簽庫,已過時,不學習
  • xml:xml標簽庫,已過時,不學習

  2、使用taglib指令導入標簽庫

  除了JSP動作標簽外,使用其他第三方的標簽庫都需要:(1)導包;(2)在使用標簽的JSP頁面中使用taglib指令導入標簽庫。

  導入JSTL的core標簽庫:<%@ taglib prefix="c"uri="http://java.sun.com/jstl/core" %>

  • prefix="c":指定標簽庫的前綴,這個前綴可以隨便給值,但大家都會在使用core標簽庫時指定前綴為c;
  • uri="http://java.sun.com/jstl/core":指定標簽庫的uri,它不一定是真實存在的網址,但它可以讓JSP找到標簽庫的描述文件;

  3、核心標簽庫(core)

  JSTL的核心標簽庫標簽共13個,分為4類:  

    1.表達式控制標簽:out、set、remove、catch

    2.流程控制標簽:if、choose、when、otherwise

    3.循環標簽:forEach、forTokens

    4.URL操作標簽:import、url、redirect

  (1)<c:out>標簽主要是用來輸出數據對象(字符串、表達式)的內容或結果。JSTL的使用是和EL表達式分不開的,<c:out>有特定的結果處理功能,EL的單獨使用會降低程序的易讀性,建議把EL的結果輸入放入<c:out>標簽中。

  (2)<c:set>標簽用於把某一個對象存在指定的域範圍內,或者將某一個對象存儲到Map或者JavaBean對象中。

  <c:set value="趙五" target="${person}" property="name"></c:set>
<c:set target="${person}" property="age">19</c:set>
<li>從Bean中獲取對象person的name值:<c:out value="${person.name}"></c:out></li>
<li>從Bean中獲取對象person的age值:<c:out value="${person.age}"></c:out></li>

  (3)<c:remove>標簽主要用來從指定的JSP範圍內移除指定的變量。

  (4)<c:catch>標簽用於捕獲嵌套在標簽體中的內容拋出的異常。

  (5)<c:if>標簽和程序中的if語句作用相同,用來實現條件控制。

 <%--使用if標簽進行判斷並把檢驗後的結果賦給adminchock,存儲在默認的page範圍中。 --%>
  <c:if test="${param.uname==‘admin‘}" var="adminchock">

  (6)<c:choose>、<c:when>和<c:otherwise>這3個標簽通常情況下是一起使用的,<c:choose>標簽作為<c:when>和<c:otherwise>標簽的父標簽來使用。 使用<c:choose>,<c:when>和<c:otherwise>三個標簽,可以構造類似 “if-else if-else” 的復雜條件判斷結構。

  (7)<c:forEach>標簽該根據循環條件遍歷集合(Collection)中的元素。

  (8)<c:import>該標簽可以把其他靜態或動態文件包含到本JSP頁面,與<jsp:include>的區別為:<jsp:include>只能包含同一個web應用中的文件。而<c:import>可以包含其他web應用中的文件,甚至是網絡上的資源。

  (9)<c:url>標簽用於在JSP頁面中構造一個URL地址,其主要目的是實現URL重寫。

  (10)<c:redirect>該標簽用來實現請求的重定向。同時可以配合使用<c:param>標簽在url中加入指定的參數。

  4、fmt標簽庫

   fmt標簽庫是用來格式化輸出的,通常需要格式化的有時間和數字:

  (1)格式化日期

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  
......  
<%  
    Date date = new Date();  
    pageContext.setAttribute("d", date);  
%>  
<fmt:formatDate value="${d }" pattern="yyyy-MM-dd HH:mm:ss"/>

  (2)格式化數字  

<%  
    double d1 = 3.5;  
    double d2 = 4.4;   
    pageContext.setAttribute("d1", d1);  
    pageContext.setAttribute("d2", d2);  
%>  
<fmt:formatNumber value="${d1 }" pattern="0.00"/><br/>  
<fmt:formatNumber value="${d2 }" pattern="#.##"/> 

  5、自定義JSTL標簽

  詳見:http://blog.csdn.net/qq_25827845/article/details/53311722(自定義標簽)

  以上均為簡單學習的過程。

  參考資料:

  EL:

  (1)http://www.runoob.com/jsp/jsp-expression-language.html

  (2)http://blog.csdn.net/goskalrie/article/details/51315397

  (3)http://www.cnblogs.com/xdp-gacl/p/3938361.html

  (4)http://blog.csdn.net/qwerasdf123/article/details/4189889

  JSTL:

  (5)http://www.runoob.com/jsp/jsp-jstl.html

  (6)http://blog.csdn.net/qq_25827845/article/details/53311722

  (7)http://www.cnblogs.com/lihuiyy/archive/2012/02/24/2366806.html

  (8)http://www.cnblogs.com/xdp-gacl/p/3943390.html

EL表達式、JSTL標簽庫