JSTL参考手册.docx

上传人:b****2 文档编号:3541000 上传时间:2023-05-06 格式:DOCX 页数:92 大小:1.26MB
下载 相关 举报
JSTL参考手册.docx_第1页
第1页 / 共92页
JSTL参考手册.docx_第2页
第2页 / 共92页
JSTL参考手册.docx_第3页
第3页 / 共92页
JSTL参考手册.docx_第4页
第4页 / 共92页
JSTL参考手册.docx_第5页
第5页 / 共92页
JSTL参考手册.docx_第6页
第6页 / 共92页
JSTL参考手册.docx_第7页
第7页 / 共92页
JSTL参考手册.docx_第8页
第8页 / 共92页
JSTL参考手册.docx_第9页
第9页 / 共92页
JSTL参考手册.docx_第10页
第10页 / 共92页
JSTL参考手册.docx_第11页
第11页 / 共92页
JSTL参考手册.docx_第12页
第12页 / 共92页
JSTL参考手册.docx_第13页
第13页 / 共92页
JSTL参考手册.docx_第14页
第14页 / 共92页
JSTL参考手册.docx_第15页
第15页 / 共92页
JSTL参考手册.docx_第16页
第16页 / 共92页
JSTL参考手册.docx_第17页
第17页 / 共92页
JSTL参考手册.docx_第18页
第18页 / 共92页
JSTL参考手册.docx_第19页
第19页 / 共92页
JSTL参考手册.docx_第20页
第20页 / 共92页
亲,该文档总共92页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

JSTL参考手册.docx

《JSTL参考手册.docx》由会员分享,可在线阅读,更多相关《JSTL参考手册.docx(92页珍藏版)》请在冰点文库上搜索。

JSTL参考手册.docx

JSTL参考手册

JSTL入门:

表达式语言

通过避免使用脚本编制元素来简化对JSP应用程序的软件维护

Core库(核心库)

URI:

前缀:

c

1.

catch>

catch>动作用于捕获JSP元素在其体中抛出的异常,从而提供细粒度的错误控制,此异常也可以保存为一个页面作用域变量。

语法:

catch[var="var"]>

JSPelements

catch>

属性:

属性名

Java类型

是否接受动态值

描述

var

String

No

变量名

示例:

catchvar="importException">

parseDatevalue="${param.empDate}"dateStyle="short"/>

catch>

iftest="${importException!

=null}">

forwardpage="input.jsp">

paramname="msg"value="Invaliddateformat"/>

forward>

if>

2.

choose>

choose>动作用于控制嵌套

when>和

otherwise>动作的处理,它只允许第一个测试表达式计算为true的

when>动作得到处理;如果所有

when>动作的测试表达式都计算为false,则会处理一个

otherwise>动作。

语法:

catch[var="var"]>

JSPelements

catch>

属性:

示例:

choose>

whentest="${product.onSale}">

${product.salesPrice}Onsale!

when>

otherwise>

${product.price}

otherwise>

choose>

3.

forEach>

forEach>动作将其体反复计算固定次数,或者针对一个集合中的每个元素分别计算一次体。

当前元素(如果未指定集合则为当前索引)和迭代状态可以通过嵌套变量提供给体中的动作元素。

此动作接受属性表中所列的类型集合。

当前元素的类型即为底层集合的类型,仅有两个例外。

对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。

对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。

语法1:

基于集合元素进行迭代

forEachitems="collection"[var="var"][varStatus="varStatus"]

[begin="startIndex"][end="stopIndex"][step="increment"]>

JSPelements

forEach>

语法2:

迭代固定次数

forEach[var="var"][varStatus="varStatus"]

begin="startIndex"end="stopIndex"[step="increment"]>

JSPelements

forEach>

属性

属性名

Java类型

是否接受动态值

描述

begin

int

Yes

结合集合使用时的开始索引,从0计起。

对于集合来说默认为0

end

int

Yes

