JSTL 表達式與 EL 語言

轉載自(個人在 ITeye上的文章):http://leon906998248.iteye.com/blog/1502569

一、什麼是 EL 語言。

表達式語言(EL)是 JSP 2.0 引入的一種計算和輸出 Java 對象的簡單語音。

二、EL 語言的作用。

爲了使JSP寫起來更加簡單。表達式語言的靈感來自於 ECMAScript 和 XPath 表達式語言,它提供了在 JSP 中簡化表達式的方法。它是一種簡單的語言,基於可用的命名空間(PageContext 屬性)、嵌套屬性和對集合、操作符(算術型、關係型和邏輯型)的訪問符、映射到 Java 類中靜態方法的可擴展函數以及一組隱式對象

三、使用 EL 語言前的配置。

1、導入standard.jar

2、在需要使用 EL 語音的頁面加上<%@ page isELIgnored="false" %>

 注意 <%@ page isELIgnored="true" %> 表示是否禁用EL語言,TRUE表示禁止.FALSE表示不禁止.JSP2.0中默認的啓用EL語言。

3、對於整個JSP應用程序,要修改WEB.XML配置(tomcat5.0.16默認是支持EL的)

Java代碼  收藏代碼
  1. <jsp-property-group>   
  2.     <description> For config the ICW sample application </description>   
  3.     <display-name>JSPConfiguration </display-name>  
  4.     <url-pattern>/jsp/datareset.jsp </url-pattern>  
  5.     <el-ignored>true< / el-ignored> < / el-ignored>  
  6.     <page-encoding>UTF-8</page-encoding>   
  7.     <scripting-invalid>true</scripting-invalid>  
  8.     <include-prelude>/jsp/prelude.jspf</include-prelude>   
  9.     <include-coda>/jsp/coda.jspf</include-coda>  
  10. </jsp-property-group>  

 

四、如何使用 EL 表達式。

1、EL 的內置對象。

首先我們要知道 EL 的內置對象有哪些----pageScope、requestScope、sessionScope、applicationScope,如果未指定scope,默認從 pageScope 到 applicationScope一次擴大範圍查找屬性名,也可以使用 xxxScope.屬性名 直接指定在某個 scope 查找,如:

 

Java代碼  收藏代碼
  1. ${ requestScope.tom }  

 

2、語法結構。

 

Java代碼  收藏代碼
  1. ${expression}  

 

 

3、[ ]與.運算符。

EL 提供.和[]兩種運算符來存取數據。如:

 

Java代碼  收藏代碼
  1. ${student.name}  
  2. ${studentList[0].name}  

當要存取的屬性名稱中包含一些特殊字符,如.或?等並非字母或數字的符號,就一定要使用“[ ]“。如:

 

 

Java代碼  收藏代碼
  1. ${ student.My-Name}   <!-- ${ student.My-Name} 寫法不正確,應該改爲下面這種 -->  
  2. ${ student["My-Name"] }  

如果要動態取值時,就可以用“[ ]“來做,而“.“無法做到動態取值。如:

 

 

Java代碼  收藏代碼
  1. ${ sessionScope.student[property] }    <!-- 其中 property 是一個變量,動態取對象的屬性,如"id""name"等等 -->  

4、使用 EL 取出內置對象的數據。

 

(1)、普通對象和對象屬性。

服務器端:

 

Java代碼  收藏代碼
  1. request.setAttribute("student", student);  

在瀏覽器上打印出服務器端綁定的數據:

 

 

Java代碼  收藏代碼
  1. ${ student }  <!-- 相當於執行了 student.toString(); -->  
  2. ${ student.name }  <!-- 相當於執行了 student.getName(); -->  
  3. ${ student.teacher.name }  <!-- 相當於執行了 student.getTeacher().getName(); -->  
  4. ...  

(2)、數組中的數據。

 

服務器端:

 

Java代碼  收藏代碼
  1. String[] nameArray = new String[]{"Tom""Lucy""Lilei"};  
  2. request.setAttribute(“nameArray”,nameArray);  
  3.   
  4. Student[] students = new Student[3];  
  5. students[0] = stu1;  
  6. students[1] = stu2;  
  7. students[2] = stu3;  
  8. request.setAttribute(“students”,students);  

在瀏覽器上打印出服務器端綁定的數組數據:

 

 

Java代碼  收藏代碼
  1. ${ nameArray[0] }   <!-- Tom -->  
  2. ${ nameArray[1] }   <!-- Lucy -->  
  3. ${ nameArray[2] }   <!-- Lilei -->  
  4.   
  5. ${ students[0].id }   <!-- 輸出第一個學生的ID -->  
  6. ${ students[1].name }   <!-- 輸出第二個學生的name -->  
  7. ${ students[2].teacher.name }   <!-- 輸出第三個學生的老師的name -->  

(3)、List中的數據。

 

服務器端:

 

Java代碼  收藏代碼
  1. List<Student> studentList=new ArrayList<Student>();  
  2. studentList.add(stu1);  
  3. studentList.add(stu2);  
  4. studentList.add(stu3);  
  5. request.setAttribute(“studentList”,studentList);  

在瀏覽器上打印出服務器端綁定的List數據:

 

 

Java代碼  收藏代碼
  1. ${ studentList[0].id }   <!-- 輸出第一個學生的ID -->  
  2. ${ studentList[1].name }   <!-- 輸出第二個學生的name -->  
  3. ${ studentList[2].teacher.name }   <!-- 輸出第三個學生的老師的name -->  

 

 

(4)、Map中的數據。

服務器端:

 

Java代碼  收藏代碼
  1. Map<String, Student> studentMap = new HashMap<String, Student>();  
  2. studentMap.put("Tom", stu1);  
  3. studentMap.put("Lucy", stu2);  
  4. studentMap.put("Lilei", stu3);  
  5. request.setAttribute(“studentMap”,studentMap);  

在瀏覽器上打印出服務器端綁定的Map數據:

 

Java代碼  收藏代碼
  1. ${ studentMap.Tom.id }   <!-- 輸出第一個學生的ID -->  
  2. ${ studentMap.Lucy.name }   <!-- 輸出第二個學生的name -->  
  3. ${ studentMap.Lilei.teacher.name }   <!-- 輸出第三個學生的老師的name -->  

5、使用 EL 取出隱式對象中的數據。
JSP 表達式語言定義了一組隱式對象,其中許多對象在 JSP scriplet 和表達式中可用。可使用的隱式對象如下:

page
Context
JSP 頁的上下文。它可以用於訪問 JSP 隱式對象,如請求、響應、會話、輸出、servletContext 等。例如,${pageContext.response} 爲頁面的響應對象賦值。

此外,還提供幾個隱式對象,允許對以下對象進行簡易訪問:

