Servlet&JSP的那些事儿(二十)

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

你可能感兴趣的:(Servlet&JSP的那些事儿(二十))