没有合适的资源?快使用搜索试试~ 我知道了~
jstl教程
4星 · 超过85%的资源 需积分: 9 215 下载量 71 浏览量
2008-02-11
13:25:34
上传
评论
收藏 2.59MB DOC 举报
温馨提示
试读
64页
jstl 入门教程,发送共享。
资源详情
资源评论
资源推荐
JSTL 入门: 表达式语言
通过避免使用脚本编制元素来简化对 JSP 应用程序的软件维护
级别初级
软件工程师
年 月 日
标准标记库( !", !)是一个实现 #$应用程序中常见的通用功能的定制标记库集,这
些功能包括迭代和条件判断、数据管理格式化、%!操作以及数据库访问。在 $&$'$#(上其新系列的第一篇文
章中,软件工程师 向您展示了如何使用 !标记来避免在 页面中使用脚本编制元素。您还将了解如何
通过从表示层删除源代码来简化软件维护。最后,您将了解 !经过简化的表达式语言,它允许在不必使用功能齐全的
编程语言的情况下对 !操作指定动态属性值。
&$&$$(()是用于 ))平台的标准表示层技术。技术提供了用于执行计算(这些计算用来动态地生
成页面内容)的脚本编制元素和操作。脚本编制元素允许在 页面中包括程序源代码,在为响应用户请求而呈现页面时可以执行这些源代码。操作
将计算操作封装到很象 * !或 %!标记的标记中,页面的模板文本通常包含这些标记。规范只将几种操作定义成了标准,但从 ++
开始,开发人员已经能够以定制标记库的方式创建其自己的操作了。
标准标记库( !)是 +定制标记库集,这些标记库实现大量服务器端 &应用程序常用的基本功能。通过为典型表示层任务(如数据
格式化和迭代或条件内容)提供标准实现, !使 作者可以专注于特定于应用程序的开发需求,而不是为这些通用操作“另起炉灶”。
当然,您可以使用 脚本编制元素(('$、表达式和声明)来实现此类任务。例如,可以使用三个 ('$实现条件内容,清单 +中着重显
示了这三个 ('$。但是,因为脚本编制元素依赖于在页面中嵌入程序源代码(通常是 &代码),所以对于使用这些脚本编制元素的 页
面,其软件维护任务的复杂度大大增加了。例如,清单 +中的 ('$示例严格地依赖于花括号的正确匹配。如果不经意间引入了一个语法错误,
则条件内容中的嵌套其它 ('$可能会造成严重破坏,并且在 容器编译该页面时,要使所产生的错误信息有意义可能会很困难。
清单 1. 通过 scriptlet 实现条件内容
文档选项
将此页作为电子
邮件发送
拓展 应用
下载 ,- 开源
)) 应用服务器
#.) 新版本
/++
0123($$4$556$$6718
0'8#$$$$90:'8
01;$($718
0'8#$$3$(90:'8
01;18
修正此类问题通常需要相当丰富的编程经验。尽管通常会由十分精通页面布局和图形设计的设计人员来开发和维护 ,但是同一页面中的脚本编制
元素出现问题时,需要程序员的介入。这种状况将单个文件中代码的责任分担给多人,因而使得开发、调试和增强此类 页面成为很麻烦的任务。
通过将常用功能包装到定制标记库的标准集合中, !使 作者可以减少对编制脚本元素的需求,甚至可以不需要它们,并避免了相关的维护成
本。
回页首
JSTL 1.0
!+发布于 年 <月,由四个定制标记库( core、 format、 xml和 sql)和一对通用标记库验证器( ScriptFreeTLV和
PermittedTaglibsTLV)组成。 core标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提
供了用来生成和操作 =4!的标记。顾名思义, format标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进
行 页面的国际化。 xml库包含一些标记,这些标记用来操作通过 %!表示的数据,而 sql库定义了用来查询关系数据库的操作。
两个 !标记库验证器允许开发人员在其 应用程序中强制使用编码标准。可以配置 ScriptFreeTLV验证器以在 页面中禁用各种类型的
脚本元素 ― ('$、表达式和声明。类似地, PermittedTaglibsTLV验证器可以用来限制可能由应用程序的 页面访问的定制标记库集
(包括 !标记库)。
尽管 !最终将会成为 ))平台的必需组件,但目前只有少数应用程序服务器包括它。 !+的参考实现可作为 '>$软件基金会
('>$2?$@3)的 (项目(请参阅 参考资料)的一部分而获得。可以将该参考实现中的定制标记库合并到任何
支持 +和 $&$规范的服务器,以添加对 !的支持。
回页首
表达式语言
在 +中,可以使用静态字符串或表达式(如果允许的话)指定 操作的属性。例如,在清单 中,对 <jsp:setProperty>操作的 name
和 property属性指定了静态值,而用表达式指定了其 value属性。这个操作的效果是将请求参数的当前值赋予命名的 $特性。以这种形式使
用的表达式被称为
请求时属性值(
request-time attribute value
)
,这是构建到 规范中的用于动态指定属性值的唯一机制。
清单 2. 合并请求时属性值的 JSP 操作
0A('($'$"$563($6''$"56$B$$26
&3$5C015$D3$($$$6$B$618C:8
因为请求时属性值是用表达式指定的,所以它们往往有和其它脚本元素一样的软件维护问题。因此, !定制标记支持另一种用于指定动态属性值的
机制。可以用简化的
表达式语言
()!)而不使用完整的 表达式来指定 !操作的属性值。)!提供了一些标识符、存取器和运算符,用来检索
和操作驻留在 容器中的数据。)!在某种程度上以 )'(请参阅 参考资料)和 %!路径语言(%!>!3$,%>)为基
础,因此页面设计人员和程序员都应该熟悉它的语法。)!擅长寻找对象及其特性,然后对它们执行简单操作;它不是编程语言,甚至不是脚本编制语
言。但是,与 !标记一起使用时,它就能使用简单而又方便的符号来表示复杂的行为。)!表达式的格式是这样的:用美元符号(E)定界,内容
包括在花括号(7;)中,如清单 所示。
清单 3. 说明 EL 表达式定界符的 JSTL 操作
03&3$56E73($F(G$;6:8
此外,您可以将多个表达式与静态文本组合在一起以通过字符串并置来构造动态属性值,如清单 H所示。单独的表达式由标识符、存取器、文字和运
算符组成。标识符用来引用存储在数据中心中的数据对象。)!有 ++个保留标识符,对应于 ++个 )!隐式对象。假定所有其它标识符都引用
限制了
作用域的变量
。存取器用来检索对象的特性或集合的元素。文字表示固定的值 ― 数字、字符、字符串、布尔型或空值。运算符允许对数据和文字进行
组合以及比较。
清单 4. 组合静态文本和多个 EL 表达式以指定动态属性值
03&3$56*$E73($F(G$;E73($(G$;6:8
回页首
限制了作用域的变量
,通过 <jsp:useBean>操作允许从 容器内的四个不同作用域中存储和检索数据。 !通过提供用于指定和除去这些作用域中的对象的附
加操作来扩展这一能力。此外,)!提供将这些对象作为限制了作用域的变量进行检索的内置支持。特别地,任何出现在 )!表达式中但不对应于任何
)!隐式对象的标识符,都被自动假定为引用存储在四个 作用域的其中某个中的对象,这四个作用域是:
页面作用域
请求作用域
会话作用域
应用程序作用域
您可能还记得,只有在为特定请求处理页面期间才能检索存储在该页面作用域中的对象。如果对象是存储在请求作用域中的,可以在处理所有参与处
理某请求的页面期间检索这些对象(譬如在对某个请求的处理中遇到了一个或多个 <jsp:include>或 <jsp:forward>操作)。如果对象是存储
在会话作用域中的,则在与 #$应用程序的交互式会话期间,可以由用户访问的任何页面检索它(即,直到与该用户交互相关联的 HttpSession
对象无效为止)。可以由任何用户从任何页面访问存储在应用程序作用域中的对象,直到卸载 #$应用程序本身为止(通常是由于关闭 容器所
致)。
通过将字符串映射为期望作用域中的对象来将对象存储到该作用域。然后,就可以通过提供相同字符串来从该作用域检索该对象。在作用域的映射中
查找字符串,并返回被映射的对象。在 $&$,中,将此类对象称为相应作用域的
属性
。但是,在 )!的上下文中,也将与属性相关联的字符串
看作变量的名称,该变量通过属性映射的方式获得特定的值。
在 )!中,与隐式对象无关联的标识符被认为是存储在四个 作用域中的名称对象。首先对页面作用域检查是否存在这样的标识符,其次对请求作
用域、然后对会话作用域、最后对应用程序作用域依次进行这样的检查,然后测试该标识符的名称是否与存储在该作用域中的某个对象的名称匹配。
第一个这样的匹配作为 )!标识符的值被返回。通过这种方法,可以将 )!标识符看作引用限制了作用域的变量。
从更技术的方面来说,没有映射到隐式对象的标识符是用 PageContext实例的 findAttribute()方法求值的,该实例表示对页面的处理,在该
页面上,当前正在处理用于请求的表达式。标识符的名称作为参数传递给这个方法,然后该方法依次在四个作用域中搜索具有相同名称的属性。并将
所找到的第一个匹配项作为 findAttribute()方法的值返回。如果未在这四个作用域中找到这样的属性,则返回 null。
最终,限制了作用域的变量是四个 作用域的属性,这些属性具有可以用作 )!标识符的名称。只要对限制了作用域的变量赋予由字母数字组成的
名称,就可以通过 中提供的用于设置属性的任何机制来创建它们。这包括内置的 <jsp:useBean>操作,以及由 $&$,中的几个类定义的
setAttribute()方法。此外,四个 !库中定义的许多定制标记本身就能够设置作为限制了作用域的变量使用的属性值。
剩余63页未读,继续阅读
cdchenlz
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1