術語 定義
param 將請求參數名稱映射到單個字符串參數值(通過調用 ServletRequest.getParameter (String name) 獲得)。getParameter (String) 方法返回帶有特定名稱的參數。表達式 $(param . name) 相當於 request.getParameter (name)。
paramValues 將請求參數名稱映射到一個數值數組(通過調用 ServletRequest.getParameter (String name) 獲得)。它與 param 隱式對象非常類似,但它檢索一個字符串數組而不是單個值。表達式 ${paramvalues. name) 相當於 request.getParamterValues(name)。
header 將請求頭名稱映射到單個字符串頭值(通過調用 ServletRequest.getHeader(String name) 獲得)。表達式 ${header. name} 相當於 request.getHeader(name)。
headerValues 將請求頭名稱映射到一個數值數組(通過調用 ServletRequest.getHeaders(String) 獲得)。它與頭隱式對象非常類似。表達式 ${headerValues. name} 相當於 request.getHeaderValues(name)。
cookie 將 cookie 名稱映射到單個 cookie 對象。向服務器發出的客戶端請求可以獲得一個或多個 cookie。表達式 ${cookie. name .value} 返回帶有特定名稱的第一個 cookie 值。如果請求包含多個同名的 cookie,則應該使用 ${headerValues. name} 表達式。
initParam 將上下文初始化參數名稱映射到單個值(通過調用 ServletContext.getInitparameter(String name) 獲得)。

除了上述兩種類型的隱式對象之外,還有些對象允許訪問多種範圍的變量,如 Web 上下文、會話、請求、頁面:

術語 定義
pageScope 將頁面範圍的變量名稱映射到其值。例如,EL 表達式可以使用 ${pageScope.objectName} 訪問一個 JSP 中頁面範圍的對象,還可以使用 ${pageScope .objectName. attributeName} 訪問對象的屬性。
requestScope 將請求範圍的變量名稱映射到其值。該對象允許訪問請求對象的屬性。例如,EL 表達式可以使用 ${requestScope. objectName} 訪問一個 JSP 請求範圍的對象,還可以使用 ${requestScope. objectName. attributeName} 訪問對象的屬性。
sessionScope 將會話範圍的變量名稱映射到其值。該對象允許訪問會話對象的屬性。例如: 
${sessionScope. name}
applicationScope 將應用程序範圍的變量名稱映射到其值。該隱式對象允許訪問應用程序範圍的對象。

五、EL 操作符

JSP 表達式語言提供以下操作符,其中大部分是 Java 中常用的操作符:

術語 定義
算術型 +、-(二元)、*、/、div、%、mod、-(一元)
邏輯型 and、&&、or、||、!、not
關係型 ==、eq、!=、ne、、gt、<=、le、>=、ge。可以與其他值進行比較,或與布爾型、字符串型、整型或浮點型文字進行比較。
empty。空操作符是前綴操作,可用於確定值是否爲空。
條件型 A ?B :C。根據 A 賦值的結果來賦值 B 或 C。

例如:

 

Java代碼  收藏代碼
  1. 1+2=${1+2}  
  2. 10/5=${10/5}  
  3. 10 div 5=${10 div 5}  
  4. 10%3=${10%3}  
  5. 10 mod 3=${10 mod 3}  
  6. ${empty  scope中的屬性名}  
  7. ${!empty  scope中的屬性名}  

六、什麼是 JSTL 表達式。

 

JSP 標準標記庫(JSP Standard Tag Library,JSTL)是一個實現 Web 應用程序中常見的通用功能的定製標記庫集,這些功能包括迭代和條件判斷、數據管理格式化、XML 操作以及數據庫訪問。

七、JSTL 表達式的作用。

JSTL標籤庫的使用是爲類彌補html表的不足,規範自定義標籤的使用而誕生的。在告別modle1模式開發應用程序後,人們開始注重軟件的分層設計,不希望在jsp頁面中出現java邏輯代碼,同時也由於自定義標籤的開發難度較大和不利於技術標準化產生了自定義標籤庫。JSTL標籤庫可分爲5類:

 

  • 核心標籤庫
  • I18N格式化標籤庫
  • SQL標籤庫
  • XML標籤庫
  • 函數標籤庫

 

八、JSTL 表達式在頁面的配置。

1、導入standard.jar和jstl.jar。

2、在JSP頁面上引入 JSTL 的引用。如:

 

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

九、JSTL 的使用。

 

1、核心標籤庫

JSTL的核心標籤庫標籤共13個,從功能上可以分爲4類:表達式控制標籤、流程控制標籤、循環標籤、URL操作標籤。使用這些標籤能夠完成JSP頁面的基本功能,減少編碼工作。如:

 

  • 表達式控制標籤:out標籤、set標籤、remove標籤、catch標籤。
  • 流程控制標籤:if標籤、choose標籤、when標籤、otherwise標籤。
  • 循環標籤:forEach標籤、forTokens標籤。
  • URL操作標籤:import標籤、url標籤、redirect標籤。

 

下面,演示各個標籤的使用。

1.1、表達式控制標籤。

(1)、<c:out>標籤:用來顯示數據對象(字符串、表達式)的內容或結果。相當於 <% out.println(“字符串”)%> 或 <%=表達式%>。

語法如下:

 

  • 【語法1】:<c:out value=”要顯示的數據對象” [escapeXml=”true|false”] [default=”默認值”]>
  • 【語法2】:<c:out value=”要顯示的數據對象” [escapeXml=”true|false”]>默認值</c:out>

 

其中,

value:指定要輸出的變量或表達式。

escapeXml:設定是否轉換特殊字符(如&lt、&gt等一些轉義字符),在默認值爲true的情況下直接在輸出&lt的,如果改爲false將會進行轉義輸出“<”等。

default:爲默認輸出結果。如果使用表達式得到的結果爲null(注意與空區別),將會輸出默認結果。

例如:

 

Java代碼  收藏代碼
  1. <%@ page pageEncoding="utf-8" %>  
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <html>  
  4.     <head>  
  5.         <title>out標籤的使用</title>  
  6.     </head>  
  7.     <body>  
  8.         <ul>  
  9.             <li>(1)<c:out value="普通一行字符串"></c:out></li>  
  10.             <li>(2)<c:out value="&lt未使用字符轉義&gt" /></li>  
  11.             <li>(3)<c:out value="&lt未使用字符轉義&gt" escapeXml="false"></c:out></li>  
  12.             <li>(4)<c:out value="${null}">使用了默認值</c:out></li>  
  13.             <li>(5)<c:out value="${null}"></c:out></li>  
  14.         </ul>  
  15.     </body>  
  16. </html>  

輸出:

 

 

Java代碼  收藏代碼
  1. 普通一行字符串  
  2. <未使用字符轉義>  
  3. <未使用字符轉義>  
  4. 使用了默認值  

