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了。
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}
核心标签库(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运行效果
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运行效果
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 网页中用来管理操作数据库时的事务。
语法格式:
用法举例:
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-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运行效果
本实例的完整源代码请参考配套光盘的“源代码”部分。