结合集合使用时的结束索引(元素引要小于等于此结束索引),从0计起。

默认为集合的最后一个元素。

如果end小于begin,则根本不计算体集合,迭代即要针对此集合进行。

items

java.util.Collection,java.util.Iterator,java.util.Enumeration,java.util.Map,对象数组或基本类型数组。

Yes

集合,迭代即要针对此集合进行。

step

int

Yes

每次迭代时索引的递增值。

默认为1。

var

String

No

保存当前元素的嵌套变量的名字。

varStatus

String

No

保存LoopTagStatus对象的嵌套变量的名字。

示例:

<%--Iteratefivetimes,writing1,2,3,4,5--%>

forEachbegin="1"end="5"var="current">

${current}

forEach>

<%--Iterateoverallrequestparameters--%>

forEachitems="${param}"var="current">

Name:

outvalue="${current.key}"/>

Value:

outvalue="${current.value}"/>

forEach>

--Update:

06/10/27

4.

forTokens>

forTokens>动作对于String中的每个token(单字)计算其体一次,在String中这些token由某个所指定的分隔符相分隔。

当前token和迭代状态可以通过嵌套变量提供给体中的动作元素。

语法

forTokensitems="stringOfTokens"delims="delimiters"

[var="var"][varStatus="varStatus"]

[begin="startIndex"][end="stopIndex"][step="increment"]>

JSPelements

forTokens>

属性

属性名

Java类型

是否接受动态值

描述

items

String

Yes

一组token,迭代即要针对这些token进行

delims

String

Yes

分隔符列表

var

String

No

保存当前元素的嵌套变量的名字

varStatus

String

No

保存LoopTagStatus对象的嵌套变量的名字

begin

int

Yes

开始索引,从0计起,默认为0

end

int

Yes

结束索引(小于等于此索引),从0计起。

默认为最后一个token。

如果end小于begin,则根本不计算体。

step

int

Yes

每次迭代时索引的递增值。

默认为1。

示例

<%--Iterateovertokensseparatedbyverticalbars--%>

forTokensitems="${tokens}"delims="|"var="current">

outvalue="${current}"/>

forTokens>

5.

if>

if>动作仅当所指定的表达式计算为true时才计算其体。

计算结果也可以保存为一个作用域Boolean变量。

语法1:

没有体

iftest="booleanExpression"

var="var"[scope="page|request|session|application"]/>

语法2:

有体

iftest="booleanExpression">

JSPelements

if>

属性

属性名

Java类型

是否接受动态值

描述

test

boolean

Yes

测试表达式

var

String

No

变量名

scope

String

No

变量作用域

示例

iftest="${emptyparam.empDate}">

forwardpage="input.jsp">

paramname="msg"value="MissingtheEmploymentDate"/>

forward>

if>

 

2003年5月27日

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

在developerworks上其新系列的第一篇文章中,软件工程师MarkKolb向您展示了如何使用JSTL标记来避免在JSP页面中使用脚本编制元素。

您还将了解如何通过从表示层删除源代码来简化软件维护。

最后,您将了解JSTL经过简化的表达式语言,它允许在不必使用功能齐全的编程语言的情况下对JSTL操作指定动态属性值。

JavaServerPages(JSP)是用于J2EE平台的标准表示层技术。

JSP技术提供了用于执行计算(这些计算用来动态地生成页面内容)的脚本编制元素和操作。

脚本编制元素允许在JSP页面中包括程序源代码,在为响应用户请求而呈现页面时可以执行这些源代码。

操作将计算操作封装到很象HTML或XML标记的标记中,JSP页面的模板文本通常包含这些标记。

JSP规范只将几种操作定义成了标准,但从JSP1.1开始,开发人员已经能够以定制标记库的方式创建其自己的操作了。

JSP标准标记库(JSTL)是JSP1.2定制标记库集,这些标记库实现大量服务器端Java应用程序常用的基本功能。