(2)、<c:set>標籤:主要用於將變量存取於JSP範圍中或JavaBean屬性中。

 

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <c:set value=”值1” var=”name1” [scope=”page|request|session|application”]>  
    ,把一個值放在指定(page、session等)的map中。
  • 【語法2】:
    Java代碼  收藏代碼
    1. <c:set var=”name2” [scope=”page|request|session|application”]>  
    ,把一個變量名爲name2的變量存儲在指定的scope範圍內。
  • 【語法3】:
    Java代碼  收藏代碼
    1. <c:set value=”值3” target=”JavaBean對象” property=”屬性名”/>  
    ,把一個值爲“值3”賦值給指定的JavaBean的屬性名。相當與setter()方法。
  • 【語法4】:
    Java代碼  收藏代碼
    1. <c:set target=”JavaBean對象” property=”屬性名”>值4</c:set>  
    ,把一個值4賦值給指定的JavaBean的屬性名。

 

提示:從功能上分語法1和語法2、語法3和語法4的效果是一樣的只是把value值放置的位置不同至於使用那個根據個人的喜愛,語法1和語法2是向scope範圍內存儲一個值,語法3和語法4是給指定的JavaBean賦值。

 

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

 

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <c:remove var=”變量名” [scope=”page|request|session|application”]/>  
    ,其中var屬性是必須的,scope可以以省略。

 

例如:

 

Java代碼  收藏代碼
  1. <%@ page language="java" pageEncoding="utf-8"%>  
  2. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  
  3. <html>  
  4.     <head>  
  5.         <title>remove標籤的使用</title>  
  6.     </head>  
  7.     <body>   
  8.         <ul>  
  9.             <li><c:set var="name" scope="session">張三</c:set>  
  10.             <li><c:set var="age" scope="session">22</c:set>  
  11.             <li><c:set var="sex" scope="session">男</c:set>  
  12.             <li><c:out value="${sessionScope.name}"></c:out>  
  13.             <li><c:out value="${sessionScope.age}"></c:out>  
  14.             <li><c:out value="${sessionScope.sex}"></c:out>  
  15.             <li><c:remove var="age"/>  
  16.             <li><c:out value="${sessionScope.name}"></c:out>  
  17.             <li><c:out value="${sessionScope.age}"></c:out>  
  18.             <li><c:out value="${sessionScope.sex}"></c:out>  
  19.         </ul>  
  20.     </body>  
  21. </html>  

輸出:

 

 

Java代碼  收藏代碼
  1. 張三  
  2. 22  
  3. 男  
  4. 張三  
  5.   
  6. 男  

(4)、<c:catch>標籤:用來處理JSP頁面中產生的異常,並將異常信息存儲。

  • 【語法】:<c:catch var=”name1”>容易產生異常的代碼</c:catch>,var表示由用戶定義存取異常信息的變量的名稱。省略後也可以實現異常的捕獲,當就不能顯示的輸出異常信息。

 

例如:

 

Java代碼  收藏代碼
  1. <%@ page language="java" pageEncoding="utf-8"%>  
  2. <%@ uri="http://java.sun.com/jsp/jstl/core" taglib prefix="c" %>  
  3. <html>  
  4.     <head>  
  5.         <title>JSTL: -- catch標籤實例</title>  
  6.     </head>  
  7.     <body>  
  8.         <h4>catch標籤實例</h4>  
  9.         <hr>  
  10.         <c:catch  var=”error”>  
  11.             <c:set target="Dank" property="hao"></c:set>  
  12.         </c:catch>  
  13.         <c:out value="${error}"/>  
  14.     </body>  
  15. </html>  

說明:第10~12把容易產生異常的代碼放在<c:catch></c:catch>中,自定義一個變量error用於存儲異常信息。第11行實現了一段異常代碼,向一個不存在的JavaBean中插入一個值。第13行用EL表達式得到error的值,並使用<c:out>標籤輸出。

 

 

1.2、流程控制標籤。

流程控制標籤主要用於對頁面簡單業務邏輯進行控制。流程控制標籤包含有4個:<c:if>標籤、<c:choose>標籤、<c:when>標籤和<c:otherwise>標籤。下面將介紹這些標籤的功能和使用方式。

 

(1)、<c:if>標籤:同程序中的if作用相同,用來實現條件控制。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <c:if test=”條件1” var=”name” [scope=”page|request|session|application”]>  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <c:if test=”條件2” var=”name” [scope=”page|request|session|application”]>結果2</c:if>  

 

【參數說明】:

I、test屬性用於存放判斷的條件,一般使用EL表達式來編寫。
II、var指定名稱用來存放判斷的結果類型爲true或false。
III、scope用來存放var屬性存放的範圍。

 

(2)、<c:choose>、<c:when>和<c:otherwise>標籤:這3個標籤通常情況下是一起使用的,<c:choose>標籤作爲<c:when>和<c:otherwise>標籤的父標籤來使用。

 

  • 【語法1】:3個標籤的嵌套使用方式,<c:choose>標籤只能和<c:when>標籤共同使用。如:

 

 

Java代碼  收藏代碼
  1. <c:choose>  
  2.     <c:when test="條件1">  
  3.         …..//業務邏輯1  
  4.     </c:when>  
  5.     <c:when test="條件2">  
  6.         …..//業務邏輯2  
  7.     </c:when>  
  8.     <span style="white-space: pre;">    </span><c:otherwise>  
  9.         …..//業務邏輯3  
  10.     </c:otherwise>  
  11. </c:choose>  

 

 

  • 【語法2】:<c:when>標籤的使用方式,該標籤都條件進行判斷,一般情況下和<c:choose>共同使用。如:

 

 

Java代碼  收藏代碼
  1. <c:when text=”條件”>  
  2.     表達式  
  3. </c:when>  

  • 【語法3】:<c:otherwise>不含有參數,只能跟<c:when>共同使用,並且在嵌套中只允許出現一次。如:

 

 

Java代碼  收藏代碼
  1. <c:otherwise>  
  2.     表達式  
  3. </c:otherwise>  

例如:

 

 

Java代碼  收藏代碼
  1.  <%@ page language="java" pageEncoding="gbk"%>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  3. <html>  
  4. <head>  
  5.     <title>JSTL: -- choose及其嵌套標籤標籤示例</title>  
  6. </head>  
  7.     <body>  
  8.         <h4>choose及其嵌套標籤示例</h4>  
  9.         <hr>  
  10.         <c:set var="score">85</c:set>  
  11.         <c:choose>  
  12.             <c:when test="${ score>=90 }">  
  13.                 你的成績爲優秀!  
  14.             </c:when>  
  15.             <c:when test="${ score>=70 && score<90 }">  
  16.                 您的成績爲良好!  
  17.             </c:when>  
  18.             <c:when test="${ score>60 && score<70 }">  
  19.                 您的成績爲及格  
  20.             </c:when>  
  21.             <c:otherwise>  
  22.                 對不起,您沒有通過考試!  
  23.             </c:otherwise>  
  24.         </c:choose>  
  25.     </body>  
  26. </html>  

