JSTL标签库学习
2015-09-13 11:08
621 查看
1. JSP标准标签库
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP 2.0中也是作为标准支持的。
JSTL 1.0 发布于 2002 年 6 月,由四个定制标记库(core、format、xml 和 sql)和一对通用标记库验证器(ScriptFreeTLV 和 PermittedTaglibsTLV)组成。core 标记库提供了定制操作,通过限制了作用域的变量管理数据,以及执行页面内容的迭代和条件操作。它还提供了用来生成和操作 URL 的标记。顾名思义,format 标记库定义了用来格式化数据(尤其是数字和日期)的操作。它还支持使用本地化资源束进行 JSP 页面的国际化。xml 库包含一些标记,这些标记用来操作通过 XML 表示的数据,而 sql 库定义了用来查询关系数据库的操作。
如果要使用JSTL,则必须将jstl.jar和 standard.jar文件放到classpath中,如果你还需要使用XML processing及Database access (SQL)标签,还要将相关JAR文件放到classpath中,这些JAR文件全部存在于下载回来的zip文件中。
1.1 JSTL标签库的概述
JSP 标准标签库(JSP Standard Tag Library,JSTL)是一个实现 Web应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。在 developerWorks 上其新系列的第一篇文章中,软件工程师Mark Kolb 向您展示了如何使用 JSTL 标记来避免在 JSP 页面中使用脚本编制元素。您还将了解如何通过从表示层删除源代码来简化软件维护。最后,您将了解 JSTL 经过简化的表达式语言,它允许在不必使用功能齐全的编程语言的情况下对 JSTL 操作指定动态属性值。JavaServer Pages(JSP)是用于 J2EE 平台的标准表示层技术。JSP 技术提供了用于执行计算(这些计算用来动态地生成页面内容)的脚本编制元素和操作。脚本编制元素允许在 JSP 页面中包括程序源代码,在为响应用户请求而呈现页面时可以执行这些源代码。操作将计算操作封装到很象 HTML 或 XML 标记的标记中,JSP 页面的模板文本通常包含这些标记。JSP 规范只将几种操作定义成了标准,但从 JSP 1.1 开始,开发人员已经能够以定制标记库的方式创建其自己的操作了。
JSP 标准标记库(JSTL)是 JSP 1.2 定制标记库集,这些标记库实现大量服务器端 Java应用程序常用的基本功能。通过为典型表示层任务(如数据格式化和迭代或条件内容)提供标准实现,JSTL 使 JSP 作者可以专注于特定于应用程序的开发需求,而不是为这些通用操作“另起炉灶”。
当然,您可以使用 JSP 脚本编制元素(scriptlet、表达式和声明)来实现此类任务。例如,可以使用三个 scriptlet 实现条件内容,清单 1 中着重显示了这三个 scriptlet。但是,因为脚本编制元素依赖于在页面中嵌入程序源代码(通常是 Java 代码),所以对于使用这些脚本编制元素的 JSP 页面,其软件维护任务的复杂度大大增加了。例如,清单 1 中的 scriptlet 示例严格地依赖于花括号的正确匹配。如果不经意间引入了一个语法错误,则条件内容中的嵌套其它 scriptlet可能会造成严重破坏,并且在 JSP容器编译该页面时,要使所产生的错误信息有意义可能会很困难。
清单 1. 通过 scriptlet 实现条件内容
<% if (user.getRole() == “member”)) { %>
Welcome, member!
##1.2 JSTL 的核心标签库
JSTL的核心标签库包括通用标签库,流程标签库,迭代标签库和URL标签库。 要使用JSTL标签库必须在JSP文件首部加入:
1.2.1 通用标签库
通用标签库主要有:< c:out>, < c:set>, < c:remove> ,< c:catch>
< c:out> 标签 用于显示数据 属性表如下:
属性 | 描述 | 是否必须 | 默认值 |
---|---|---|---|
value | 输出的信息可以使EL表达式也可以使是常量 | 是 | 无 |
default | value 为空时显示 | 否 | 无 |
excapeXml | 为true时避开特殊的XMl字符,当为false 时候,就会解析XMl的特殊字符,为true时则会不解析,而是直接输出。 | 否 | true |
1.没有BODAY 的:
< c:out value=”value” [excapeXml=”{true|false}”] [default=”defaultValue”] />
2:含有body 的:
< c:out [excapeXml=”{true|false}”]>
value
< /c:out>
< c :set>标签 用于保存数据 属性表如下:
属性 | 描述 | 是否必须 | 默认值 |
---|---|---|---|
value | 输出的信息可以使EL表达式也可以使是常量 | 否 | 无 |
target | 需要修改属性的变量名,一般为一个javabean实例 | 否 | 无 |
property | 需要修改的javabean 的属性 | 否 | 无 |
var | 需要保存信息的变量名 | 否 | 无 |
scope | 保存变量信息的范围 | 否 | page |
< c:set>有四种语法:
1.
<c:set value="value" var="name" [scope="{page|request|session|application}"]/>
2.
<c:set var="name" [scope="{page|request|session|application}"]> value </ c:set>
3.
<c:set value="value" target="targetname" property="propertyname" [scope={page|request|session|application}"] />
4.
< c:set target="targetname" property="propertyname" [scope= {page|request |session |application}"] > value < / c :set>
< c:remove> 标签用于删除数据
属性 | 描述 | 是否必须 | 默认值 |
---|---|---|---|
var | 需要删除的变量 | 是 | 无 |
scope | 被删除变量的范围 | 否 | page |
< c: remove var=”name” [scope=”{page|request|session|application}”]/>
< c:catch>标签用于捕获嵌套在它里面代码抛出的异常。
语法:< c:catch [var="varName"]> 需要捕获异常的标签语句,java语句,HTML语句。 < / c :catch>
代码实例:
< body> < c:catch var="exception"> < %=10/0%> < /c:catch> 捕获的异常消息: < c:out value="${exception.message}"/> < /body>
1.2.2 控制流程标签库
< c:if>标签 用来实现单分支结构,语法如下
<c:if test="testCondition" var="varName" [scope="{page|request |session |application}"] />
<c:if test="testCondition" [var="varName"] [scope="{page|request |session |application}"] > body content </c:if>
属性列表:
属性 | 描述 | 是否必须 | 默认值 |
---|---|---|---|
test | 需要判断的条件 相当于 if(….){}中的条件 | 是 | 无 |
var | 需要保存条件结果的变量 | 否 | 无 |
scope | 条件结果变量的范围 | 否 | page |
< c:choose>,< c:when>,< c:otherwise> 标签 这三种标签经常连在一起进行多分支的实现,相当于 switch语句。
可以包含一个或者多个< c:choose> ,0个或者1个< c:otherwise>语法格式:
<c:choose > <c:when test="testvar1"> body content </c:when> <c:when test="testvar2"> body content> </c:when> <c:otherwise> body content3 </c:otherwise> </c:choose>
1.2.3 迭代标签库
< c:forEach> 标签
用于实现循环功能,相当于for循环。语法格式为:
<c:forEach [var="varname"] item="collection' [varstatus="varStatusName"] [begin="begin"] [end="end'] [step="step"] > body content </ cae3 c:forEach>
属性 | 是否必须 | 类型 | 描述 |
---|---|---|---|
var | 否 | String | 用于保存当前item迭代的变量,其可见范围取决于标签体的范围,其类型取决于迭代对象的类型 |
items | 是 | 集合对象 | 迭代对象 |
varStatus | 否 | String | 用于保存当前迭代对象的状态,该变量保存饿对象时:javax.servlet.jsp.jstl.LoopTags status,可见范围取决于标签主体 |
begin | 是 | int | 如果指定了iteam 的值,则begin 代表items的起始位子,默认起始位置为0,如果没有指定items 则begin代表当前的其实迭代值,必须>=0 |
end | 是 | int | 如果指定了iteam 的值,则end 代表items的结束位子,默认起始位置为0,如果没有指定items 则end代表当前结束迭代值,必须>=begin |
step | 是 | int | 迭代的步长,必须>1 |
< c:forTokens>标签
此标签是用于对字符串进行迭代的标签,用于处理一些以特殊字符隔开的字符串。语法:
< c:forTokens items="itemsname" delims="delimiters" [var="varname"] [varstatus="varStatusName"][begin="begin"] [end="end'] [step="step"] >
body content
</c:foeTokens>
属性 | 是否必须 | 类型 | 描述 |
---|---|---|---|
var | 否 | String | 用于保存当前item迭代的变量,其可见范围取决于标签体的范围,其类型取决于迭代对象的类型 |
items | 是 | 集合对象 | 迭代对象 |
delims | 是 | String | 分隔符 |
varStatus | 否 | String | 用于保存当前迭代对象的状态,该变量保存饿对象时:javax.servlet.jsp.jstl.LoopTags status,可见范围取决于标签主体 |
begin | 是 | int | 如果指定了iteam 的值,则begin 代表items的起始位子,默认起始位置为0,如果没有指定items 则begin代表当前的其实迭代值,必须>=0 |
end | 是 | int | 如果指定了iteam 的值,则end 代表items的结束位子,默认起始位置为0,如果没有指定items 则end代表当前结束迭代值,必须>=begin |
step | 是 | int | 迭代的步长,必须>1 |
1.2.4 URL相关标签库
URL 相关标签有:< c:import> < c:param> < c:redirect> < c:url> 可以使用< c:import> 来包含文件,使用< c:url> 来打印格式化啊URL ,使用redirect 来重定向URl。< c:import> < c:param>
< c:import> 标签包含另一个页面的代码到当前的页面。类似于JSP中的动作命令< jsp:include>,当< jsp:include> 只能包含当前web应用下的文件,而< c:import>没有此限制。 其语法:第一种:
<c:import url="ds" [var ="varname"] [context="context"] [scope="{page|request |session |application}"] [charEncoding="charEncoding"]> [< c:param>标签]
</c:import>
第二种:
<c:import url="ds" [varReader ="varReader"] [context="context"] [charEncoding="charEncoding"]> [< c:param>标签]
</c:import>
第一种是把页面的代码一String的形式存储在var 中,而第二种则是把文件内容以Reader 的形式向外部暴露出来。以供读取。
< c:param> 标签是向导入的页面传参数。 其用法:
< c:param name=”paramName” value=”paramValue”>
属性 | 是否必须 | 类型 | 描述 |
---|---|---|---|
url | true | String | 需要导入页面的URL |
context | false | String | 属性用于在不同的Context下面导入,当出现context属性时,必须以”/” k开头,此时url属性也必须以”/”开头。 |
charEncoding | false | String | 导入页面的字符集 |
var | false | String | 保存页面字符的变量 |
scope | false | String | 文本变量的可见范围 |
varReader | false | String | 接受文本的Reader类的变量名 |
< c:redirect>
此标签用于重定向,相当于response.redirect 方法的工作。语法录下:
<c:redirect url="urlString" [context="context"]/>
或者
<c:redirect url="urlString" [context="context"]> [<c:param> 标签语句] </c:redirect>
< c:url>
此标签用于构造一个URL 地址。可以实现一个网站相对Url 之前自动添加当前的servlet上下文名称,即当前网站的路径名,其语法如下:<c:url value="value" var="var" [conte="context"] scope="{page|request |session |application}"/>
或者
<c:url value="value" var="var" [conte="context"] scope="{page|request |session |application}"> [<c:param> 标签语句] </c:url>
1.3 JSTL的xml标签库
1.3.1 XPath简介
< x:parse>
< x:out>
< c:set>
< x:if>
< x:choose> < x:when> < x:otherwise>
< x:foreach>
< x:transform>
1.4 JSTL的格式化/国际化标签库
#
1.5 JSTL的SQL标签库
1.6 JSTL的函数标签库
小结
相关文章推荐
- IE9、IE10浏览器提示是否下载json数据
- javascript实现在指定元素中垂直水平居中
- JS设计模式之序
- 【JSP】JSP中9个内置对象
- JS-面向对象-继承
- BZOJ 1030: [JSOI2007]文本生成器( AC自动机 + dp )
- Json数据解析的封装
- 解析Json文件
- js中for in 和 for each in的用法和区别
- JavaScript实现算术平方根算法-代码超简单
- JavaScript处理解析JSON数据过程详解
- js实现的后台左侧管理菜单代码
- JS实现仿Windows7风格的网页右键菜单效果代码
- JS实现仿QQ面板的手风琴效果折叠菜单代码
- JavaScript中this关键字的使用比较
- JavaScript面向对象旅程(下)
- JSP九大内置对象的作用和用法总结
- Jackson 框架,轻易转换JSON
- Ember.js 入门指南——handlebars条件表达式
- 弹出层,随意拖拽的网页弹出框JS特效