通过为典型表示层任务(如数据格式化和迭代或条件内容)提供标准实现,JSTL使JSP作者可以专注于特定于应用程序的开发需求,而不是为这些通用操作“另起炉灶”。

当然,您可以使用JSP脚本编制元素(scriptlet、表达式和声明)来实现此类任务。

例如,可以使用三个scriptlet实现条件内容,清单1中着重显示了这三个scriptlet。

但是,因为脚本编制元素依赖于在页面中嵌入程序源代码(通常是Java代码),所以对于使用这些脚本编制元素的JSP页面,其软件维护任务的复杂度大大增加了。

例如,清单1中的scriptlet示例严格地依赖于花括号的正确匹配。

如果不经意间引入了一个语法错误,则条件内容中的嵌套其它scriptlet可能会造成严重破坏,并且在JSP容器编译该页面时,要使所产生的错误信息有意义可能会很困难。

清单1.通过scriptlet实现条件内容

<%if(user.getRole()=="member")){%>

Welcome,member!

<%}else{%>

Welcome,guest!

<%}%>

修正此类问题通常需要相当丰富的编程经验。

尽管通常会由十分精通页面布局和图形设计的设计人员来开发和维护JSP,但是同一页面中的脚本编制元素出现问题时,需要程序员的介入。

这种状况将单个文件中代码的责任分担给多人,因而使得开发、调试和增强此类JSP页面成为很麻烦的任务。

通过将常用功能包装到定制标记库的标准集合中,JSTL使JSP作者可以减少对编制脚本元素的需求,甚至可以不需要它们,并避免了相关的维护成本。

JSTL1.0

JSTL1.0发布于2002年6月,由四个定制标记库(core、format、xml和sql)和一对通用标记库验证器(ScriptFreeTLV和PermittedTaglibsTLV)组成。

core标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。

它还提供了用来生成和操作URL的标记。

顾名思义,format标记库定义了用来格式化数据(尤其是数字和日期)的操作。

它还支持使用本地化资源束进行JSP页面的国际化。

xml库包含一些标记,这些标记用来操作通过XML表示的数据,而sql库定义了用来查询关系数据库的操作。

两个JSTL标记库验证器允许开发人员在其JSP应用程序中强制使用编码标准。

可以配置ScriptFreeTLV验证器以在JSP页面中禁用各种类型的JSP脚本元素―scriptlet、表达式和声明。

类似地,PermittedTaglibsTLV验证器可以用来限制可能由应用程序的JSP页面访问的定制标记库集(包括JSTL标记库)。

尽管JSTL最终将会成为J2EE平台的必需组件,但目前只有少数应用程序服务器包括它。

JSTL1.0的参考实现可作为Apache软件基金会(ApacheSoftwareFoundation)的JakartaTaglibs项目(请参阅参考资料)的一部分而获得。

可以将该参考实现中的定制标记库合并到任何支持JSP1.2和Servlet2.3规范的服务器,以添加对JSTL的支持。

表达式语言

在JSP1.2中,可以使用静态字符串或表达式(如果允许的话)指定JSP操作的属性。

例如,在清单2中,对

setProperty>操作的name和property属性指定了静态值,而用表达式指定了其value属性。

这个操作的效果是将请求参数的当前值赋予命名的bean特性。

以这种形式使用的表达式被称为请求时属性值(request-timeattributevalue),这是构建到JSP规范中的用于动态指定属性值的唯一机制。

清单2.合并请求时属性值的JSP操作

setPropertyname="user"property="timezonePref"

value='<%=request.getParameter("timezone")%>'/>

因为请求时属性值是用表达式指定的,所以它们往往有和其它脚本元素一样的软件维护问题。

因此,JSTL定制标记支持另一种用于指定动态属性值的机制。

可以用简化的表达式语言(EL)而不使用完整的JSP表达式来指定JSTL操作的属性值。

EL提供了一些标识符、存取器和运算符,用来检索和操作驻留在JSP容器中的数据。

