在
								
										JSP
								
								页面中,使用标签库代替传统的
								
										Java
								
								片段语言来实现页面的显示逻辑已经不是新技术了,然而,由自定义标签很容易造成重复定义和非标准的实现。鉴于此,出现了
								
										JSTL
								
								(
								
										JSP Standard Tag Library
								
								)。大多数
								
										JSP
								
								页面逻辑提供了实现的
								
										JSTL
								
								技术,该技术本身就是一个标签库。
								
										
										
								
						
						
								
										Sun
								
								公司
								
										Java
								
								规范标准的
								
										JSTL
								
								由
								
										apache jakarta
								
								
										组织负责维护。作为开源的标准技术,它一直在不断地完善。
								
								
										JSTL
								
								
										的发布包有两个版本:
								
								
										Standard-1.0 Taglib
								
								
										、
								
								
										Standard-1.1 Taglib
								
								
										,它们在使用时是不同的。
								
								
										
												
												
										
								
						
						
								
										q         
								
								
										Standard-1.0 Taglib
								
								(
								
										JSTL1.0
								
								)支持
								
										Servlet2.3
								
								和
								
										JSP1.2
								
								规范,
								
										Web
								
								应用服务器
								
										Tomcat4
								
								支持这些规范,而它的发布也在
								
										Tomcat 4.1.24
								
								测试通过了。
								
										
										
								
						
						
								
										q         
								
								
										Standard-1.1 Taglib
								
								(
								
										JSTL1.1
								
								)支持
								
										Servlet2.4
								
								和
								
										JSP2.0
								
								规范,
								
										Web
								
								应用服务器
								
										Tomcat5
								
								支持这些规范,它的发布在
								
										Tomcat 5.0.3
								
								测试通过了。
								
										
										
								
						
						
								在本章的介绍中,将以由
								
										Sun
								
								发布的
								
										Standard-1.1 Taglib
								
								标签库为主,而
								
										apache jakarta
								
								组织发布的开源标签库,可以从
								
										http://jakarta.apache.org/taglibs/
								
								找到所需要的帮助。
								
										Sun
								
								发布的标准
								
										JSTL1.1
								
								标签库有以下几个标签:
								
										
										
								
						
						
								
										q         
								
								核心标签库:包含
								
										Web
								
								应用的常见工作,比如:循环、表达式赋值、基本输入输出等。
								
										
										
								
						
						
								
										q         
								
								国际化标签库:用来格式化显示数据的工作,比如:对不同区域的日期格式化等。
								
										
										
								
						
						
								
										q         
								
								数据库标签库:可以做访问数据库的工作。
								
										
										
								
						
						
								
										q         
								
								
										XML
								
								标签库:用来访问
								
										XML
								
								文件的工作,这是
								
										JSTL
								
								标签库的一个特点。
								
										
										
								
						
						
								
										q         
								
								函数标签库:用来读取已经定义的某个函数。
								
										
										
								
						
						
								此外,
								
										JSTL
								
								还提供了
								
										EL
								
								表达式语言(
								
										Expression Language
								
								)来进行辅助的工作。
						
						
								
										JSTL
								
								
										
												标签
										库由标签库和
								
										EL
								
								表达式语言两个部分组成。
								
										EL
								
								在
								
										JSTL 1.0
								
								规范中被引入,当时用来作为
								
										Java
								
								表达式来工作,而该表达式必须配合
								
										JSTL
								
								的标签库才能得到需要的结果。
								
										
										
								
						
						
								
										说明:在
										
												JSTL 1.1
										
										规范中,
										
												JSP2.0
										
										容器已经能够独立的理解任何
										
												EL
										
										表达式。
										
												EL
										
										可以独立出现在
										
												JSP
										
										页面的任何角落。本文随后的内容将以
										
												JSTL 1.1
										
										规范作为介绍的重点。
										
												
												
										
								
						
						
						
								
										EL
								
								是从
								
										JavaScript
								
								脚本语言得到启发的一种表达式语言,它借鉴了
								
										JavaScript
								
								多类型转换无关性的特点。在使用
								
										EL
								
								从
								
										scope
								
								中得到参数时可以自动转换类型,因此对于类型的限制更加宽松。
								
										Web
								
								服务器对于
								
										request
								
								请求参数通常会以
								
										String
								
								类型来发送,在得到时使用的
								
										Java
								
								语言脚本就应该是
								
										request.getParameter(“XXX”)
								
								,这样的话,对于实际应用还必须进行强制类型转换。而
								
										EL
								
								就将用户从这种类型转换的繁琐工作脱离出来,允许用户直接使用
								
										EL
								
								表达式取得的值,而不用关心它是什么类型。
								
										
										
								
						
						
								下面的示例就是一个
								
										EL
								
								表达式,见例
								
										9.1
								
								。
								
										
										
								
						
						
								例
								
										9.1
								
								:简单
								
										EL
								
								表达式
								
										
										
								
						
						
								
										
												<%@ page contentType="text/html; charset=UTF-8"%>
										
								
						
						
								
										
												<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
										
								
						
						
								
										
												<html>
										
								
						
						
								
										
												
														  <body>
										
								
						
						
								
										
												
														    ${sampleValue + 1} <br>
										
								
						
						
								
										
												
														  </body>
										
								
						
						
								
										
												</html>
										
								
						
						
								这个示例将在
								
										JSP
								
								页面显示为“
								
										1
								
								”,
								
										EL
								
								表达式必须以“
								
										${XXX}
								
								”来表示,其中“
								
										XXX
								
								”部分就是具体表达式内容,“
								
										${}
								
								”将这个表达式内容包含在其中作为
								
										EL
								
								表达式的定义。本示例可以在满足
								
										JSP2.0
								
								规范的任何
								
										Web
								
								应用服务器中使用。
								
										
										
								
						
						
						
								一个
								
										EL
								
								表达式包含变量和操作符两个内容。任何存在于
								
										JSP
								
								作用范围的
								
										JavaBean
								
								都可以被转化成
								
										EL
								
								表达式来使用,它所包含的默认变量如下:
								
										
										
								
						
						
								
										
												1
										
										.默认变量
										
												pageScope
										
										、
										
												requestScope
										
										、
										
												sessionScope
										
										、
										
												applicationScope
										
								
						
						
								这
								
										4
								
								个默认变量包含
								
										Scope
								
								作用范围的参数集合,相当于被保存在
								
										java.util.Map
								
								中的某个参数。下面看简单的示例
								
										9.2
								
								:
								
										
										
								
						
						
								例
								
										9.2
								
								:使用
								
										sessionScope
								
								变量的
								
										EL
								
								表达式
								
										
										
								
						
						
								
										
												<%request.getSession().setAttribute("sampleValue", new Integer(10));%>
										
								
						
						
								
										
												${sessionScope.sampleValue}
										
								
						
						
								取得保存在
								
										Session
								
								中参数的
								
										sessionScope
								
								变量的
								
										EL
								
								表达式,“
								
										.
								
								”是
								
										property
								
								访问操作符,在这里表示从
								
										Session
								
								中取得“键”为“
								
										sampleValue
								
								”的参数,并显示出来。显示结果为“
								
										10
								
								”。
								
										
										
								
						
						
								
										
												2
										
										.默认变量
										
												param
										
										、
										
												paramValues
										
								
						
						
								这两个默认变量包含请求参数的集合,
								
										param
								
								表明请求包含的参数为单一控件,
								
										paramValues
								
								表明请求包含的参数为控件数组。下面看一个简单示例
								
										9.3
								
								:
								
										
										
								
						
						
								例
								
										9.3
								
								:提交请求的页面和接受的页面
								
										
										
								
						
						
								
										
												<%@ page contentType="text/html; charset=UTF-8"%>
										
								
						
						
								
										
												<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
										
								
						
						
								
										
												<html>
										
								
						
						
								
										
												
														  <body>
										
								
						
						
								
										
												
														  
														     <form action="SampleJsp.jsp">
										
								
						
						
								
										
												
														    <input type="text" name="sampleValue" value="10">
										
								
						
						
								
										
												
														    <input type="text" name="sampleValue" value="11">
										
								
						
						
								
										
												
														    <input type="text" name="sampleValue" value="12">
										
								
						
						
								
										
												
														    <input type="text" name="sampleSingleValue" value="SingleValue">
										
								
						
						
								
										
												
														    <input type="submit" value="Submit">
										
								
						
						
								
										
												
														    </form>
										
								
						
						
								
										
												
														  </body>
										
								
						
						
								
										
												</html>
										
								
						
						
								在这个页面中定义了两组控件,控件名为“
								
										sampleValue
								
								”的是一套控件数组,控件名为“
								
										sampleSingleValue
								
								”的是单一控件,通过递交将请求参数传送到
								
										SampleJsp.jsp
								
								。
								
										
										
								
						
						
								
										
												<%@ page contentType="text/html; charset=UTF-8"%>
										
								
						
						
								
										
												<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
										
								
						
						
								
										
												<html>
										
								
						
						
								
										
												
														  <body>
										
								
						
						
								
										
												
														    ${paramValues.sampleValue[2]} <br>
										
								
						
						
								
										
												
														    ${param.sampleSingleValue} <br>
										
								
						
						
								
										
												
														  </body>
										
								
						
						
								
										
												</html>
										
								
						
						
								这是请求转发到的页面,通过
								
										EL
								
								表达式的
								
										paramValues
								
								变量得到控件数组中最后一个控件的递交参数,通过
								
										EL
								
								表达式的
								
										param
								
								变量得到单一控件的递交参数。控件数组参数的
								
										EL
								
								表达式使用“
								
										[]
								
								”来指定数组下标。本示例将显示控件数组中最后一个控件的值“
								
										12
								
								”和单一控件的值“
								
										SingleValue
								
								”。
								
										
										
								
						
						
								
										
												3
										
										.默认变量
										
												header
										
										、
										
												headerValues
										
								
						
						
								这两个默认变量包含请求参数头部信息的集合,
								
										header
								
								变量表示单一头部信息,
								
										headerValues
								
								则表示数组型的头部信息。
								
										
										
								
						
						
								
										
												4
										
										.默认变量
										
												cookie
										
								
						
						
								包含所有请求的
								
										cookie
								
								集合,集合中的每个对象对应
								
										javax.servlet.http.Cookie
								
								。
								
										
										
								
						
						
								
										
												5
										
										.默认变量
										
												initParam
										
								
						
						
								包含所有应用程序初始化参数的集合。
								
										
										
								
						
						
								
										
												6
										
										.默认变量
										
												pageContext
										
								
						
						
								等价于
								
										page
								
								环境类
								
										javax.servlet.jsp.PageContext
								
								的实例,用来提供访问不同的请求参数。
								
										
										
								
						
						
								
										11
								
								个默认变量几乎包含了
								
										Web
								
								应用的所有基本操作,若一个表达式不使用这些变量而直接使用参数名,那么就采用就近原则。该表达式将使用最近取得的参数值。