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) |
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