1.3、循環標籤。

 

循環標籤主要實現迭代操作。主要包含兩個標籤:<c:forEach>和<c:forTokens>標籤,接下來將詳細介紹這兩個標籤的用法。

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

 

  • 【語法】:

 

 

Java代碼  收藏代碼
  1. <c:forEach var=”name” items=”Collection” varStatus=”StatusName” begin=”begin” end=”end” step=”step”>  
  2.     所有內容  
  3. </c:forEach>  

【參數解析】:
I、var設定變量名用於存儲從集合中取出元素。
I、items指定要遍歷的集合。
III、varStatus設定變量名,該變量用於存放集合中元素的信息。    
IV、begin、end用於指定遍歷的起始位置和終止位置(可選)。
V、step指定循環的步長。

 

循環標籤屬性說明】:

名稱

EL

類型

是否必須

默認值

var

N

String

items

Y

Arrays

Collection

Iterator

Enumeration

Map

String []args

begin

Y

int

0

end

Y

int

集合中最後一個元素

step

Y

int

1

varStatus

N

String


其中varStatus有4個狀態屬性,如下:

 

屬性名

類型

說明

index

int

當前循環的索引值

count

int

循環的次數

frist

boolean

是否爲第一個位置

last

boolean

是否爲第二個位置

(2)、<c:forTokens>標籤:該標籤用於瀏覽字符串,並根據指定的字符將字符串截取。


 

  • 【語法】:

 

 

Java代碼  收藏代碼
  1. <c:forTokens items=”strigOfTokens” delims=””delimiters [var=”name” begin=”begin” end=”end” step=”len” varStatus=”statusName”] >  

【參數說明】
I、items指定被迭代的字符串。
II、delims指定使用的分隔符。
III、var指定用來存放遍歷到的成員。
IV、begin指定遍歷的開始位置(int型從取值0開始)。
V、end指定遍歷結束的位置(int型,默認集合中最後一個元素)。
VI、step遍歷的步長(大於0的整型)。
VII、varStatus存放遍歷到的成員的狀態信息。

 

 

注:<c:forToken>的屬性varStatus的使用同<c:forEach>的使用方法相同,在此就再不表述。

 

1.4、URL操作標籤。

JSTL包含3個與URL操作有關的標籤,分別爲:<c:import>、<c:redirect>和<c:url>標籤。它們的作用爲:顯示其他文件的內容、網頁導向、產生URL。下面將詳細介紹這3個標籤的使用方法。

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

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <c:import url=”url” [context=”context”][ value=”value”][scope=”page|request|session|application”] [charEncoding=”encoding”]>  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <c:import url=”url” varReader=”name” [context=”context”][charEncoding=”encoding”]>  


 

<c:import>標籤參數說明。

 

名稱

說明

EL

類型

必須

默認值

url

被導入資源的URL路徑

Y

String

context

相同服務器下其他的web工程,必須以“"”開頭

Y

String

var

String類型存入被包含文件的內容。

N

String

Scope

var變量的JSP範圍

N

String

page

charEncoding

被導入文件的編碼格式

Y

String

varReader

Reader類型存儲被包含文件內容

N

String

 

【參數說明】:

I、URL爲資源的路徑,當應用的資源不存在時系統會拋出異常,因此該語句應該放在<c:catch></c:catch>語句塊中捕獲。應用資源有兩種方式:絕對路徑和相對路徑。使用絕對路徑示例如下:

Java代碼  收藏代碼
  1. <c:import url=”http://www.baidu.com”>  
使用相對路徑的實例如下:
Java代碼  收藏代碼
  1. <c:import url=”aa.txt”>  
aa.txt放在同一文件目錄。
如果以“/”開頭表示應用的根目錄下。例如:tomcat應用程序的根目錄文件夾爲webapps。導入webapps下的文件bb.txt的編寫方式爲:
Java代碼  收藏代碼
  1. <c:import url=”/bb.txt”>  
如果訪問webapps管理文件夾中其他web應用就要用context屬性。
II、context屬性用於在訪問其他web應用的文件時,指定根目錄。例如,訪問root下的index.jsp的實現代碼爲:
Java代碼  收藏代碼
  1. <c:import url=”/index.jsp” context=”/root”>  
等同於webapps/root/index.jsp
III、var 屬性表示爲資源起的別名。

 

IV、scope 屬性標識該資源訪問的範圍。

V、charEncoding 屬性標識該資源的編碼方式。

VI、varReader 這個參數的類型是Reader,用於讀取資源。 

 

(2)、<c:redirect>標籤:用來實現了請求的重定向。同時可以在url中加入指定的參數。例如:對用戶輸入的用戶名和密碼進行驗證,如果驗證不成功重定向到登錄頁面;或者實現web應用不同模塊之間的銜接。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <c:redirect url=”url” [context=”context”]>  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <c:redirect url=”url”[context=”context”]>  
    2.     <c:param name=”name1” value=”value1”>  
    3. </c:redirect>  

 

【參數說明】:
I、url 指定重定向頁面的地址,可以是一個string類型的絕對地址或相對地址。

II、context
用於導入其他web應用中的頁面。

例如,當請求頁面時重定向到tomcat首頁:

 

Java代碼  收藏代碼
  1. <%@ page contentType="text/html;charset=GBK" %>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  3. <c:redirect url="http://127.0.0.1:8080">  
  4.     <c:param name="uname">root</c:param>  
  5.     <c:param name="password">123456</c:param>  
  6. </c:redirect>  

(3)、<c:url>標籤:該標籤用於動態生成一個String類型的URL,可以同<c:redirect>標籤共同使用,也可以使用html的<a>標籤實現超鏈接。

 

 

  • 【語法1】:指定一個url不做修改,可以選擇把該url存儲在JSP不同的範圍中。
    Java代碼  收藏代碼
    1. <c:url value=”value” [var=”name”][scope=”page|request|session|application”][context=”context”]/>  

  • 【語法2】:給url加上指定參數及參數值,可以選擇以name存儲該url。
    Java代碼  收藏代碼
    1. <c:url value=”value” [var=”name”][scope=”page|request|session|application”][context=”context”]>  
    2.     <c:param name=”參數名” value=”值”>  
    3. </c:url>  

 

例如,使用動態生成url實現了網頁的超鏈接:

 

Java代碼  收藏代碼
  1. <%@ page contentType="text/html;charset=GBK" %>  
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
  3. <c:out value="url標籤使用"></c:out>  
  4. <h4>使用url標籤生成一個動態的url,並把值存入session中.</h4>  
  5. <hr>  
  6. <c:url value="http://127.0.0.1:8080" var="url" scope="session">  
  7. </c:url>  
  8. <a href="${url}">Tomcat首頁</a>  

2、I18N格式標籤庫

 