EL在某种程度上以EcmaScript(请参阅参考资料)和XML路径语言(XMLPathLanguage,XPath)为基础,因此页面设计人员和程序员都应该熟悉它的语法。

EL擅长寻找对象及其特性,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语言。

但是,与JSTL标记一起使用时,它就能使用简单而又方便的符号来表示复杂的行为。

EL表达式的格式是这样的:

用美元符号($)定界,内容包括在花括号({})中,如清单3所示。

清单3.说明EL表达式定界符的JSTL操作

outvalue="${user.firstName}"/>

此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值,如清单4所示。

单独的表达式由标识符、存取器、文字和运算符组成。

标识符用来引用存储在数据中心中的数据对象。

EL有11个保留标识符,对应于11个EL隐式对象。

假定所有其它标识符都引用限制了作用域的变量。

存取器用来检索对象的特性或集合的元素。

文字表示固定的值―数字、字符、字符串、布尔型或空值。

运算符允许对数据和文字进行组合以及比较。

清单4.组合静态文本和多个EL表达式以指定动态属性值

outvalue="Hello${user.firstName}${user.lastName}"/>

限制了作用域的变量

JSPAPI通过

useBean>操作允许从JSP容器内的四个不同作用域中存储和检索数据。

JSTL通过提供用于指定和除去这些作用域中的对象的附加操作来扩展这一能力。

此外,EL提供将这些对象作为限制了作用域的变量进行检索的内置支持。

特别地,任何出现在EL表达式中但不对应于任何EL隐式对象的标识符,都被自动假定为引用存储在四个JSP作用域的其中某个中的对象,这四个作用域是:

∙页面作用域

∙请求作用域

∙会话作用域

∙应用程序作用域

您可能还记得,只有在为特定请求处理页面期间才能检索存储在该页面作用域中的对象。

如果对象是存储在请求作用域中的,可以在处理所有参与处理某请求的页面期间检索这些对象(譬如在对某个请求的处理中遇到了一个或多个

include>或

forward>操作)。

如果对象是存储在会话作用域中的,则在与Web应用程序的交互式会话期间,可以由用户访问的任何页面检索它(即,直到与该用户交互相关联的HttpSession对象无效为止)。

可以由任何用户从任何页面访问存储在应用程序作用域中的对象,直到卸载Web应用程序本身为止(通常是由于关闭JSP容器所致)。

通过将字符串映射为期望作用域中的对象来将对象存储到该作用域。

然后,就可以通过提供相同字符串来从该作用域检索该对象。

在作用域的映射中查找字符串,并返回被映射的对象。

在ServletAPI中,将此类对象称为相应作用域的属性。

但是,在EL的上下文中,也将与属性相关联的字符串看作变量的名称,该变量通过属性映射的方式获得特定的值。

在EL中,与隐式对象无关联的标识符被认为是存储在四个JSP作用域中的名称对象。

首先对页面作用域检查是否存在这样的标识符,其次对请求作用域、然后对会话作用域、最后对应用程序作用域依次进行这样的检查,然后测试该标识符的名称是否与存储在该作用域中的某个对象的名称匹配。

第一个这样的匹配作为EL标识符的值被返回。

通过这种方法,可以将EL标识符看作引用限制了作用域的变量。

从更技术的方面来说,没有映射到隐式对象的标识符是用PageContext实例的findAttribute()方法求值的,该实例表示对页面的处理,在该页面上,当前正在处理用于请求的表达式。

标识符的名称作为参数传递给这个方法,然后该方法依次在四个作用域中搜索具有相同名称的属性。

并将所找到的第一个匹配项作为findAttribute()方法的值返回。

如果未在这四个作用域中找到这样的属性,则返回null。

最终,限制了作用域的变量是四个JSP作用域的属性,这些属性具有可以用作EL标识符的名称。

只要对限制了作用域的变量赋予由字母数字组成的名称,就可以通过JSP中提供的用于设置属性的任何机制来创建它们。

