购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

5.4 JSTL标签库

JSP标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作及数据库访问等。

这些标记库实现了大量服务器端Java应用程序常用的基本功能,大大提高了Web应用程序的开发效率,同时也提高了Web应用程序的可阅读性和可维护性。

目前最新的JSTL版本为1.1,必须在支持Servlet 2.4/JSP 2.0的容器(如Tomcat 6.x)中才能运行,读者只要将JSTL的jstl.jar和standard.jar复制到自己Web应用程序的WEB-INF/lib目录下便可使用JSTL了。

5.4.1 EL简介

EL(Expression Language)表达式语言是JSP 2.0的一个主要的组件,在JSTL中被广泛使用。EL使用十分方便,语法也很简单,已成为标准规范之一。

下面我们把传统的JSP代码段与EL做一个比较:

从这里可看出,EL是以“ ${ ”开始,“} ”结束的,通过“.”或“[]”来存取数据,例如${param.name} 或者${param['name']}就表示读取请求参数name的值。

1.EL运算符(见表5-7)

表5-7 EL运算符

用法举例:

半径为10厘米的圆的面积为:${10*10*3.14}平方厘米!

1000 除以 66 的余数为:${1000%66}

变量name是否为空:${empty name}

2.EL隐含对象(见表5-8)

表5-8 EL隐含对象

用法举例:

当前SessionID为:${pageContext.session.id}

当前请求协议为:${pageContext.request.protocol}

请求参数name的值为:${param['name']}

当前Host为:${header.Host}

5.4.2 核心标签库

核心标签库(Cor)主要为基本输入输出、流程控制、迭代操作和URL操作提供了定制标签。这些标签不仅可以由页面设计人员直接利用,而且还为与其他JSTL库相结合从而提供更复杂的表示逻辑奠定了基础。

凡是要用到核心标签库的JSP页面,均要使用<%@ taglib %>指令设定prefix 和uri的值。例如:

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

下面对核心标签库中的标签一一进行介绍。

1.<c:set>标签的用法

功能描述:用于在JSP中保存数据。

语法格式 1:将value的值储存至指定范围的变量中。

语法格式2:将value的值存储至指定对象的属性中。

用法举例:

<c:set value='10' var='r' scope='page'/>

<c:set value='米' var='unit' scope='page'/>

<c:set value='${pageScope.r*pageScope.r*3.14}' var='area' scope='page'/>

半径为${pageScope.r}${pageScope.unit}的圆面积为:${pageScope.area}平方${pageScope.unit}

输出结果:“半径为 10 米的圆面积为:314.0 平方米”

2.<c:out>标签的用法

功能描述:用于在JSP中显示数据。

语法格式:

用法举例:

计算单位:<c:out value='${pageScope.unit}' default='厘米'/>

圆的半径:<c:out value='${pageScope.r}' default='0'/>

圆的面积:<c:out value='${pageScope.area}' default='0'/>

3.<c:remove>标签的用法

功能描述:用于在JSP中移除变量。

语法格式:

用法举例:

<c:remove var='r' scope='page'/>

<c:remove var='unit' scope='page'/>

<c:remove var='area' scope='page'/>

4.<c:catch>标签的用法

功能描述:用于在JSP中捕获异常,并将异常信息保存于指定的变量中。

语法格式:

用法举例:

输出结果为:“错误信息为:java.lang.NullPointerException”

5.<c:if>标签的用法

功能描述:用于在JSP中进行条件判断的流程控制,作用与if一样。

语法格式:

用法举例(if.jsp):

运行结果如图5-6所示。

图5-6 if.jsp运行效果

6.<c:choose>、<c:when>和<c:otherwise>标签的用法

功能描述:<c:choose>、<c:when>和<c:otherwise>配套使用在JSP中进行条件分支的流程控制。其中<c:when>和<c:otherwise>必须放置在<c:choose>标签内,而且<c:when>必须位于<c:otherwise>之前。每个<c:when>标签代表一个条件分支,当所有条件都不满足时将执行<c:otherwise>标签体中的代码段。

语法格式:

用法举例choose.jsp:

运行效果如图5-7所示。

图5-7 choose.jsp运行效果

7.<c:forEach>标签的用法

功能描述:用于在JSP中进行循环控制,当条件成立时循环执行<c:forEach>标签体中的代码段,常用于遍历集合对象中的成员。

语法格式 1:遍历集合对象中的成员。

语法格式 2:循环指定次数。

用法举例forEach.jsp:

运行结果如图5-8所示。

8.<c:forTokens>标签的用法

功能描述:用于在JSP中遍历一个字符串中所有由定义符号(delimiters)所分隔的成员,当条件成立时循环执行<c:forTokens>标签体中的代码段。

语法格式:

图5-8 forEach.jsp运行效果