JSTL標籤提供了對國際化(I18N)的支持,它可以根據發出請求的客戶端地域的不同來顯示不同的語言。同時還提供了格式化數據和日期的方法。實現這些功能需要I18N格式標籤庫(I18N-capable formation tags liberary)。引入該標籤庫的方法爲:

Java代碼  收藏代碼
  1. <%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>  

I18N格式標籤庫提供了11個標籤,這些 標籤從功能上可以劃分爲3類如下:

 

 

  • 數字日期格式化。formatNumber標籤、formatData標籤、parseNumber標籤、parseDate標籤、timeZone標籤、setTimeZone標籤。
  • 讀取消息資源。bundle標籤、message標籤、setBundle標籤。
  • 國際化。setlocale標籤、requestEncoding標籤。

 

接下將詳細介紹這些標籤的功能和使用方式。

2.1、數字日期格式化標籤:數字日期格式化標籤共有6個,用來將數字或日期轉換成設定的格式。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <frm:formatNumber value=”被格式化的數據”[type=”number|currency|percent”]  
    2.     [pattern=”pattern”]  
    3.     [currencyCode=”code”]  
    4.     [currencySymbol=”symbol”]  
    5.     [groupingUsed=”true|false”]  
    6.     [maxIntergerDigits=”maxDigits”]  
    7.     [minIntergerDigits=”minDigits”]  
    8.     [maxFractionDigits=”maxDigits”]  
    9.     [minFractionDigits=”minDigits”]  
    10.     [var=”name”]  
    11.     [scope=page|request|session|application]   
    12. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <frm:formatNumber [type=”number|currency|percent”]  
    2.     [pattern=”pattern”]  
    3.     [currencyCode=”code”]  
    4.     [currencySymbol=”symbol”]  
    5.     [groupingUsed=”true|false”]  
    6.     [maxIntergerDigits=”maxDigits”]  
    7.     [minIntergerDigits=”minDigits”]  
    8.     [maxFractionDigits=”maxDigits”]  
    9.     [minFractionDigits=”minDigits”]  
    10.     [var=”name”][scope=page|request|session|application]   
    11. />   

 

<fmt:formatNumber>標籤參數說明:

名稱

說明

EL

類型

必須

默認值

value

要格式化的數據

String

type

指定類型(單位、貨幣、百分比等)見表

String

number

pattern

格式化的數據樣式

String

currencyCode

貨幣單位代碼

String

cuttencySymbol

貨幣符號($、¥)

String

groupingUsed

