当前位置:首页>>在线学习>>java培训

JSTL基础知识

繁简对译:[]  字体设置:[] 2008-10-09  阅读  次

第九章 JSTL基础知识

      JSTL的全名为JavaServerPages Standard Tag Library,即JSP标准标签库,它是由Apache基金组织的jakarta小组开发维护的,其主要功能是为JSP Web开发人员提供一个标准通用的标签库。开发人员可以利用这些标签取代JSP页面上的Java代码,从而提高程序的可读性、降低程序的维护难度。

9.1  JSTL简介

      JSTL标签是基于JSP页面的,这些标签可以插入在JSP代码中,在本质上JSTL也就是提前定义好了的一组标签,这些标签封装了不同的功能,当在页面上调用这个标签的时候,等于就是调用了封装起来的功能,这些标签可以在页面上输出内容、查询数据库、处理XML文档等,JSTL的标签库基本上可以分为五类,包括JSTL核心库、数据库标签库、XML操作标签库、国际化和格式标签库和函数标签库,其中在核心库包括基本的输入输出、流程控制、循环等功能;数据库标签库主要包括基本的数据库操作功能;XML标签库用来处理XML文档;国际化和格式标签库主要功能是处理国际化和文字格式的标准化。

9.2  JSTL开发环境简单配置

      如果要在项目中使用JSTL,就需要在配置JSTL的环境,JSTL环境配置非常简单,首先要下载JSTL,(具体内容请参照书。)

9.3  核心标签库

      JSTL核心库主要有输入输出、流程控制、迭代操作、URL操作等功能,如要要在JSP页面中使用核心库的标签,需要用taglib指令指明这个标签库的路径为。

      <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

9.3.1  <c:out>标签

      <c:out>标签的功能就相当于JSP中的out对象,可以在JSP页面上打印字符串,也可以打印一个标达式的值。使用语法如下。<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />或者使用下面这种格式。<c:out value="value" [escapeXml="{true|false}"]>

      default value

      </c:out>

9.3.2  <c:set>标签

      <c:set>的主要功能是把变量的值设置到JSP内置对象中,或者是设置到JavaBean的属性中。<c:set>的功能和JSP动作指令中的<jsp:setProperty>类似。(具体内容请参照书。)

9.3.3  <c:remove>标签

      <c:remove>标签执行的功能和<c:set>标签的功能正好相反,<c:remove>标签可以移除在<c:set>标签中设置的变量。具体使用语法如下。

      <c:remove var="varName" [scope="{ page|request|session|application }"] />

      在上面这行代码中,必需提供varName属性,指明需要移除哪个变量,而scope的属性则可有可无。

9.3.4  <c:if>标签

      JSP中的if功能一样,<c:if>的功能也是用来做条件判断,使用语法如下。

      <c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>

          结果为真时执行的操作代码

      </c:if>

9.3.5  <c:choose><c:when><c:otherwise>标签

      <c:choose>标签本身没有具体的功能,它仅仅是做为<c:when><c:otherwise>的父标签。为了方便理解,在这里把<c:choose><c:when><c:otherwise>合并为一节介绍。(具体内容请参照书。)

9.3.6  <c:forEach>标签

      <c:forEach>标签是一个迭代标签,它可以用来做循环的控制,可以循环遍历一个集合中的内容,这里的集合何以是数组、ListArrayListLinkedListsetVectorMap等常用集合对象。(具体内容请参照书。)

9.3.7  <c:forTokens>标签

      <c:forTokens>标签是JSTL种的另一个迭代循环标签,它可以用来对一个字符串进行迭代循环,这个字符串是用符号分开的。(具体内容请参照书。)

9.3.8  <c:import>标签

      <c:import>标签可以把其他动态或者静态的文件包含到当前的JSP页面,功能和JSP动作指令标签<jsp:include>类似,但是和<jsp:include>不同的是,<jsp:include>只可以包含当前Web应用的内容,而<c:import>标签不仅可以包含当前Web应用的内容,而且还可以包含其他Web应用的内容,包括其他网站的内容。(具体内容请参照书。)

