JSP标准标签库 —— JSTL
JSTL标签库一部分是Tag Library(标签库),另一部分是表达式语言.标签库使用XML语法来定义所以标签.主要分为5种标签.
5种标签分别指定了5个URI,并对标签库的前缀作出约定.
Core核心标签库 | c | http://java.sun.com/jsp/jstl/core | <c:out> |
I18N本地化处理标签库 | fmt | http://java.sun.com/jsp/jstl/xml | <fmt:formatDate> |
SQL数据库处理标签库 | sql | http://java.sun.com/jsp/jstl/sql | <sql:query> |
XML处理标签库 | xml | http://java.sun.com/jsp/jstl/fmt | <x:forBach> |
EL功能函数标签库 | fn | http://java.sun.com/jsp/jstl/functions | <fn:split> |
Core标签库
Core标签库主要包括了一般用途的标签,条件标签,迭代标签和URL相关标签.
在JSP页面中使用Core标签,要使用taglib指令,指定引用标签库.
<%@ taglib uri=”http://java.sun.com/jsp/jstl/core” prefix=”c”%>
一、 一般用途标签
<c:out>
用于计算一个表达式并将结果输出到当前的JspWriter对象.其功能类似于<%=expression%>或${el-expression}.
(1) 语法
语法1:没有标签体
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有标签体
<c:out value="value" [escapeXml="{true|false}"]> default value </c:out>
(2) 属性
名称 |
说明 |
EL |
类型 |
必须 |
默认值 |
value |
被计算的表达式. |
Y |
Object |
是 |
无 |
default |
如果value的值为null,则显示default的值 |
Y |
Object |
否 |
无 |
escapeXml |
是否把结果字符串中的字符转换为对应字符引用或自定义实体 |
Y |
boolean |
否 |
true |
(3) Null 和错误处理
假若value为null,会显示default的值.假若没有设定default的值,则会显示一个空的字符串.
(4) 说明
如果属性value计算的结果不是java.io.Reader对象,那么这个结果将被强制转换为String对象,然后输出到当前的JspWriter对象.
如果计算结果是java.io.Reader对象,那么数据首先从Reader对象中读取,然后写入到当前的JspWriter对象中.
一般地,<c:out>自动会将< > ' "和 & 转换为 < > ' " 和&
若不想转换,只需要设<c:out>的escapeXml="fasle".
<c:set>
<c:set>用于设置JSP变量,并指定其范围和值,或者可以设置JavaBean的属性值。
(1) 语法
语法1:将value的值储存至varName变量中,设置其范围为scope.
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2: 将body content储存至varName变量中,设置其范围为scope.
<c:set var="varName" [scope="{ page|request|session|application }"]> body content </c:set>
语法3:将value存储至target对象的property属性.
<c:set value="value" target="target" property="propertyName" />
语法4: 将body content存储至target对象的property属性.
<c:set target="target" property="propertyName"> body content </c:set>
(2) 属性
名称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
value |
要计算的表达式 |
Y |
Object |
否 |
无 |
var |
欲存入的变量名称 |
N |
String |
否 |
无 |
scope |
var的JSP范围 |
N |
String |
否 |
page |
target |
要设置属性的对象,必须是JavaBean或java.util.Map |
Y |
Object |
否 |
无 |
property |
指定target对象的属性名 |
Y |
String |
否 |
无 |
(3) Null 和错误处理
语法3和语法4在以下情况下抛出异常
1. tagget为null
2. target不是java.util.Map对象,或target是不支持setXXX方法的JavaBean对象
3. 如果value为null
语法1:由var和scope定义的范围变量将被移除.
若没有指定scope属性,那么将按照PageContext.removeAttribute(varName)方法的行为移除变量.
若指定了scope属性,那么将按照PageContext.removeAttribute(varName,scope)方法的行为移除变量.
语法3:如果target是一个Map对象,则从Map中移除property所标识的键对应的元素的值.
如果target是一个JavaBean对象,则把JavaBean的property设为null.
(4) 说明
语法1和语法2设置var和scope所标识的范围变量.
语法3和语法4如果target是Map对象,则设置与property所标识的键对应的元素的值.
如果该元素不存在,则把它加入到Map对象中,否则,设置JavaBean对象的属性的值.
<c:remove>
<c:remove>主要用来移除变量.作用与<c:set>相反.
(1) 语法
<c:remove var="varName" [scope="{ page|request|session|application }"] />
(2) 属性
名称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
var |
欲移除的变量名称 |
N |
String |
是 |
无 |
scope |
var变量的JSP范围 |
N |
String |
否 |
page |
(3) 说明
<c:remove>必须要有var属性,即要被移除的属性名称,scope则可有可无.
若没有指定scope属性,那么将按照PageContext.removeAttribute(varName)方法的行为移除变量.
若指定了scope属性,那么将按照PageContext.removeAttribute(varName,scope)方法的行为移除变量.
例: <c:remove var="number" scope="session" />
将number变量从Session范围中移除.若我们不设定scope,则<c:remove>将会从Page,Request,Session及Application中顺序寻找是否存在名称为number的数据,若能找到时,则将它移除掉,反之则不会做任何的事情.
<c:catch>
<c:catch>用于捕获在其中嵌套的操作所抛出的异常对象(java.util.Throwable对象),并将异常信息储存到变量中.
(1) 语法
<c:catch [var="varName"] > nested actions </c:catch>
(2) 属性
名称 |
说明 |
EL |
类型 |
必须 |
默认值 |
var |
用来储存错误信息的变量 |
N |
String |
否 |
无 |
(3) 说明
<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果发生错误,错误信息将储存至varName变量中,该变量是page范围.如果没有发生异常,而var所标识的范围变量存在,那么它将被移除.
如果没有指定var属性,异常只是简单地被捕获,异常信息不会被保存.
当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止.
二、 条件标签
流程控制分类中包含四个标签:<c:if>、<c:choose>、<c:when>和<c:otherwise>,笔者依此顺序依次说明这四个标签的使用。
<c:if>
<c:if>的用途就和我们一般在程序中用的if一样。
(1) 语法
语法1:没有标签体
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
语法2:有标签体
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]> body content </c:if>
(2) 属性
名 称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
test |
如果表达式的结果为true,则执行body content,false则相反 |
Y |
boolean |
是 |
无 |
var |
用来储存test运算后的结果,即true或false |
N |
String |
否 |
无 |
scope |
var变量的JSP范围 |
N |
String |
否 |
page |
(3) 约束
如果指定了scope属性,那么必须指定var属性.
(4) 说明
<c:if> 标签必须要有test属性.
当test的计算结果为true,则标签体内容将被执行;如为false,则不会执行.
对语法1,var属性必须要提供,在标签执行后,可以用保存了条件结果的范围变量做进一步判断.
<c:choose>
<c:choose>,<c:when>,<c:otherwise>一起实现了类似Java中的if / else if / else 语句.
(1) 语法
<c:choose> body content ( <when> and <otherwise> subtags) </c:choose>
(2) 属性
无
(3) 约束
<c:choose>本身只是 <c:when> 和 <c:otherwise> 的父标签.
<c:choose>的body content只能有:
空白
1或多个 <c:when>
0或多个 <c:otherwise>
<c:when>
<c:when> 是<c:choose>的子标签,表示一个可选的条件.
(1) 语法
<c:when test="testCondition" > body content </c:when>
(2) 属性
名称 |
说明 |
EL |
类型 |
必须 |
默认值 |
test |
如果表达式结果为true,则执行标签体,false则不执行 |
Y |
boolean |
是 |
无 |
(3) 约束
<c:when>标签必须有一个直接的父标签<c:choose>,而且必须在同一父标签下的<c:otherwise>之前出现.
(4) 说明
在运行时,判断<c:when>标签的测试条件是否为true,第一个测试条件为true的<c:when>标签的标签体将被执行.
<c:otherwise>
<c:otherwise>作为<c:choose>的子标签,表示最后的选择.
(1) 语法
<c:otherwise> body content </c:otherwise>
(2) 属性
无
(3) 约束
<c:otherwise> 必须在 <c:choose> 和 </c:choose>之间
在同一个 <c:choose> 中,<c:otherwise> 必须是最后的标签
(4) 说明
在运行时,如果所有 <c:when> 的test属性都不为true,则执行<c:otherwise> 的body content。
三、 迭代标签
迭代(Iterate)操作主要包含两个标签:<c:forEach>和<c:forTokens>.
<c:forEach>
<c:forEach> 用于遍历集合中的成员.重复执行<c:forEach>的body content.
(1) 语法
语法1:遍历循环多个对象的集合
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forEach>
语法2:循环固定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]> body content </c:forEach>
(2) 属性
名称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
var |
用来存放当前循环的成员 |
N |
String |
否 |
无 |
items |
被遍历的集合对象 |
Y |
数组 Collection Iterator Enumeration Map String |
否 |
无 |
varStatus |
用来存放当前循环的相关成员信息 |
N |
String |
否 |
无 |
begin |
开始的位置.集合的第一个项目的索引为0. |
Y |
int |
否 |
0 |
end |
结束的位置 |
Y |
int |
否 |
最后一个成员 |
step |
每次迭代的间隔数 |
Y |
int |
否 |
|
varStatus指定的变量类型是javax.servlet.jsp.core.LoopTagStatus.
(3) 约束
?假若指定了begin属性,则begin必须大于等于 0.
?如果指定了end属性,end必须大于begin.若end小于begin,则循环将不会执行.
?假若指定了step属性, ,step必须大于等于1.
(4) Null 和错误处理
?假若items为null,则表示为空集合,这时迭代不被执行.
(5) 说明
假若begin大于或等于items的大小,则循环不会执行.
items支持的类型:
数组,Collection,Iterator,Enumeration,Map,以","分隔的字符串值.
<c:forTokens>
<c:forTokens> 用来循环字符串中所有的成员,字符串中的成员是由定义符号(delimiters)所分隔的。
(1) 语法
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forTokens>
(2) 属性
名称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
var |
用来存放当前循环的成员 |
N |
String |
否 |
无 |
items |
要遍历的字符串 |
Y |
String |
是 |
无 |
delims |
分割符 |
N |
String |
是 |
无 |
varStatus |
用来存放现在指到的相关成员信息 |
N |
String |
否 |
无 |
begin |
开始的位置,字符串的一部分索引为0. |
Y |
int |
否 |
0 |
end |
结束的位置 |
Y |
int |
否 |
最后一个成员 |
step |
每次迭代的间隔数 |
Y |
int |
否 |
1 |
varStatus指定的变量类型是javax.servlet.jsp.core.LoopTagStatus.
(3) 约束
?假若有begin属性时,begin必须大于等于 0
?假若有end属性时,必须大于begin
?假若有step属性时,step必须大于等于1
假若begin大于或等于items的大小时,则迭代不运算.
(4) Null 和错误处理
?假若items为null,则表示为一空的集合对象.循环不执行.
?若delinms为null,items所表示的字符串将被看作是只由只由一个单独的整体部分组成.
(5) 说明
<c:forTokens>标签通过java.util.StringTokenizer实例来完成字符串的分隔.属性items和delims是构造StringTokenizer实例的参数.
四、 URL相关标签
JSTL包含三个与URL操作有关的标签,它们分别为:<c:import>,<c:redirect>和<c:url>.
主要的功能: 提供超链接,页面包含和重定向.
<c:import>
<c:import> 用于导入一个基于URL的资源.即把其他静态或动态文件包含至本身JSP网页.
它和JSP 动作指令的<jsp:include>最大的差别在于,<jsp:include>只能包含和自己在同一个web application下的文件;<c:import>除了能包含和自己在同一个web application的
文件外,亦可以包含不同web application或者是其他网站的文件。
(1) 语法
语法1:
<c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]> optional body content for <c:param> subtags </c:import>
语法2:资源的内容作为Reader对象被导出.
<c:import url="url" [context="context"] varReader="varReaderName" [charEncoding="charEncoding"]> body content where varReader is consumed by another action </c:import>
(2) 属性
名 称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
url |
要导入资源的URL |
Y |
String |
是 |
无 |
context |
当使用相对URL来访问外部资源时,指定其上下文的名字 |
Y |
String |
否 |
无 |
var |
被导出的保存了资源内容的范围变量的名字.范围变量的类型是String |
N |
String |
否 |
无 |
scope |
var的范围 |
N |
String |
否 |
Page |
charEncoding |
导入资源内容的字符编码 |
Y |
String |
否 |
无 |
varReader |
被导出的保存了资源内容的范围变量的名字. |
N |
String |
否 |
无 |
(3) Null 和错误处理
?假若url为null或空,或无效,将抛出JspException
(4) 说明
使用语法1,导入的资源内容默认被写到当前JspWriter对象.如果指定了var属性,资源的内容将被保存到一个字符串对象中.
使用语法2,资源的内容将被保存为Reader对象.要注意的是,导出的Reader对象只能在<c:import>的开始标签和结束标签之间使用.
注意,导出的Reader对象只能在<c:import>的开始标签和结束标签之间使用.
在导入资源时,可以通过charEncoding属性设置资源内容的字符编码.
在指定导入资源的URL时,可以使用相对URL,也可使用绝对URL,有下面几种情况:
使用相对URL访问同一上下文中的资源.
处理过程和<jsp:include>动作相同.
指定的URL可以是相对于上下文的路径,URL需要以"/"开始.即Web应用程序的根路径下的资源.
也可以是相对于页面的路径. URL不需要以"/"开始. 即当前页面所在目录下的资源.
使用相对URL访问外部上下文中的资源
资源在另一个web应用程序中,该Web应用程序和当前页面所属的Web应用程序在同一个容器中.导入资源时,通过context属性来指定外部Web应用程序的上下名称.指定的URL要以"/"开
始,上下文的名字也必须以"/"开始.在这种情况下的导入,只有当前页面的请求环境对被导入的资源是可用的.
注意:要跨Web应用程序访问资源,需要在当前Web应用程序的<context>元素的设置中指定crossContext属性的值为true.
使用绝对URL
当使用绝对URL来导入资源时,当前执行环境的所有一切(如request或session)对被导入的资源都是不可以的.即使绝对URL引用的是同一个Web应用程序的资源.
因此,当前页面的请求参数将不能被传递给导入资源.这主要是因为<c:import>标签的标签处理器对相对URL和绝对URL的处理方式不同.
对相对URL,采用的是RequestDispatcher类的include()方法;
对绝对URL,采用的是java.net.URL和java.net.URLConnection类的方法.
<c:import>不仅支持HTTP协议,也支持FTP协议.
<c:url>
<c:url>使用正确的URL重写规则构造一个URL.
(1) 语法
语法1:没有标签体.
<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] />
语法2:body content代表查询字符串(Query String)参数
<c:url value="value" [context="context"] [var="varName"] [scope="{page|request|session|application}"] > <c:param>subtags </c:url>
(2) 属性
名称 |
说 明 |
EL |
类型 |
必 须 |
默认值 |
value |
要处理的URL |
Y |
String |
是 |
无 |
context |
当使用的相对URL标识了一个外部资源的时候,指定其上下文的名字. |
Y |
String |
否 |
无 |
var |
被导出的保存了处理后的URL的范围变量的名字(该范围变量的类型是String) |
N |
String |
否 |
无 |
scope |
var的范围 |
N |
String |
否 |
Page |
(3) 说明
<c:url>对URL进行处理,并在需要的时候重写URL.需要注意的是,只有相对URL会被重写,所以,采用URL重写来跟踪会话,那么必须使用相对URL,链接到一个本地资源.
<c:url>可以和<c:param>一起使用,通过<c:param>为URL添加查询字符串.默认情况下,URL处理的结果将被写入到当前的JspWriter对象,如果指定了var属性,那么URL处理的结果将被保存到JSP范围变量中.
<c:redirect>
<c:redirect>将客户端的请求重新定向到另一个资源.
(1) 语法
语法1:没有body content
<c:redirect url="url" [context="context"] />
语法2:body content代表查询字符串参数
<c:redirect url="url" [context="context"] > <c:param> subtags </c:redirect >
(2) 属性
名 称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
url |
重定向目标资源的URL |
Y |
String |
是 |
无 |
context |
当使用相对URL重定向到一个外部资源时,指定其上下文的名字. |
Y |
String |
否 |
无 |
(3) 说明
<c:redirect>发生一个HTTP重定向响应到客户端,中断当前页面的处理(在doEndTag()方法中返回SKIP_PAGE)
<c:redirect>遵循<c:url>同样的重写规则.
url就是设定要被导向到的目标地址,它可以是相对或绝对地址。例如:我们写成如下:
<c:redirect url="http://www.javaworld.com.tw" />
那么网页将会自动导向到http://www.javaworld.com.tw。另外,我们也可以加上context这个属性,用来导向至其他 web站台上的文件,例如:导向到/others下的/jsp/index.html时,写法如下:
<c:redirect url="/jsp/index.html" context="/others" />
<c:redirect> 的功能不止可以导向网页,同样它还可以传递参数给目标文件。在这里我们同样使用<c:param>来设定参数名称和内容。
<c:param>
<c:param>为一个URL添加请求参数.
(1) 语法
语法1:在属性value中指定参数值
<c:param name="name" value="value">
语法2:标签体中指定参数值
<c:param name="name"> paramter value </c:param>
(2) 属性
名称 |
说 明 |
EL |
类型 |
必须 |
默认值 |
name |
查询字符串参数的名字 |
Y |
String |
是 |
无 |
value |
参数的值 |
Y |
String |
否 |
无 |
(3) Null和错误处理
如果name是null或空,那么<c:param>标签什么都不做.
如果value是null,那么将作为空值处理.
(4) 说明
<c:param>作为<c:import>,<c:url>,<c:redirect>的嵌套标签使用,为URL添加请求参数,并对参数中的特殊字符进行正确处理的编码.例如空格将被编码为"+".
相关推荐
总结了一些常用的jstl标签,jstl标准标签库,jstl-core核心标签库,jstl-functions标签库,对于学习jstl有所帮助
摘要:JSTL根据是否支持EL(表达式...通过使用标签库,可是大大减少JSP页面上的Java代码,建立结构清晰的JSP页面,从而利于JSP页面的维护。本文主要介绍其中最常用的核心库的使用方法,其他部分的使用可以依此类推。
JSTL核心标签非常详细的介绍并且对每个标签各举了非常形象生动的例子
常用的JSTL标签库: 核心标签库:http://java.sun.com/jsp/jstl/core 包含 Web 应用的常见工作,比如:循环、表达式赋值、基本输入输出等。 格式化标签库:http://java.sun.com/jsp/jstl/fmt 用来格式化...
WEB18_el&jstl。完成商品的列表的展示。一、JSP技术 二、EL技术 三、JSTL技术 四、javaEE的开发模式。 1.jsp脚本和注释 ...3.JSTL核心库的常用标签 1.什么是模式 2.javaEE经历的模式 3.javaEE的三层架构
JSTL 核心标签 JSTL functions JSTL fmt JSP标签/语法 Spring 标签 Spring 表单标签 freemarker语法 velocity 语法 JSF 核心标签 JSF 表单标签 AJAX 常用函数 JS 常用检测函数 JS 常用函数 JSP 编辑器(eclipse插件...
<br>测试JSTL核心标签库</h1><br> <hr><br> 测试c:out</li><br> a(default)=${a}"/> <br> a(el)=${a } <br> b(defalt)=${b}" default="b value"/> <br> bj(default)=${bj}"/> <br> bj(escapeXml...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
【jstl jsp标准标签库】 jstl-1.2.jar standard-1.1.2.jar 【springmvc核心】 spring-web-4.3.11.RELEASE.jar spring-webmvc-4.3.11.RELEASE.jar 【数据校验】 classmate-0.8.0.jar hibernate-validator...
jstl.jar:(jsp standard taglib)jstl的核心标签库。 poi.jar:Apache的操作数据转换的类库,能导入和到处Excel,与jxl.jar功能重复。 mysql-connector-java-5.1.6-bin.jar mysql驱动包 ojdbc5.jar jdbc驱动包 ...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
pio + itext 生成报表 几大框架问题 Struts2常用标签总结等 Word文件">包括165个javaEE学习的Word文件 jstl标准函数 mysql命令详解 javascript 常用JavaScript代码 java位运算大全 java struts2 0经典知识点 ORACLE ...
0416_Struts常用标签库 0417_Struts高级开发 0500_第五部分:附录 0518_附录A:实用工具 0519_附录B:MyEclipse开发工具 电子书目录: MLDN 李兴华 Java Web 开发实战经典.pdf (高清版) 第1章 JAVA WEB开发...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
Tomcat服务器的安装及配置,JSP基础语法,JSP内置对象,JavaBean,文件上传,Servlet程序开发,表达式语言,Tomcat数据源,JSP标签编程,JSP标准标签库(JSTL),Ajax开发技术,Struts基础开发,Struts常用标签库,...
12.5 JSTL核心标签库 12.6 网络留言板V6.0 第13章 Hibernate框架及其应用 13.1 Hibernate 基础知识 13.2 DataBase Explorer 透视图 13.3 Hibernate 应用实例 第14章 Spring框架及其应用 14.1 Spring 基础知识 ...
第16章 Struts常用标签库 16.1、Struts标签库简介 16.2、Bean标签 16.2.1、标签 16.2.2、标签 16.2.3、资源访问标签 16.2.4、标签 16.2.5、标签 16.2.6、标签 16.2.7、国际化与标签 16.3、Logic标签 ...