是否對整數部分進行分組如(9999

boolean

true

maxIntergerDigits

整數部分最對顯示多少位數

int

minIntergerDigits

整數部分最少顯示多少位

int

maxFractionDigits

小數部分最多顯示多少位

int

minFractionDigits

小數部分最少顯示多少位

int

var

存儲格式化後的數據

String

scope

varJSP範圍

String

page

Type屬性的類型應用見表:

類型

說明

示例

number

數字格式

0.8

currency

當地貨幣

0.80

percent

百分比格式

80%

2.2、<frm:parseNumber>標籤:將格式化後的數字、貨幣、百分比都轉化爲數字類型。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <fmt:parseNumber value="number" [type=”number|currency|percent”]  
    2.     [pattern=”pattern”]  
    3.     [parseLocale=”locale”]  
    4.     [intergerOnly=”true|false”]  
    5.     [scope=page|request|session|application”]  
    6. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <fmt:parseNumber [type=”number|currency|percent”]  
    2.     [pattern=”pattern”]  
    3.     [parseLocale=”locale”]  
    4.     [intergerOnly=”true|false”]  
    5.     [scope=”page|request|session|application”]>   
    6. Number  
    7. </fmt:parseNumber>  

 

<fmt:parseNumber>標籤參數說明:

 

名稱

說明

EL

類型

是否必須

默認值

value

被解析的字符串

String

type

指定單位(數字、貨幣、百分比)

String

number

pattern

格式樣式

String

parseLocale

用來替代默認區域的設定

String

Java.util.

Locale

默認本地樣式

var

存儲已經格式化的數據

String

scope

var變量的作用域

String

page

<fmt:parseNumber>可以看作是<fmt:formatNumber>的逆運算。相應的參數和類型的配置和使用<fmt:formatNumber>格式化時相同。


2.3、<fmt:formatDate>標籤:該標籤主要用來格式化日期和時間。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt: formatDate value=”date” [type=”time|date|both”]  
    2.     [pattern=”pattern”]  
    3.     [dateStyle=”default|short|medium|long|full”]  
    4.     [timeStyle=”default|short|medium|long|full”]  
    5.     [timeZone=”timeZone”]  
    6.     [var=”name”]  
    7.     [scope=”page|request|session|application”]  
    8. />  

 

<fmt:formatDate>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

value

將要格式化的日期對象。

Java.util.Date

type

顯示的部分(日期、時間或者兩者)。

String

date

partten

格式化的樣式。

String

dateStyle

設定日期的顯示方式。

String

default

timeStyle

設定時間的顯示方式。

String

default

timeZone

設定使用的時區。

String

當地所用時區

var

存儲已格式化的日期或時間。

String

scope

指定var存儲的JSP範圍。

String

 

其中type屬性參數說明見表:

參數名

說明

time

只顯示時間

date

只顯示時期

both

顯示日期和時間

 

2.4、<fmt:parseDate>標籤:主要將字符串類型的時間或日期轉化爲時間或日期對象。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <fmt:parseDate value=”date” [type=”time|date|both”]  
    2.     [pattern=”pattern”]  
    3.     [parseLocale=”locale”]  
    4.     [dateStyle=”default|short|medium|long|full”]  
    5.     [timeStyle=”default|short|medium|long|full”]  
    6.     [timeZone=”timezone”]  
    7.     [var=”name”]  
    8.     [scope=”page|request|session|application”]  
    9. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <fmt:parseDate [type=”time|date|both”]  
    2.     [pattern=”pattern”]  
    3.     [parseLocale=”locale”]  
    4.     [dateStyle=”default|short|medium|long|full”]  
    5.     [timeStyle=”default|short|medium|long|full”]  
    6.     [timeZone=”timezone”]  
    7.     [var=”name”]  
    8.     [scope=”page|request|session|application”]>   
    9.     Date  
    10. </fmt:parseDate>  

 

<fmt:parseData>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

value

將要格式化的日期時間

String

type

字符串的類型(日期、時間或全部)

EL

String

date

pattern

字符串使用的時間樣式

String

parseLocale

取代默認地區設定

String

默認地區

dateStyle

字符串使用的日期顯示方式

String

default

timeStyle

字符串使用的時間顯示格式

String

default

timeZone

使用的時區

String

當地區時

var

使用var定義的名字保存對象

String

scope

varJSP範圍

String

page

2.5、<fmt:setTimeZone>標籤:該標籤用於設定默認時區或者將時區存儲在指定的JSP範圍內。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt:timeZone value=”timeZone”>  
    2.     …..  
    3. </fmt:timeZone>  

 

 

Java代碼  收藏代碼
  1. 使用<fmt:timeZone></fmt:timeZone>只會應用到標籤體內使用的時區,對標籤外部將不產生影響。  

3、讀取消息資源。

 

讀取消息資源用到的標籤主要有4個:<fmt:message>標籤、<fmt:param>標籤、<fmt:bundle>標籤和<fmt:setBundle>標籤。主要用於從資源文件中讀取信息。

3.1、<fmt:bundle>標籤:該標籤主要用於將資源文件綁定於它的標籤體中的顯示。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt:bundle basename=”name”[prefix=”prefix”]>  
    2.     ….標籤主題  
    3. </fmt:bundle>  

 

<fmt:bundle>標籤屬性說明:

 

參數名

說明

EL

類型

必須

默認值

basename

指定使用的資源文件的名稱

String

prefix

前置關鍵字

String

 

3.2、<fmt:setBundle>標籤:該標籤主要用於綁定資源文件或者把資源文件保存在指定的JSP範圍內。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt:setBundle basename=”name” [var=”name”]  
    2.     [scope=”page|request|session|application”]  
    3. />  

 

<fmt:setBundle>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

basename

指定使用的資源文件的名稱

String

var

指定將資源文件保存的名稱

String

scope

設定將資源文件保存的JSP範圍

String

page


3.3、<fmt:message>標籤:該標籤主要負責讀取本地資源文件,從指定的消息文本資源文件中讀取鍵值,並且可以將鍵值保存在指定的JSP範圍內。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <fmt:message key=”keyName”[bundle=”bundle”]  
    2.     [scope=”page|request|session|application”]  
    3. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <fmt:message key=”keyName”[bundle=”bundle”]  
    2.     [scope=”page|request|session|application”]>   
    3.     <fmt:param/>  
    4. </fmt:message>  

  • 【語法3】:
    Java代碼  收藏代碼
    1. <fmt:message key=”keyName”[bundle=”bundle”]  
    2.     [scope=”page|request|session|application”]>   
    3.     key<fmt:param/>  
    4.     …  
    5. </fmt:message>  

 

<fmt:message>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

key

指定鍵值的名稱(索引)

String

bundle

指定消息文本的來源

LocalizationContext

var

指定存儲鍵值的變量名

String

scope

指定var的作用域

String

page

提示:建議此處的bundle使用EL表達式,因爲屬性bundle的類型爲LocalizationContext,而不是一個String類型的URL。


3.4、<fmt:param>標籤:該標籤主要用於當<fmt:message>中資源文件中獲得鍵值時,動態的爲資源文件中的變量賦值。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <fmt:param value=”value”/>  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <fmt:param >  
    2.     …標籤主體  
    3. </fmt:param>  

 

【示例代碼】:
創建資源文件。在message.properties文件中增加一個key和value。
news={0} welcome to out website!<br>today is :{1,date}
表達的含義是鍵news對應的是一個字符串,字符串中還有動態變量{0}表示第一個動態變量,{1,date}表示第二個動態變量並且該變量是一個日期類型的對象。
通過標籤從資源文件中取出鍵值,並給動態變量賦值顯示在頁面。

 

Java代碼  收藏代碼
  1. <fmt:bundle basename="message">  
  2.     <fmt:message key="news">  
  3.         <fmt:param value="root" />  
  4.         <fmt:param value="${date}"/>  
  5.     </fmt:message>  
  6. </fmt:bundle>  

 

3.5、國際化。

國際化這個分類中共包含兩個標籤:用於設定語言地區<fmt:setLocale/>和用於設定請求的字符編碼的<fmt:requestEncoding>標籤。

(1)、<fmt:setLocale/>標籤:用來設定用戶語言區域。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt:setLocale value=”locale”[variant=”variant”]  
    2.     [scope=”page|request|session|application”]   
    3. />  

 

<fmt:setLocale>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

value

指定區域代碼

String

java.util.Locale

variant

操作系統的類型

String

scope

設定時區的作用範圍

String

page

value屬性用來指定使用的語言代碼,可以從瀏覽器的【工具】---【Internet選項】---【語言】---【添加】中查看瀏覽器支持的語言種類及語言代碼。例如:中文(zh_cn)、臺灣(zh_tw)、香港(zh_mo)等。


(2)、<fmt:requestEncoding>標籤:用於設定請求的編碼格式。功能同servletRequest.setCharacterEncoding()方法相同。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <fmt:requestEncoding [value=”charEncoding”] />  

 

【參數說明】:
value屬性用來指定使用的編碼集例如:gbk、gb2312等。當沒有給出value的值時將會自動搜索取尋找合適的編碼方式,因此能夠很好的解決中文亂碼問題。


4、SQL標籤庫。

JSTL提供了與數據庫相關操作的標籤,可以直接從頁面上實現數據庫操作的功能,在開發小型網站是可以很方便的實現數據的讀取和操作。本章將詳細介紹這些標籤的功能和使用方法。
SQL標籤庫從功能上可以劃分爲兩類:設置數據源標籤、SQL指令標籤。
引入SQL標籤庫的指令代碼爲:

Java代碼  收藏代碼
  1. <%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>  

 

4.1、設置數據源:使用<sql:setDataSource>標籤可以實現對數據源的配置。

 

  • 【語法1】:直接使用已經存在的數據源。
    Java代碼  收藏代碼
    1. <sql:setDataSource dataSource=”dataSource”[var=”name”]  
    2.     [scope=”page|request|session|application”]  
    3. />  

 

<sql:DataSource>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

dataSource

數據源

String

Javax.sql.DataSource

driver

使用的JDBC驅動

String

url

連接數據庫的路徑

String

user

連接數據庫的用戶名

String

password

連接數據庫的密碼

String

var

指定存儲數據源的變量名

String

scope

指定數據源存儲的JSP範圍

String

page

提示:是否必須是相對的,比如說如果使用數據源則,driver、url等就不再被使用。如果使用JDBC則要用到driver、url、user、password屬性。

例如連接SQL Server需要進行如下配置:

Java代碼  收藏代碼
  1. Driver="com.microsoft.jdbc.sqlserver.SQLServerDriver"  
  2. url=”"jdbc:microsoft:sqlserver://localhost:1433; DatabaseName=pubs"  
  3. user="sa"  
  4. password=""  

使用<fmt:setDataSource>配置的代碼如下:

如果連接其他數據庫,只須把相對應的項修改即可。

提示:可以把數據連接的配置存入session中,如果再用到數據庫連接只須配置使用DataSource屬性。

 

Java代碼  收藏代碼
  1. <fmt:setDataSource driver=”com.microsoft.jdbc.sqlserver.SQLServerDriver”   
  2. url=”jdbc.microsoft:sqlserver://localhost:1433;DatabaseName=pubs”  
  3. ser=”sa”  
  4. password=””>  

如果連接其他數據庫,只須把相對應的項修改即可。

提示:可以把數據連接的配置存入session中,如果再用到數據庫連接只須配置使用DataSource屬性。

 


4.2、SQL操作標籤:JSTL提供了<sql:query>、<sql:update>、<sql:param>、<sql:dateParam>和<sql:transaction>這5個標籤,通過使用SQL語言操作數據庫,實現增加、刪除、修改等操作。下面將介紹這5個標籤的功能和使用方式。

(1)、<sql:query>標籤:用來查詢數據。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <sql:query sql=”sqlQuery” var=”name” [scope=”page|request|session|application”]  
    2.     [dataSource=”dateSource”]  
    3.     [maxRow=”maxRow”]  
    4.     [startRow=”starRow”]  
    5. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <sql:query var=”name” [scope=”page|request|session|application”]  
    2.     [dataSource=”dateSource”]  
    3.     [maxRow=”maxRow”]  
    4.     [startRow=”starRow”]>   
    5.     sqlQuery  
    6. </sql:query>  

 

<sql:query>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

sql

查詢數據的SQL語句

String

dataSource

數據源對象

String

Javax.sql.DataSoutce

maxRow

設定最多可以暫存數據的行數

String

startRow

設定從那一行數據開始

String

var

指定存儲查詢結果的變量名

String

scope

指定結果的作用域

String

page

使用<sql:query>必須指定數據源,dataSource是可選的,如果未給定該屬性標籤會在page範圍內查找是否設置過數據源,如果沒有找到將拋出異常。

一般情況下使用<sql:setDateSource>標籤設置一個數據源存儲在session範圍中,當需要數據庫連接時使用dataSource屬性並實現數據庫的操作。

<sql:query>的var屬性是必須的用來存放結果集,如果沒有指定scope範圍則默認爲page,即在當前頁面我們可以隨時輸出查詢結果。結果集有一系列的屬性如表9-17所示。

maxRows和startRow屬性用來操作結果集,使用SQL語句首先吧數據放入內存中,檢查是否設置了startRow屬性,如果設置了就從starRow指定的那一行開始取maxRows個值,如果沒有設定則從第一行開始取。

結果集參數說明:

屬性名

類型

說明

rowCount

int

結果集中的記錄總數

Rows

Java.util.Map

以字段爲索引查詢的結果

rowsByIndex

Object[]

以數字爲作索引的查詢結果

columnNames

String[]

字段名稱數組

limitedByMaxRows

boolean

是否設置了maxRows屬性來限制查詢記錄的數量

提示:limitedByMaxRows用來判斷程序是否收到maxRows屬性的限制。並不是說設定了maxRows屬性,得到結果集的limitedByMaxRows的屬性都爲true,當取出的結果集小於maxRows時,則maxRows沒有對結果集起到作用此時也爲false。例如可以使用startRow屬性限制結果集的數據量。

結果集的作用就是定義了數據在頁面中的顯示方式。下面給出了結果集每個屬性的作用。

  • rowCount屬性。該屬性統計結果集中有效記錄的量,可以使用於大批量數據分頁顯示。
  • Rows屬性。等到每個字段對應的值。返回的結果爲:字段名={字段值···}
  • rowsByIndex屬性。常用得到數據庫中數據的方式,從有效行的第一個元素開始遍歷,到最後一個有效行的最後一個元素。
  • columnNames屬性。用於得到數據庫中的字段名。
  • limitedByMaxRows屬性。用於判斷是否受到了maxRows的限制。

(2)、<sql:update>標籤:用來實現操作數據庫如:使用create、update、delete和insert等SQL語句,並返回影響記錄的條數。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <sql:update sql=”SQL語句” [var=”name”]   
    2.     [scope=”page|request|session|application”]  
    3.     [dateSource=”dateSource”]  
    4. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <sql:update [var=”name”]   
    2.     [scope=”page|request|session|application”]  
    3.     [dateSource=”dateSource”]>   
    4.     SQL語句  
    5. </sql:update>  

 

<sql:update>標籤屬性說明:

參數名

說明

EL

類型

必須

默認值

sql

查詢數據的SQL語句

String

dataSource

數據源對象

String

Javax.sql.DataSoutce

var

指定存儲查詢結果的變量名

String

scope

指定結果的作用域

String

page

提示:<sql:update>標籤的屬性同<sql:query>標籤的屬性相比只減少了maxRows和startRow2個屬性。其他參數用法一樣。

使用<sql:update>可以實現數據表的創建、插入數據、更行數據、刪除數據。使用時只須在標籤中放入正確的SQL語句即可,同時要捕獲可能產生的異常。本節只對一個簡單的插入操作進行說明。


(3)、<sql:param>標籤:用於動態的爲SQL語句設定參數,同<sql:query>標籤共同使用。可以防止SQL注入作用類似於java.sql.PreparedStatement。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <sql:param value=”value”/>  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <sql:param>Value</sql:param>  

 

【參數說明】:
value的作用爲SQL中的參數賦值。

【使用示例】:

Java代碼  收藏代碼
  1. <sql:query var=”result”>  
  2.     select * from person where 序號=?   
  3. <sql:query>  

 

(4)、<sql:dateParam>標籤:主要用於爲SQL標籤填充日期類型的參數值。

  • 【語法】:
    Java代碼  收藏代碼
    1. <sql:dateParam value=”date”[type=”timestamp|time|date”] />  

【參數說明】:

  • value屬性:java.util.Date類型的參數。
  • type屬性:指定填充日期的類型timestamp(全部日期和時間)、time(填充的參數爲時間)、date(填充的參數爲日期)。

 

(5)、<sql:transaction>標籤:提供了數據操作的一種安全機制(即事務回滾),當操作數據庫的某條SQL語句發生異常時,取消<sql:transaction>標籤體中的所有操作,恢復原來的狀態,重新對數據庫進行操作。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <sql:transaction [dataSource=”dataSource”]  
    2.     [isolation=”read_committed|read_uncommitted|repeatable|serializable”]>   
    3.     <sql:query>  
    4.     <sql:uptade>  
    5. </sql:transation>  

 

5、ML標籤庫。

JSTL提供了操作xml文件的標籤庫,使用xml標籤庫可以省去使用Dom和SAX標籤庫的繁瑣,能輕鬆的讀取xml文件的內容。


5.1、<x:parse>標籤:用來解析指定的xml文件。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <x:parse doc=”xmlDocument”   
    2.     {var=”name”[scope=”page|request|session|application”]|varDom=”name”   
    3.     [scope=”page|request|session|application”]}   
    4.     systemId=”systemId”   
    5.     filter=”filter”  
    6. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <x:parse var=”name”  
    2.     [scope=”page|request|session|application”]|varDom=”name”  
    3.     [scope=”page|request|session|application”]}  
    4.     systemId=”systemId”  
    5.     filter=”filter”>   
    6.     xmlDocument  
    7. </x:parse>  

 