用法举例(forTokens.jsp):

运行结果如图5-9所示。

图5-9 forTokens.jsp运行效果

9.<c:import>标签的用法

功能描述:用于将一个静态或动态文件包含到该JSP 网页中,所包含的对象不再局限于本Web应用程序,其他Web应用程序中的文件或FTP资源同样可以被包含进来。

语法格式 1:包含文件时不传递请求参数。

语法格式 2:包含文件时传递请求参数。

用法举例(import.jsp):

运行结果如图5-10所示。

图5-10 import.jsp运行效果

10.<c:url>标签的用法

功能描述:在JSP网页中产生一个URL。

语法格式 1:产生不传递请求参数的URL。

语法格式 2:产生传递请求参数的URL。

用法举例(url.jsp):

运行结果如图5-11所示。

图5-11 url.jsp运行效果

11.<c:redirect>标签的用法

功能描述:在JSP 网页中实现请求转发。

语法格式 1:产生不传递请求参数的请求转发。

语法格式 2:产生传递请求参数的请求转发。

用法举例(redirect.jsp):

运行结果如图5-12所示。

图5-12 redirect.jsp运行效果

5.4.3 I18N标签库

I18N标签库主要为Web应用程序的国际化、消息和数字日期的格式化提供了定制标签。凡是要用到核心标签库的JSP页面,均要使用<%@ taglib %>指令设定prefix 和uri 的值。例如:

<%@ taglib prefix='fmt' uri='http://java.sun.com/jsp/jstl/fmt' %>

下面将对I18N标签库中的标签一一进行介绍

1.<fmt:formatNumber>标签的用法

功能描述:在JSP 网页中实现格式化数字。

语法格式:

用法举例(formatNumber.jsp):

运行结果如图5-13所示。

图5-13 formatNumber.jsp运行效果

2.<fmt:parseNumber>标签的用法

功能描述:在JSP网页中实现将字符串形式的数字、货币或百分比转换成数字。

语法格式:

用法举例(parseNumber.jsp):

运行结果如图5-14所示。

图5-14 parseNumber.jsp运行效果

3.<fmt:formatDate>标签的用法

功能描述:在JSP 网页中实现格式化时间和日期。

语法格式:

用法举例(formatDate.jsp):

运行结果如图5-15所示。

图5-15 formatDate.jsp运行效果

4.<fmt:parseDate>标签的用法

功能描述:在JSP网页中将字符串形式的时间和日期转换成日期时间类型。

语法格式:

用法举例parseDate.jsp:

运行结果如图5-16所示。

图5-16 parseDate.jsp运行效果

5.<fmt:setTimeZone>标签的用法

功能描述:在JSP 网页中设置默认时区。

语法格式:

用法举例(setTimeZone.jsp):

运行效果如图5-17所示。

图5-17 setTimeZone.jsp运行效果

6.<fmt:timeZone>标签的用法

功能描述:在JSP网页中为该标签体内的代码段设置时区。

语法格式:

用法举例(timeZone.jsp):

运行效果如图5-18所示。

图5-18 timeZone.jsp运行效果

7.<fmt:setLocale>标签的用法

功能描述:在JSP 网页中设置语言地区。

语法格式:

用法举例(setLocale.jsp):

运行效果如图5-19所示。

图5-19 setLocale.jsp运行效果

8.<fmt:requestEncoding>标签的用法

功能描述:在JSP 网页中设置请求所采用的编码方式,等价于JSP中的request. setCharacter Encoding(String encoding)。

语法格式:

用法举例:

<fmt:requestEncoding value='gb2312'/>

9.<fmt:setBundle>标签的用法

功能描述:设置默认的消息资源。

语法格式:

通常可将<fmt:setBundle>标签搭配<fmt:setLocale>标签使用,完成消息国际化。例如,有一个默认的信息资源文件MessageResource.properties:

hello = Hello,{0}!

today = Today is {0}!

为实现国际化,可以分别为不同的语言地区创建相应的资源文件,如针对英语美国地区的MessageResource_en_US.properties:

hello = Hello,{0}!

today = Today is {0}!

针对中(中国)地区的MessageResource_zh_CN.properties:

注:我们可以先编辑一个包含中文消息的资源文件,如:

MessageResource_temp.properties:

hello = {0},你好!

today = 今天是 {0}!

然后在DOS命令窗口输入如下命令:

native2ascii –encoding gb2312 MessageResource_temp.properties MessageResource_zh_CN.properties

就可以得到上面的MessageResource_zh_CN.properties文件了!

这样一来,我们的程序就可以满足不同的语言地区的本地化要求,实现消息国际化了。

用法举例:

<fmt:setLocale value='zh_CN'/>

<fmt:setBundle basename='MessageResource'/>

10.<fmt:message>标签的用法