9.3.9  <c:redirect>标签

      <c:redirect>标签可以把用户的请求从一个页面转向另一个页面,同JSPresponse内置对象的跳转功能类似,这个标签也用两种使用语法,(具体内容请参照书。)

9.3.10  <c:url>标签

      <c:url>标签主要用来产生一个URL,这个标签也有两种使用语法,第一种语法如下。(具体内容请参照书。)

9.3.11  <c:param>标签

      <c:param>标签的作用就是向一个页面传递一个参数,其使用语法如下。

      <c:param name="paramName" value="paramValue"/>

9.3.12  <c:catch>标签

      <c:catch>标签用来捕捉JSP页面产生的错误,和Java语言中的catch功能是类似的。其使用语法如下。

      <c:catch [var="varName"] >

         要捕捉异常的部分

      </c:catch>

9.4  数据库标签库

      数据库开发在JSP中占有非常重要的地位,JSTL也提供了对数据库操作的支持,通过是使用JSTL,数据库操作可以简化为简单的几个标签,大大提高了数据库开发的效率和程序的可维护性。在接下来的章节中将详细介绍JSTL数据库操作标签库。

9.4.1  <sql:setDataSource>标签

      <sql:setDataSource>标签可以用来设置数据源,其使用语法有两种,第一中语法如下。

      <sql:setDataSource driver="driverName" url="URL" [user="userName"] [password="password"] [var=varName] [scope="{page|request|session|application}" />

9.4.2  <sql:query>标签

      在上面我们使用<sql:setDataSource>标签已经取得了与数据库的连接,在这个数据连接的基础上就可以对数据库进行各种操作,其中对数据库的查询操作就要用到<sql:query>标签, <sql:query>标签的作用就是从数据库中取出指定的结果集,其中对数据库的操作还是依靠传递SQL语句作为参数。(具体内容请参照书。)

9.4.3  <sql:update>标签

      <sql:update>标签的功能是对数据库进行更新操作,和<sql:query>标签的用法类似,<sql:update>标签的使用方法也有两种形式,

9.4.4  <sql:param>标签

      在第七章讲解数据库开发的时候,已经详细介绍过PreparedStatement的使用方法,在使用PreparedStatement进行数据库操作的时候,可以使用类似select * from stores where stor_id=?这样的SQL语句,其中问号的位置取代的是一个参数,可以在后面动态设置,这样操作的好处在第七章已经详细介绍过。如果在JSTL中要实现这样的传递参数的功能,就需要用到<sql:param>标签。(具体内容请参照书。)

9.4.5  <sql:dateParam>标签

      <sql:dateParam>标签和<sql:param>标签的功能和用法完全相同,不同指出是<sql:dateParam>标签是用来设置日期格式的参数,其使用语法如下。

      <sql:dateParam value=value [type={timestamp|time|date}]/>

      其中type指明了参数的类型time是时间格式date是日期格式timestamp是日期加时间的完整格式。<sql:dateParam>标签的使用方法和<sql:param>标签是一样的,在这里不再赘述。

9.4.6  <sql:transaction>标签

      JSTL中,同样支持数据库操作的事务处理,在JSTL中是采用<sql:transaction>标签来实现这个功能的。(具体内容请参照书。)

9.5  XML操作标签库

      Java中可以使用SAX或者DOMAPI接口来操作XML文档,尽管这种操作功能非常强大而且灵活,但是要很快熟练掌握是有相当大难度的,在JSTL中提供了一组专门处理XML文档的标签,这些标签所提供的功能尽管非常有限,但是已经可以满足基本的XML文档处理需要,而且这些标签学习起来明显比掌握复杂的API接口要容易。接下来的章节中将介绍JSTL中用来处理XML文档的标签。

9.5.1  <x:parse>标签

      <x:parse>标签可以用来解析一个XML文档,这个标签也有两种基本用法,第一种用法的语法格式如下。<x:parse {doc=xmlDoc|xml=xmlDoc} {var=varName  [scope="{page|request|session|application}"]  |varDom=varName [scopeDom="{page|request|session|application}"] }  [systemId=systemId] [filter=filter]/>

9.5.2  <x:out>标签

      使用<x:parse>把一个XML文档解析以后,就可以使用<x:out>标签输出XML节点的值,<x:out>在这里的功能和<c:out>有点类似。<x:out>标签的使用语法如下。<x:out select=node [escapeXML={true|false}]/>

9.5.3  <x:set>标签

      <x:set>标签的功能和<c:set>标签的功能类似,这两个标签的功能都是把一个值设置到一个变量中,不同指出在于<x:set>标签是把XML中某个节点的内容赋值到一个变量。这个标签的使用语法如下。<x:set select=node var=varName [scope="{page|request|session|application}"]/ >

9.5.4  <x:if>标签

      <x:if>标签的功能和<c:if>的功能类似,只不错在这里判断的条件变成了XPath表达式,即判断在XML文档中是否有满足这个XPath表达式的节点。<x:if>标签也有两种使用格式,第一种用法的语法如下。<x:if  select=node var=varName [scope="{page|request|session|application}"]/><x:if>的另一种用法如下。<x:if  select=node var=varName [scope="{page|request|session|application}"]>    判断条件成立时执行的操作</x:if>

9.5.5  <x:choose>标签

      <x:choose>标签是<x:when><x:otherwise>的父标签,其使用方法和核心库中的对应标签<c:choose><c:when><c:otherwise>的使用方法类似,只不过在这里的判断条件变成了XPath的表达式,其他使用方法完全相同,在这里可以参考<c:choose><c:when><c:otherwise>的使用方法。

9.5.6  <x:forEach>标签

      使用<x:forEach>标签可以对XML文档进行遍历,这个标签的用法和<c:forEach>标签的用法非常相似,这个标签的使用语法如下。<x:forEach [var="varName"]  select=node [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>    循环体中要执行的内容

      </x:forEach>

9.6  其他标签

      除了上面介绍的核心库、数据库操作库和XML文档处理库,JSTL还有其他比较常用的标签库,包括处理国际化和格式的标签库、函数标签库,接下来的章节将简单介绍这两个标签库的基本知识。

9.6.1  国际化标签

      JSTL可以使用<fmt:setLocale>标签设置国家地区参数,从而可以使用本地化的表示方式。另外使用JSTL还可以自动根据Local的设置搜索资源文件,从而实现其他国际化的问题,这样就需要另外几个国际化标签,包括<fmt:bundle><fmt:setBundle><fmt:message><fmt:param><fmt:requestEncoding> 等,其中 <fmt:bundle><fmt:setBundle>这两个标签用来绑定资源文件,<fmt:message>用于显示资源文件,<fmt:param>用于传递参数,<fmt:requestEncoding>用来设置请求的字符编码。

9.6.2  数字格式标签

      JSTL也可以使用不同的格式来表示数字,可以用百分数或者是货币等,下面是一个综合国家地区设置和数字货币格式的示例程序。(具体内容请参照书。)

9.6.3  日期格式标签

      使用JSTL的标签,可以很方便的处理日期的格式,其中<fmt:formatDate>可以把日期格式的对象按照格式输出,而<fmt:parseDate>则可以把一个字符串解析成一个日期格式的对象。

9.6.4  函数标签库

      JSTL函数标签库就是一些常用的函数,在JSTL中把这些常用的函数封装成标签的形式,然后可以在JSP页面上进行方便的调用。(具体内容请参照书。)

9.7  自定义标签库

      JSTL自带的标签功能非常强大,但是仅仅这些标签并不能完全满足实际开发中的需要,在这个章节将介绍如何定制开发自己的标签库。开发自定义标签,首先需要开发标签所对应的功能类,其次要编写标签的描述文件tld,并把这个文件放在项目的WEB-INFO/目录下,然后才可以在JSP页面上调用自定义的标签。(具体内容请参照书。)

9.8  小结

      本章介绍了JSTL的基本知识,包括JSTL核心标签库、数据库操作标签库、XML文档处理标签库等,而且还介绍了自定义标签的开发过程,读者在实际的开发过程中可以参考本章的示例程序,在学习本章知识的基础上熟练运用JSTL提高开发速度和质量,并在自己的开发中尝试自定义标签库来简化开发的代码量。

 

打印 收藏 关闭