<x:parse>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

doc

指定解析的xml文件

String/Reader

var

存儲解析後的xml文件

String

scope

指定varJSP範圍

String

page

varDom

以(org.w3c.dom.Doucemet)的形式存儲解析的xml文件

String

scopeDom

指定varDomJSP範圍

String

page

systemId

xml文件的url

String

filter

解析xml文件的過濾器

Org.xml.sax.Filter

提示:doc指定解析的xml文件並不是指定xml文件的路徑,而是同<c:import>共同使用,由<c:import>加載並存儲,然後使用<x:parse>解析。


例如:如果解析person.xml文件需要通過如下代碼實現對xml文件的解析。
<c:import var="docString" url="person.xml"/><!--引入person.xml文件-->
<x:parse var="doc" doc="${docString}"/>
<c:import>語句用來導入或存儲文件到JSP。如果不使用var來存儲,xml文件將顯式的出現在JSP文件中。
<x:parse>標籤只用來解析xml文件,並不顯示xml文件中的內容,如果想得到xml的節點元素或值需要使用<x:out>元素來實現。


5.2、<x:out>標籤:主要用來輸出xml的信息。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <x:out select=”XpathExperssion”[excapeXml=”true|false”]>  

 

<x:out>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

select

指定使用的XPath語句

String