功能描述:在指定的消息资源中按关键字取出相应的消息内容。

语法格式 1:取出无动态参数的消息内容。

语法格式 2:取出有动态参数的消息内容。

用法举例(message.jsp):

运行效果如图5-20所示。

图5-20 message.jsp运行效果

11.<fmt:param>标签的用法

功能描述:在从消息资源中取出消息内容时,为消息内容设置动态参数。

语法格式:

12.<fmt:bundle>标签的用法

功能描述:为该标签体内的代码段设置一个消息资源。

语法格式:

用法举例(bundle.jsp):

运行效果如图5-21所示。

图5-21 bundle.jsp运行效果

5.4.4 SQL标签库

SQL标签库主要为常见的数据库操作,如查询、更新及设置数据库连接等提供了定制标签,在这里有一点必须明白,SQL标签库没有提供连接池功能,因此在较大型的数据库应用开发项目中,不宜使用。

凡是要用到SQL标签库的JSP页面,均要使用<%@ taglib %>指令设定prefix 和uri 的值。例如:

<%@ taglib prefix='sql' uri='http://java.sun.com/jsp/jstl/sql' %>

下面将对SQL标签库中的标签一一进行介绍。

1.<sql:setDataSource>标签的用法

功能描述:在JSP 网页中用来设置数据源。

语法格式 1:直接使用已存在的数据源。

语法格式 2:通过JDBC与数据库建立连接。

用法举例:

2.<sql:query>标签和<sql:param>标签的用法

功能描述:在JSP 网页中用来查询数据库。

语法格式 1:将SQL语句当做<sql:query>标签的属性值。

语法格式 2:将SQL语句放在<sql:query>标签体内。

语法格式 3:使用<sql:param>传递动态参数的数据库查询。

用法举例(query.jsp):

运行效果如图5-22所示。

图5-22 query.jsp运行效果

3.<sql:update>标签的用法

功能描述:在JSP 网页中用来更新数据库中的数据。

语法格式 1:将SQL语句当做<sql:update>标签的属性值。

语法格式 2:将SQL语句放在<sql:update>标签体内。

语法格式 3:使用<sql:param>传递动态参数的数据库更新。

用法举例:

4.<sql:transaction>标签的用法

功能描述:在JSP 网页中用来管理操作数据库时的事务。

语法格式:

用法举例:

5.4.5 XML标签库

XML标签库主要为常见的XML文件操作,如为解析XML文件、取出XML中的字符串等提供了定制标签。凡是要用到XML标签库的JSP页面,均要使用<%@ taglib %>指令设定prefix 和uri的值。例如:

<%@ taglib prefix='x' uri='http://java.sun.com/jsp/jstl/xml' %>

下面我们以test.xml(见例程5-16)文件为例对XML标签库中的标签进行介绍。

例程5-16 test.xml

1.<x:parse>标签的用法

功能描述:在JSP网页中用来解析XML文件。

语法格式 1:解析指定的XML文件

语法格式 2:解析标签体内的XML内容

用法举例:

<c:import var='XMLDoc' url='test.xml'/>

<x:parse doc='${XMLDoc}' var='result'/>

2.<x:forEach>标签的用法

功能描述:在JSP网页中用来循环读取XML的某个元素中的数据。

语法格式:

3.<x:out>标签的用法

功能描述:在JSP 网页中用来读取XML中某个元素中的字符串。

语法格式:

用法举例:

<x:out select='$result//linkman/email'/>

4.<x:set>标签的用法

功能描述:在JSP网页中用来将读取到的XML内容存储到指定变量中。

语法格式:

5.XML标签综合应用实例

下面创建一个解析test.xml (见例程5-16)的JSP页面parseXML.jsp(见例程5-17)综合演示XML标签库中各标签的具体用法。

例程5-17 parseXML.jsp

运行效果如图5-23所示。

图5-23 parseXML.jsp运行效果

5.4.6 函数标签库

函数标签库主要为常见的字符串操作提供了定制标签。

常用的函数列表见表5-9。

表5-9 函数标签库中的常用函数

凡是要用到函数标签库的JSP页面,均要使用<%@ taglib %>指令设定prefix 和uri 的值。例如:

<%@ taglib prefix='fn' uri='http://java.sun.com/jsp/jstl/functions' %>

下面创建一个function.jsp(见例程5-18)用于演示函数标签库中常用函数的具体用法。

例程5-18 function.jsp

运行效果如图5-24所示。

图5-24 function.jsp运行效果

本实例的完整源代码请参考配套光盘的“源代码”部分。 8AghenVh1/N5HBNlE8wmzYtXtg2n/hU+CEMotZEPj4HevCu2oblSjHrMD3KZrlxZ

点击中间区域
呼出菜单
上一章
目录
下一章
×