这包括内置的

useBean>操作,以及由ServletAPI中的几个类定义的setAttribute()方法。

此外,四个JSTL库中定义的许多定制标记本身就能够设置作为限制了作用域的变量使用的属性值。

隐式对象

表1中列出了11个EL隐式对象的标识符。

不要将这些对象与JSP隐式对象(一共只有九个)混淆,其中只有一个对象是它们所共有的。

表1.EL隐式对象

类别

标识符

描述

JSP

pageContext

PageContext实例对应于当前页面的处理

作用域

pageScope

与页面作用域属性的名称和值相关联的Map类

requestScope

与请求作用域属性的名称和值相关联的Map类

sessionScope

与会话作用域属性的名称和值相关联的Map类

applicationScope

与应用程序作用域属性的名称和值相关联的Map类

请求参数

param

按名称存储请求参数的主要值的Map类

paramValues

将请求参数的所有值作为String数组存储的Map类

请求头

header

按名称存储请求头主要值的Map类

headerValues

将请求头的所有值作为String数组存储的Map类

Cookie

cookie

按名称存储请求附带的cookie的Map类

初始化参数

initParam

按名称存储Web应用程序上下文初始化参数的Map类

尽管JSP和EL隐式对象中只有一个公共对象(pageContext),但通过EL也可以访问其它JSP隐式对象。

原因是pageContext拥有访问所有其它八个JSP隐式对象的特性。

实际上,这是将它包括在EL隐式对象中的主要理由。

其余所有EL隐式对象都是映射,可以用来查找对应于名称的对象。

前四个映射表示先前讨论的各种属性作用域。

可以用它们来查找特定作用域中的标识符,而不用依赖于EL在缺省情况下使用的顺序查找过程。

接下来的四个映射用来获取请求参数和请求头的值。

因为HTTP协议允许请求参数和请求头具有多个值,所以它们各有一对映射。

每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。

每对中第二个映射允许检索参数或头的所有值。

这些映射中的键是参数或头的名称,但这些值是String对象的数组,其中的每个元素都是单一参数值或头值。

cookie隐式对象提供了对由请求设置的cookie名称的访问。

这个对象将所有与请求相关联的cookie名称映射到表示那些cookie特性的Cookie对象。

最后一个EL隐式对象initParam是一个映射,它储存与Web应用程序相关联的所有上下文的初始化参数的名称和值。

初始化参数是通过web.xml部署描述符文件指定的,该文件位于应用程序的WEB-INF目录中。

存取器

因为EL标识符是作为隐式对象或限制了作用域的变量(通过属性来实现)解析的,因此有必要将它们转换成Java对象。

EL可以自动包装和解包其相应的Java类中的基本类型(例如,可以在后台将int强制转换成Integer类,反之亦可),但大多数的标识符将成为指向完整的Java对象的指针。

结果是,对这些对象的特性或(在对象是数组和集合的情况下)对其元素的访问通常是令人满意的。

就为了实现这种用途,EL提供了两种不同的存取器(点运算符(.)和方括号运算符([])),也支持通过EL操作特性和元素。

点运算符通常用于访问对象的特性。

例如,在表达式${user.firstName}中,使用点运算符来访问user标识符所引用对象的名为firstName的特性。

EL使用Javabean约定访问对象特性,因此必须定义这个特性的getter方法(通常是名为getFirstName()的方法),以便表达式正确求值。

当被访问的特性本身是对象时,可以递归地应用点运算符。

例如,如果我们虚构的user对象有一个实现为Java对象的address特性,那么也可以用点运算符来访问这个对象的特性。

例如,表达式${user.address.city}将会返回这个地址对象嵌套的city特性。

方括号运算符用来检索数组和集合的元素。

在数组和有序集合(也即,实现了java.util.List接口的集合)的情况下,把要检索的元素的下标放在方括号中。

例如,表达

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 考试认证 > 公务员考试

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2