escapeXml

是否轉換特殊字符。如<

boolean

true

提示:使用XPath語句需要用到xalan.jar支持包,可以從示例程序的lib中獲取,獲得直接從myEclipse中可以找到。


5.3、<x:set>標籤:用於將從xml文件節點解析的內容存儲到JSP屬性範圍中。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <x:set select="XPathExperssion"   
    2.     var="name"   
    3.     scope="page|request|session|application">  

 

5.4、XML流程控制:使用xml標籤庫的流程控制標籤可以迭代處理xml文件的內容,流程控制可以分爲以下兩個方面的內容:

 

  • 條件判斷。
  • 循環功能。

 

(1)、<x:if>標籤:主要用於條件判斷。

 

  • 【語法1】:未含有本體內容。
    Java代碼  收藏代碼
    1. <x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”] />  

  • 【語法2】:含有本體內容。
    Java代碼  收藏代碼
    1. <x:if select=”XPathExperssion” var=”name”[scope=”page|request|session|application”]>   
    2.     本體內容  
    3. </x:if>  

 

語法1只把根據條件表達式得到的結果的存儲在JSP範圍中,語法2根據<x:if>標籤根據條件表達式的結果決定是否執行本體內的代碼。
【參數說明】:

I、select用來指定使用的XpathExperssion表達式。
II、var設定標量名用來存儲表達式的結果。
III、scope指定var存儲的JSP屬性範圍。

 

(2)、<x:choose>、<x:when>和<x:otherwise>標籤:同核心標籤庫的<c:choose>、<c:when>和<c:otherwise>標籤作用相似,只是使用的條件表達式不同。

<x;choose>是主標籤,<x:when>和<x:otherwise>放在<x:choose>標籤體內共同使用。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <x:choose>  
    2.     <x:when>  
    3.     <x:when>  
    4.     <x:otherwise>  
    5. </x:choose>  

 

其中只有<x:when>有屬性。

 

  • 【語法2】:
    Java代碼  收藏代碼
    1. <x:when select=”XPathExperssion”>  

 

(3)、x:forEach>標籤:實現了對xml文檔的遍歷。

 

  • 【語法】:
    Java代碼  收藏代碼
    1. <x:forEach select=”XPathExperssion”  
    2.     [var=”name”]  
    3.     [varStartus=”StartusName”]  
    4.     [begin=”begin”]  
    5.     [end=”end”]  
    6.     [step=”step”]>   
    7.     //標籤主體  
    8. </x:forEach>  

 

 

Java代碼  收藏代碼
  1. <x:forEach>標籤屬性說明:  

 

屬性名

說明

EL

類型

必須

默認值

select

指定使用的XPath語句

String

var

用於存儲表達式的結果

String

varStatus

用來存放循環到的變量的相關信息

String

begin

循環的起始位置

int

end

循環的終止位置

int

5.5、xml的文件轉換。

<x:transform>和<x:param>能輕易使用XSLT樣式包裝xml文件,成爲另一種顯示方式。

(1)、<x:transform>標籤:可以輕鬆的實現xml到XSLT的轉化。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <x:transform doc=”xmldoc”   
    2.     xslt=”XSLTStytlesheet”  
    3.     [docSystemId=”xmlsystemid”]  
    4.     [result=”result”]  
    5.     [var=”name”]  
    6.     [scope=”scopeName”]  
    7.     [xsltSystemId=”xsltsystemid”]  
    8. />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <x:transform doc=”xmldoc”   
    2.     xslt=”XSLTStytlesheet”  
    3.     [docSystemId=”xmlsystemid”]  
    4.     [result=”result”]  
    5.     [var=”name”]  
    6.     [scope=”scopeName”]  
    7.     [xsltSystemId=”xsltsystemid”]>   
    8.     <x:param/>  
    9. </x:transform>  

  • 【語法3】:
    Java代碼  收藏代碼
    1. <x:transform doc=”xmldoc”   
    2.     xslt=”XSLTStytlesheet”  
    3.     [docSystemId=”xmlsystemid”]  
    4.     [result=”result”]  
    5.     [var=”name”]  
    6.     [scope=”scopeName”]  
    7.     [xsltSystemId=”xsltsystemid”]>   
    8.     Xml文件內容  
    9.     <x:param/>  
    10. </x:transform>  

 

<x:transform>標籤屬性說明:

屬性名

說明

EL

類型

必須

默認值

doc

指定xml文件來源

String

xslt

轉化xml的樣式模板

String

docSystemId

xml文件的URI

String

xsltSystemId

xslt文件的URI

String

result

用來存儲轉換後的結果對象

java.xml.transform

var

org.w3c.dom.Documet類型存儲轉換後的結果

String

scope

var的屬性範圍

String

 

(2)、<x:param>標籤:用來爲<x:transform>標籤轉換參數。

 

  • 【語法1】:
    Java代碼  收藏代碼
    1. <x:param name=”name” value=”value” />  

  • 【語法2】:
    Java代碼  收藏代碼
    1. <x:param name=”name” value=”value”>Value</x:param>  

 

【參數說明】:

  • name指定參數的名稱。
  • value指定參數值。

 

參考:

http://baike.baidu.com/view/1488964.htm

http://www.cnblogs.com/jinzhengquan/archive/2011/02/13/1953150.html

http://www.blogjava.net/maverick1003/articles/236575.html

https://www.ibm.com/developerworks/cn/java/j-jstl0211/






















發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章