7
第七章
JSTL 1.1 JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为1.1版。JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性、维护性和方便性。
本章中,笔者将详细介绍如何使用JSTL中各种不同的标签,将依序介绍条件、循环、URL、U18N、XML、SQL等标签的用法,让读者对JSTL有更深层的了解,并且能够学会如何使用JSTL。本章将分6节来介绍:
7-1 JSTL 1.1简介
7-2 核心标签库 (Core tag library)
7-3 I18N格式标签库 (I18N-capable formatting tags library)
7-4 SQL标签库 (SQL tag library)
7-5 XML标签库 (XML tag library)
7-6 函数标签库 (Functions tag library)
JSP2.0技术手册
第七章 JSTL 1.1
126JSP2.0技术手册
7-1 JSTL 1.1简介
JavaServer Pages Standard Tag Library (1.1 ),它的中文名称为JSP 标准标签函数库。JSTL 是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML 文件剖析、数据库查询及国际化和文字格式标准化的应用等。从表7-1可以知道,JSTL 所提供的标签函数库主要分为五大类:
(1) 核心标签库 (Core tag library)
(2) I18N 格式标签库 (I18N-capable formatting tag library)
(3) SQL 标签库 (SQL tag library)
(4) XML 标签库 (XML tag library)
(5) 函数标签库 (Functions tag library)
表7-1 JSTL
前置名称URI 范 例 核心标签库
c java.sun/jsp/jstl/core <c:out> I18N 格式标签库
fmt java.sun/jsp/jstl/xml <fmt:formatDate> SQL 标签库
sql java.sun/jsp/jstl/sql <sql:query> XML 标签库
el表达式获取值xml java.sun/jsp/jstl/fmt <x:forBach> 函数标签库 fn java.sun/jsp/jstl/functions <fn:split>
另外,JSTL 也支持EL(Expression Language)语法,例如:在一个标准的JSP 页面中可能会使用到如下的写法:
<%= User().getPhoneNumber() %>
使用JSTL 搭配传统写法会变成这样: <c_rt:out value="<%= User( ).getPhoneNumber( ) %>" />
使用JSTL 搭配EL ,则可以改写成如下的形式:
<c:out value="${userList.user.phoneNumber}" />
虽然对网页设计者来说,假如没有学过Java Script 或者是第一次看到这种写法时,可能会搞不太懂,但是与Java 语法相比,这应该更加容易学习。 7-1-1 安装使用JSTL 1.1
JSTL 1.1必须在支持Servlet 2.4且JSP 2.0以上版本的Container 才可使用。JSTL 主要由Apache 组织的Jakarta Project 所实现,因此读者可以到/builds/jakarta-taglibs/releases/standard/ 下载实现好的JSTL 1.1,或者直接使用本书光盘中JSTL 1.1,软件名称为:jakarta-taglibs-standard-current.zip 。
下载完后解压缩,可以发现文件夹中所包含的内容如图7-1所示:
7-1 JSTL 1.1简介127
图7-1 jakarta-taglibs-standard-1.1.0-B1的目录结构
将lib中的jstl.jar、standard.jar复制到Tomcat的WEB-INF\lib中,然后就可以在JSP网页中使用JSTL了。除了复制.jar文件外,最好也把tld文件的目录也复制到WEB-INF中,以便日后使用。
注意
lib目录下,除了jstl.jar和standard.jar之外,还有old-dependencies目录,这目录里面的东西是让之前JSTL 1.0的程序也能够在JSTL 1.1环境下使用。tld目录下有许多TLD文件,其中大部分都是JSTL 1.0的TLD文件,例如:c-1_0.tld和c-1_0-rt.tld。
下面写一个测试用的范例程序HelloJSTL.jsp,程序主要是显示浏览器的版本和欢迎的字符串。
HelloJSTL.jsp
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="java.sun/jsp/jstl/core" %>
<html>
<head>
<title>测试你的第一个使用到JSTL的网页</title>
</head>
<body>
<c:out value="欢迎测试你的第一个使用到JSTL的网页"/>
</br>你使用的浏览器是:</br>
<c:out value="${header['User-Agent']}"/>
<c:set var="a" value="David O'Davies" />
<c:out value="David O'Davies" escapeXml="true"/>
</body>
</html>
在HelloJSTL.jsp的范例里,笔者用到核心标签库(Core)中的标准输出功能和EL的header 隐含对象。若要在JSP网页中使用JSTL时,一定要先做下面这行声明:
<%@ taglib prefix="c" uri="java.sun/jsp/jstl/core" %> 这段声明表示我将使用JSTL的核心标签库。一般而言,核心标签库的前置名称(prefix)都
JSP2.0技术手册
第七章JSTL 1.1
128
为c,当然你也可以自行设定。不过uri此时就必须为java.sun/jsp/jstl/core。
注意
JSTL 1.0中,核心标签库的uri默认为java.sun/jstl/core,比JSTL 1.1少一个jsp/ 的路径。因为JSTL 1.1同时支持JSTL 1.0和1.1,所以假若核心标签库的uri为java.sun/jstl/core,则将会使用到JSTL 1.0的核心标签库。
接下来使用核心标签库中的out标签,显示value的值。${header['User-Agent']}表示取得表头里的User-Agent的值,即有关用户浏览器的种类。
<c:out value="欢迎测试你的第一个使用到JSTL的网页" />
<c:out value="${header['User-Agent']}" />
HelloJSTL.jsp的执行结果如图7-2所示。
图7-2 HelloJSTL.jsp的执行结果
假若读者想要自定义taglib的uri时,那就必须在l中加入设定值。例如:假若uri 想要改为www.javaworld.tw/jstl/core时,l就必须加入如下设定:
<web-app>
:
<jsp-config>
<taglib>
<taglib-uri>www.javaworld.tw/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/tld/c.tld</taglib-location>
</taglib>
</jsp-config>
:
</web-app>
在上面的设定中,<taglib-uri>主要是设定标签库的URI;而<taglib-location>则是用来设定标签对应的TLD文件。因此,使用<%@ taglib %>指令时,可以直接写成如下语句:
<%@ taglib prefix="c" uri="www.javaworld.tw/jsp/jstl/core" %> 7-1-2 JSTL 1.1 VS. JSTL 1.0
JSTL 1.0更新至JSTL 1.1时,有以下几点不同:
JSP2.0技术手册
7-1 JSTL 1.1简介129
(1) EL原本是定义在JSTL 1.0的,现在EL已经正式纳入JSP 2.0标准规范中,所以在JSTL 1.1规范中,已经没有EL的部分,但是JSTL依旧能使用EL。
(2) JSTL 1.0中,又分EL和RT两种函数库,到了JSTL 1.1之后,已经不再分这两种了。以下说明EL和RT的差别:
EL
完全使用Expression Language
简单
建议使用
RT
使用Scriptlet
Java语法
供不想转换且习惯旧表示法的开发者使用
笔者在此强烈建议大家使用EL来做,简单又方便。
(3) JSTL 1.1新增函数(functions)标签库,主要提供一些好用的字符串处理函数,例如:fn:contains、fn:containsIgnoreCase、fn:endsWith、fn:indexOf、fn:join、fn:length、fn:replace、fn:split、fn:startsWith和fn:substring 等等。
除了上述三项比较大的改变之外,还包括许多小改变,在此不多加说明,有兴趣的读者可以去看JSTL 1.1附录B“Changes”部分,那里有更详尽的说明。
7-1-3 安装standard-examples
当解压缩jakarta-taglibs-standard-current.zip后,文件夹内(见图7-1)有一个standard-examples.war 的文件,将它移至Tomcat的webapps后,重新启动Tomcat会发现,在webapps目录下多了一个standard-examples的目录。接下来我们打开IE,在URL位置上输入localhost:8080/ standard-examples,你将会看到图7-3所示的画面。
这个站台有很多JSTL的范例,它包括以下几部分:
General Purpose Tags
Conditional Tags
Iterator Tags
Import Tags
I18N & Formatting Tags
XML Tags
SQL Tags
Functions
Tag Library Validators
Miscellaneous
JSP2.0技术手册
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论