JSTL內容實在是有點多,這是第三篇專門討論它的文章了。雖然有點多,但它作為jsp開發中重要的一環,我們還是得耐心的繼續學習。本篇主要論述sql標籤庫,xml標籤庫。
雖然前面講過mvc開發模式,我們通常會將資料庫操作放在作為模型的javabean組件中,但是對於小型,簡單的應用,可能需要在jsp頁面直接編寫訪問資料庫的代碼。jstl提供了sql標籤庫,讓我們更方便的進行資料庫操作。要使用sql標籤庫,還得加上以下語句:
<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
sql標籤庫包含了<sql:setDataSource>,<sql:query>,<sql:param>,<sql:dateParam>,<sql:update>和<sql:transaction>6個標籤。
<sql:setDataSource>標籤
它主要設定資料來源。其文法格式如下:
<sql:setDataSource dataSource="datasource" url="jdbcurl"[driver="driverClassName"][user="username"][password="password"][var="varName"][scope="{page|request|session|application}"] />
<sql:query>標籤
<sql:query>標籤用於對資料庫進行查詢。它有三種文法格式。
1)無標籤體
<sql:query sql="sqlquery" var="varName"[scope="{page|request|session|application}"] [dataSource="datasource"][maxRows="maxRows"][startRow="startRow"] />
2)有標籤體,在標籤體中執行查詢參數
<sql:query sql="sqlquery" var="varName"[scope="{page|request|session|application}"] [dataSource="datasource"][maxRows="maxRows"][startRow="startRow"] > <sql:param> action</sql:query>
3)有標籤體,在標籤體中指定查詢語句和查詢參數
<sql:query var="varName"[scope="{page|request|session|application}"] [dataSource="datasource"][maxRows="maxRows"][startRow="startRow"] > query optional<sql:param> action</sql:query>
<sql:param>標籤
該標籤主要用於設定sql語句中標記為?的參數的值,類似於PreparedStatement的setXXX()方法的作用。它作為<sql:query>和<sql:update>的子標籤使用。文法格式如下:
<sql:param value="value" />
<sql:dateParam>標籤
該標籤用Date類型的值設定sql語句中標記為?的參數的值。它作為<sql:query>和<sql:update>的子標籤使用。文法格式如下:
<sql:dateParam value="value" [type="{timestamp|time|date}"] />
<sql:update>標籤
該標籤用於執行插入,更新或者刪除語句。它也有三種文法格式,在此給出第一種,其它可參考<sql:query>。文法格式如下:
<sql:update sql="sqlUpdate" [dataSource="dataSource"][var="varName"][scope="{page|request|session|application}"] />
<sql:transaction>標籤
該標籤用於為<sql:query>和<sql:update>子標籤建立交易處理上下文。其文法格式如下:
<sql:transaction [dataSource="dataSource"] [isolation=isolationlevel]> <sql:query> and <sql:update> statements</sql:transaction>isolationlevel = "read_committed | read_uncommitted | repeatable_read | serializable"
xml標籤庫
xml讓我們無需瞭解DOM和SAX,也可以對xml文檔進行操作。當然了,要使用它,也必須加上如下語句:
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
xml標籤庫基於XPath語言,我們可以在標籤的select屬性中使用XPath運算式(需要配置Xalan處理器,將xalan.jar複製到web應用程式的WEB-INF\lib目錄下)。
XPath引擎支援的運算式文法
運算式 |
映射 |
$foo |
pageContext.findAttribute("foo") |
$param:foo |
request.getParameter("foo") |
$header:foo |
request.getHeader("foo") |
$cookie:foo |
映射cookie的值到名字foo |
$initParam:foo |
application.getInitParameter("foo") |
$pageScope.foo |
pageContext.getAttribute("foo",PageContext.PAGE_SCOPE) |
$requestScope.foo |
pageContext.getAttribute("foo",PageContext.REQUSET_SCOPE) |
$sessionScope.foo |
pageContext.getAttribute("foo",PageContext.SESSION_SCOPE) |
$application.foo |
pageContext.getAttribute("foo",PageContext.APPLICATION_SCOPE) |
通過這些映射,jsp的範圍變數、請求參數、請求前序和cookies,還有上下文初始化參數都可以很容易在XPath運算式中使用。例如:/foo/bar[@x=$param:name]表示尋找foo元素節點下的bar子項目節點,並且bar元素的屬性x的值,等於http請求參數name的值。
xml標籤庫中的標籤按照功能可分為三類,xml核心操作,xml流程式控制制操作和xml轉換操作。
核心操作
xml核心操作包括<x:param>,<x:out>和<x:set>這三個標籤。
<x:param>標籤
<x:param>用於解析xml文檔。文法有兩種。
1)通過string或Reader對象來指定xml文檔
<x:parse doc="XMLDocument" {var="var" [scope="scope" varDom="var" [scopeDom="scope"]]}[systemId = "systemid"][filter="filter"] />
2)通過標籤體來指定XML文檔
<x:parse doc="XMLDocument" {var="var" [scope="scope" varDom="var" [scopeDom="scope"]]}[systemId = "systemid"][filter="filter"] >XML document to parse</x:parse>
scope的取值和之前的一樣。
<x:out>標籤
該標籤用於計算一個XPath運算式,並將計算的結果輸出到當前的JspWriter對象。該標籤的功能類似於<%=expression%>,或者核心標籤庫的<c:out>。文法格式如下:
<x:out select="XPathExpression" [escapeXml]="{true | false}" />
<x:set>標籤
該標籤用於計算一個XPath運算式,並將計算的結果儲存到一個範圍變數中。文法格式如下:
<x:out select="XPathExpression" [var="varName"]
[scope="{page|request|session|application}"] />
流程式控制制
包括<x:if>、<x:choose>、<x:when>、<x:otherwise>和<x:forEach>標籤。類似於核心庫中的<c:if>,<c:choose>,<c:forEach>標籤。不同的是,xml流程式控制制操作應用的是XPath運算式。
<x:if>標籤
標籤文法格式分為兩種。有標籤體和沒有標籤體。格式如下:
<x:if select="XPathExpression" [var="varName"][scope="{page|request|session|application}"] />
<x:choose>標籤
該標籤和<x:when>,<x:otherwise>一起實現互斥條件的執行。文法格式如下:
<x:choose> body content<x:when> and <x:otherwise></x:choose>
<x:when>標籤
文法格式如下:
<x:when select="XPathExpression" >body content</x:when>
<x:otherwise>標籤
該標籤文法格式如下:
<x:otherwise select="XPathExpression" >conditional block</x:otherwise>
<x:forEach>標籤
該標籤計算一個給定的XPath運算式,根據結果重複執行它的標籤體。文法格式如下:
<x:forEach var="varName" select="XPathExpression" varStatus="varStatusName" begin="begin" end="end" step="step"> 本體內容 </x:forEach>
轉換操作
xml轉換操作支援XSLT樣式表轉換XML文檔,包括<x:transform>和<x:param>標籤。
<x:transform>標籤
它使用指定的XSLT樣式轉換XML文檔。其文法格式有三種。
1)沒有標籤體
<x:transform doc="XMLDocument" xslt="XSLTStyleSheet" [docSystemId="XMLsystemId"][xsltSystemId="[xsltSystemId"][var="varName"][scope="{page|request|session|application}"][result="resultObject"] />
2),3)的格式請參考結合<sql:query>即可推斷出來。
<x:param>標籤
該標籤設定轉換的參數,在<x::transform>標籤中嵌套使用。文法格式為:
<x:param name="name" value="value" />
轉載請註明出處:http://blog.csdn.net/iAm333