在 JSTL1.1中有以下这些标签库是被支持的: Core标签库、 XML processing标签库、 I18N formatting标签库、 Database access标签库、 Functions标签库。对应的标识符如下表:
序号
|
标签库
|
前缀
|
URI
|
1
|
Core标签库
|
c
|
http://java.sun.com/jsp/jstl/core
|
2
|
XML processing标签库
|
x
|
http://java.sun.com/jsp/jstl/xml
|
3
|
I18N formatting标签库
|
fmt
|
http://java.sun.com/jsp/jstl/fmt
|
4
|
Database access标签库
|
sql
|
http://java.sun.com/jsp/jstl/sql
|
5
|
Functions标签库
|
fn
|
http://java.sun.com/jsp/jstl/functions
|
这里单独讲Core标签库。
Core标签库,又被称为核心标签库,该标签库对 JSP页面的一般处理进行了封装。该标签库总共有 14个标签,被分为了四类,分别是:
A、多用途核心标签: <c:out>、 <c:set>、 <c:remove>、 <c:catch>。
B、条件控制标签: <c:if>、 <c:choose>、 <c:when>、 <c:otherwise>。
C、循环控制标签: <c:forEach>、 <c:forTokens>。
D、URL相关标签: <c:import>、 <c:url>、 <c:redirect>、 <c:param>。
以下是各个标签的用途和属性以及简单示例。
一、<c:out>标签
1、作用:<c:out>标签是一个最常用的标签,用于在 JSP中显示数据。
2、语法:<c:out value="" default="" escapeXml="">。
3、属性:
序号
|
属性
|
描述
|
1
|
value
|
输出到页面的数据,可以是 EL 表达式或常量(必须)
|
2
|
default
|
当 value 为 null 时显示的数据(可选,当value和default都不填时显示为空)
|
3
|
escapeXml
|
当设置为 false 时会自动将value中特殊字符转换成常用字符,如 替换成“”,&替换成”&”。设置成true则保持原样:value中是什么值就显示什么值。(可选,默认为 true )
|
4、实例:
<!-- 有Value值 -->
<c:out value="AAA " default="NO value" escapeXml="true"></c:out><!-- 结果:AAA -->
<hr />
<!-- 没有Value值 -->
<c:out value="" default="NO value" escapeXml="true"></c:out><!-- 结果:空-->
<hr />
<!-- 两个都没有:实际就是value中没有值又没有设置默认值自然显示value中的空值 -->
<c:out value="" default="" escapeXml="true"></c:out><!-- 结果:空-->
<hr />
<!-- escapeXml属性设置成false --><!-- 结果:AAA-->
<c:out value="AAA " default="" escapeXml="false"></c:out>
在 JSTL1.0的时候,在页面显示数据必须使用 <c:out>来进行。然而,在 JSTL1.1中,由于 JSP2.0规范已经默认支持了 EL表达式,因此可以直接在 JSP页面使用表达式。
二、<c:set>标签
1、作用:<c:set>标签用来为变量或 JavaBean中的变量属性赋值。
2、语法:<c:set value="" var="" scope="" ></c:set>
3、属性:
序号
|
属性
|
描述
|
1
|
value
|
数据信息(如用来显示的数据),可以是 EL 表达式或常量(必须)
|
2
|
var
|
被赋值的变量名(将value的值赋给val中的变量),可以通过别名来访问value中的值(可选)
|
3
|
target
|
被赋值的 JavaBean实例的名称。若存在该属性则必须存在 property 属性,两个必须同时使用(可选)
|
4
|
property
|
JavaBean 实例的属性名称(可选)
|
5
|
scope
|
变量的作用范围:page、request、session、application。若没有指定,默认为保存于 page 范围中的变量(可选)
|
4、实例:
<c:set value="AAA" var="a" scope="session" ></c:set>
${a}<!-- 结果:AAA-->
三、<c:remove>标签
1、作用:<c:remove>标签用于删除存在于 scope中的变量
2、语法:<c:set value=" " var="" scope="" ></c:set>
3、属性:
序号
|
属性
|
描述
|
1
|
var
|
需要被删除的变量名(必须)
|
2
|
scope
|
变量的作用范围:page、request、session、application。若没有指定,默认为全部查找(可选)
|
4、实例:
<c:set value="BBB" var="b" scope="session" ></c:set>
${b}<!-- 结果:BBB-->
<c:remove var="b" scope="session" ></c:remove><!-- 若是去掉remove标签,结果 则是:BBB BBB BBB -->
${b}<!-- 结果:空-->
${sessionScope.b }<!-- 结果:空-->
四、<c:catch>标签
1、作用:<c:catch>标签用于在 JSP页面中捕捉异常。
2、语法:<c:catch var=""></c:catch>
3、属性:
序号
|
属性
|
描述
|
1
|
var
|
用来描述异常的变量,该变量可选。若没有定义var属性,那么仅仅捕捉异常而不做任何事情,若定义了 var属性,则可以利用 var所定义的异常变量进行判断转发到其他页面或提示报错信息。(必须)
|
4、实例:
<!-- 执行过程中会出现异常的 -->
<c:set value="aaa" var="errTest" scope="session" ></c:set>
<c:catch var="err">
${errTest/2 }
</c:catch>
${err }<!-- 结果:java.lang.NumberFormatException: For input string: "aaa"
-->
<br />
<!-- 执行过程中不会出现异常的 -->
<c:set value="2" var="errTest" scope="session" ></c:set>
<c:catch var="err">
${errTest/2 }
</c:catch>
${err }<!-- 结果:1.0-->
由上面的例子可以看出:变量err中会保存执行结果或异常信息,当<c:catch>标签中执行的内容不存在异常时,是将执行结果保存到err中,若出现异常则将异常信息保存到err中。
五、<c:if>标签
1、作用:<c:if>标签用于简单的条件语句。
2、语法:<c:if test="" var="" scope=""></c:if>
3、属性:
序号
|
属性
|
描述
|
1
|
test
|
进行判断的条件(必须)
|
2
|
val
|
保存判断结果 true 或 false 的变量名,该变量可供之后的工作使用(可选)
|
3
|
scope
|
变量的作用范围:page、request、session、application。若没有指定,默认为保存于 page 范围中的变量(可选)
|
4、实例:
<c:set value="100" var="ifTest" scope="request" ></c:set><!-- 赋值 -->
<c:if test="${ifTest==100}" var="ifResult" scope="request"><!-- 判断ifTest中值是否为100并将判断结果保存到ifResult中 -->
ifTest变量中的值为100<!-- 若是100,就输出这句话 -->
</c:if>
<br />
${ifResult }<!-- 输出ifResult的值,即判断的结果,true或者false 结果:true -->
六、<c:choose>、<c:when>、<c:otherwise>标签
1、作用:这三个标签用于实现复杂条件判断语句,类似“if,else if,else”的条件语句。
2、语法:
<c:choose>
<c:when test=""></c:when>
<c:otherwise></c:otherwise>
</c:choose>
3、属性:
<c:choose>标签没有属性,可以被认为是父标签, <c:when>、 <c:otherwise>将作为其子标签来使用。
<c:when>标签等价于“if”语句,它包含一个 test属性,该属性表示需要判断的条件(同<c:if>标签中的test属性)。
<c:otherwise>标签没有属性,它等价于“else”语句。
4、实例:
<c:set value="100" var="chooseTest" scope="page" ></c:set><!-- 赋值 -->
<c:choose>
<c:when test="${chooseTest==100}">
chooseTest的值为100
</c:when>
<c:when test="${chooseTest==200}">
chooseTest的值为200
</c:when>
<c:otherwise>
chooseTest的值不是100,也不是200
</c:otherwise>
</c:choose>
<!-- 结果:chooseTest的值为100 -->
七、<c:forEach>标签
1、作用:<c:forEach>为循环控制标签。
2、语法:<c:forEach items="" var="" begin="" end="" step="" varStatus=""></c:forEach>
3、属性:
序号
|
属性
|
描述
|
1
|
items
|
进行循环的集合(可选)
|
2
|
var
|
进行循环的对象的变量名,若存在 items 属性,则表示循环集合中对象的变量名(类似于将items中的集合赋值给该变量)(可选)
|
3
|
begin
|
开始循环的下标,默认从0开始(可选)
|
4
|
end
|
结束循环的下标,默认循环到集合的最后(可选)
|
5
|
step
|
循环的步长(也就是每次循环几条数据),默认为 1(一条一条循环) (可选)
|
6
|
varStatus
|
显示循环状态的变量(可选)
|
其中varStatus属性还有以下属性:
序号
|
属性
|
描述
|
1
|
current
|
当前这次迭代的(集合中的)项
|
2
|
index
|
当前这次迭代从 0 开始的迭代索引
|
3
|
count
|
当前这次迭代从 1 开始的迭代计数
|
4
|
first
|
用来表明当前这轮迭代是否为第一次迭代的标志
|
5
|
last
|
用来表明当前这轮迭代是否为最后一次迭代的标志
|
6
|
begin
|
当前这次迭代的起始序号
|
7
|
end
|
当前这次迭代的结束序号
|
8
|
step
|
当前这次迭代的跳跃步长
|
参考链接:http://zdb-cn.iteye.com/blog/1237304
4、实例:
a、创建Student类,定义数据模型:
public class Student {
public String number;//编号
public String name;//姓名
public int age;//年龄
public String grade;//年级
//构造函数
public Student(){
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGrade() {
return grade;
}
public void setGrade(String grade) {
this.grade = grade;
}
}
b、实例化student和集合用来添加数据:
List<Student> studentList = new ArrayList<Student>();
Student student= new Student();
student.setNumber("20150406001") ;
student.setName("张三");
student.setAge(5);
student.setGrade("一年级");
studentList.add(student);//将student对象添加到集合中
Student student2= new Student();
student2.setNumber("20150406002") ;
student2.setName("李四");
student2.setAge(6);
student2.setGrade("二年级");
studentList.add(student2);//将student对象添加到集合中
Student student3= new Student();
student3.setNumber("20150406003") ;
student3.setName("王五");
student3.setAge(7);
student3.setGrade("三年级");
studentList.add(student3);//将student对象添加到集合中
c、使用c:forEach标签展示数据:
<table border="1">
<tr>
<th>序号</th>
<th>编号</th>
<th>姓名</th>
<th>年龄</th>
<th>年级</th>
</tr>
<c:forEach items="<%=studentList %>" var="student" begin="0" end="<%=studentList.size() %>" step="1" varStatus="order">
<tr>
<td>${order.index+1 }</td>
<td>${student.number }</td>
<td>${student. name}</td>
<td>${student.age }</td>
<td>${student.grade }</td>
</tr>
</c:forEach>
</table>
d、结果:
八、<c:forTokens>标签
1、作用:<c:forTokens>标签可以根据某个分隔符分隔指定字符串,相当于 java.util.StringTokenizer类。
2、语法:<c:forTokens items="" delims="" var="" begin="" end="" step="" varStatus=""></c:forTokens>
3、属性:
序号
|
属性
|
描述
|
1
|
items
|
进行分隔的 EL 表达式或常量(必须)
|
2
|
delims
|
分隔符(必须)
|
3
|
var
|
进行循环的对象的变量名,若存在 items 属性,则表示循环集合中对象的变量名(类似于将items中的集合赋值给该变量)(可选)
|
4
|
begin
|
开始循环的下标,默认从0开始(可选)
|
5
|
end
|
结束循环的下标,默认循环到集合的最后(可选)
|
6
|
step
|
循环的步长(也就是每次循环几条数据),默认为 1(一条一条循环) (可选)
|
7
|
varStatus
|
显示循环状态的变量,其index值默认从0开始(可选)
|
4、实例:
<c:forTokens items="aa,bb,cc,dd" delims="," var="tokensValue" begin="0" end="2" step="1" varStatus="order">
${tokensValue }
</c:forTokens>
<!-- 结果:aa bb cc-->
九、<c:import>标签
1、作用:<c:import>标签允许包含另一个页面到本页面来。
2、语法:
<c:import url="" var="" charEncoding="" context="" scope="" varReader=""></c:import>
3、属性:
序号
|
属性
|
描述
|
1
|
url
|
需要导入到本页面的页面的路径(必须)
|
2
|
var
|
导入文本的变量名(可选)
|
3
|
charEncoding
|
导入页面的字符集(可选)
|
4
|
context
|
Web Context 该属性用于在不同的 Context 下导入页面,当出现 context 属性时,必须以“ / ”开头,此时也需要 url 属性以“ / ”开头(可选)
|
5
|
scope
|
导入文本的变量名作用范围,总共有四种:page、request、session、application。(可选)
|
6
|
varReader
|
接收文本的 java.io.Reader 类变量名(可选)
|
4、实例:
<body>
<!-- 1、引入同目录下的文件 -->
<c:import url="MyHtml.html" charEncoding="UTF-8"></c:import><!-- charEncoding使用GBK或不写会出现乱码 -->
<c:import url="MyJsp.jsp" charEncoding="UTF-8"></c:import>
<br /><br />
<!-- 2、引入不同目录下的文件 -->
<c:import url="sample/MyHtml.html" charEncoding="UTF-8"></c:import>
<c:import url="sample/MyJsp.jsp" charEncoding="UTF-8"></c:import>
<br /><br />
<!-- 3、使用context属性引入本项目中的文件 -->
<c:import url="/sample/MyHtml.html" context="/JSPTest" charEncoding="UTF-8"></c:import>
<c:import url="/sample/MyJsp.jsp" context="/JSPTest" charEncoding="UTF-8">
</c:import>
<br />
<br />
<!--4、 使用context属性引入其他项目中的文件(这里引入tomcat目录下与当前项目处于同一目录下的JSPTest2项目根目录下的test.jsp) -->
<c:import url="/test.jsp" context="/JSPTest2" charEncoding="UTF-8"></c:import>
<c:import url="/test.jsp" context="/ JSPTest2/Test" charEncoding="UTF-8"></c:import><!-- JSPTest2项目下指定目录中的文件 -->
<br /><br />
<!-- 5、引入任意一个URL -->
<c:import url="http://www.baidu.com" charEncoding="UTF-8"/>
<br /><br/>
<!--6、import标签+var属性+param标签 三者组合使用
说明:在百度搜索框中直接搜java链接到的地址是:
https://www.baidu.com/s?wd=java&rsv_spt=1&issp=1&f=8&rsv_bp=0&rsv_idx=2&ie=utf-8&tn=baiduhome_pg&rsv_enter=1&rsv_sug3=2
所以url是http://www.baidu.com/s,param标签的name是wd,value是java
-->
<c:import url="http://www.baidu.com/s" charEncoding="UTF-8" var="data">
<c:param name="wd" value="java"></c:param>
</c:import>
搜索结果:${data }
</body>
更多详情请参考:http://blog.sina.com.cn/s/blog_6a0cb8bc0100wfrt.html
5、说明:
a、context属性中的值应该是:Web Context_root中的值,及当前项目的访问名称。如图:
这个context属性也可以带上文件夹名进行访问,如例子中的:
<c:import url="/test.jsp" context="/JSPTest2/Test" charEncoding="UTF-8"></c:import>
b、报错:
org.apache.jasper.JasperException:
javax.servlet.ServletException: javax.servlet.jsp.JspTagException:
In URL tags, when the "context" attribute is specified, values of both "context" and "url" must start with "/".
这个错误是说:<c:import>标签中的context属性被指定了,那么context属性和url属性中的值都要以/开头,所以只需要在context和url加上/就行了。
c、报错:
org.apache.jasper.JasperException:
javax.servlet.ServletException:
javax.servlet.jsp.JspTagException: Unable to get RequestDispatcher for Context:
"/sample" and URL: "/MyHtml.html". Verify values and/or enable cross context access.
这个错误是说:查看或者启动Tomcat跨WebApp进行访问。默认情况下Tomcat不能跨项目进行访问,使用context之后可能涉及到跨域访问,所以需要在"Tomcat 6.0\conf\context.xml"文件中进行设置:<Context crossContext="true">。
参考地址:http://www.blogjava.net/wintys/archive/2009/06/01/jsp_tomcat_crosscontext.html
d、关于var属性:在第一个和最后一个例子中,一个有var属性一个没有,要是没有var,那么import时会自动将文件导入到当前页面,要是有var属性,那么通过<c:import>标签的var和scope属性就会将url属性所对应的页面内容以String的类型存储至varName中,此时这个页面并不会输出到主包含文件的页面中。存储在var中的数据,在需要的时候可以通过EL表达式或<c:out>标签取出。通过EL表达式和<c:out>标签取出var中的数据显示到页面上效果有点不太一样,譬如说引入http://www.baidu.com,通过EL表达式显示看到的就是百度首页,通过<c:out>显示看到的就是“构成百度首页的源码”。
e、在测试这个c:import标签时,每添加或修改一些代码,就需要重启一下服务器,要是不重启就会报“空指针”异常,具体原因我也不太清楚。大家在用的过程中注意一下,出现空指针时查查是不是因为这个import没有重启服务器导致的。
十、<c:url>标签
1、作用:<c:url>标签用于得到一个 URL地址。
2、语法:<c:url value="" var="" scope="" context=""></c:url>
3、属性:
序号
|
属性
|
描述
|
1
|
value
|
页面的 URL 地址
|
2
|
var
|
存储 URL 的变量名(可选)
|
3
|
context
|
Web Context 该属性用于得到不同 Context 下的 URL 地址,当出现 context 属性时,必须以“ / ”开头,此时也需要 url 属性以“ / ”开头(可选)
|
4
|
scope
|
变量名作用范围,总共有四个:page、request、session、application。(可选)
|
4、实例:
<c:url value="/MyJsp.jsp" var="firstUrlTest" ></c:url><!-- 去当前页面所在目录查找MyJsp.jsp的地址,并将其赋值给firstUrlTest变量 -->
${ firstUrlTest}<!-- 结果: /JSPTest/MyJsp.jsp-->
<a href="${firstUrlTest }">link</a><!-- 点击超链接访问地址 -->
<c:url value="/MyJsp.jsp" var="secondurlTest" context=" /JSPTest /sample"></c:url><!-- 去context指定目录下查找MyJsp.jsp的地址并将其赋值给secondurlTest变量 -->
${ secondurlTest}<!-- 结果: /JSPTest/sample/MyJsp.jsp -->
<a href="${secondurlTest }">link</a><!-- 点击超链接访问地址 -->
更多详情请参考:http://blog.sina.com.cn/s/blog_6a0cb8bc0100whp6.html
十一、<c:redirect>标签
1、作用:<c:redirect>用于页面的重定向,该标签的作用相当于 response.setRedirect方法的工作。
2、语法:<c:redirect url="" context=""></c:redirect>
3、属性:
序号
|
属性
|
描述
|
1
|
url
|
进行重定向的页面的地址
|
2
|
context
|
Web Context 该属性用于得到不同 Context 下的 URL 地址,当出现 context 属性时,必须以“ / ”开头,此时也需要 url 属性以“ / ”开头(可选)
|
4、实例:
<c:redirect url="/MyJsp.jsp" context="/JSPTest"></c:redirect>
<c:redirect url="/MyJsp.jsp" context="/JSPTest/sample" ></c:redirect>
更多详情请参考:http://blog.sina.com.cn/s/blog_6a0cb8bc0100whqx.html
十二、<c:param>标签
1、作用:<c:param>用来为包含或重定向的页面传递参数
2、语法:<c:param name="" value="" ></c:param>
3、属性:
序号
|
属性
|
描述
|
1
|
name
|
传递的参数名(必须)
|
2
|
value
|
传递的参数值(可选)
|
4、实例: <c:set value="1" var="paramTest" ></c:set>
<c:if test="${paramTest==1}">
<c:redirect url="/MyJsp2.jsp" context="/JSPTest/sample">
<c:param name="redirectParam" value="12345"></c:param>
</c:redirect>
</c:if>
- 大小: 2.6 KB
- 大小: 100.1 KB
分享到:
相关推荐
JSP 标准标记库(JSP Standard Tag Library,JSTL)是一个实现 Web 应用程序中常见的通用功能的定制标记库集,这些功能包括迭代和条件判断、数据管理格式化、XML 操作以及数据库访问。在 developerworks 上其新系列...
在 JSTL1.1 中有以下这些标签库是被支持的: Core 标签库、 XML processing 标签库、 I18N formatting 标签库、 Database access 标签库、 Functions 标签库。
JSTL定义 JSTL(JSP Standard Tag Library ,JSP标准标签库)是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。在JSP ...
17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 ...
17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 ...
17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 ...
17.3 core标签库 491 17.3.1 一般用途的标签 492 17.3.2 条件标签 496 17.3.3 迭代标签 498 17.3.4 url相关的标签 501 17.4 i18n标签库 506 17.4.1 国际化标签 506 17.4.2 格式化标签 511 17.5 sql标签库 ...
9、WCM 标签库 217 10、完整示例代码 218 11、WCM API JSP组件输出一条完整的内容全部代码 219 12 、导入JS组件 220 13 、WCM远程操作URL 221 14 、创建定制启动页 224 15、API获取用户所在的组信息 225 十五、JAVA ...
1.3 DomQuery详解 20 1.4 模板介绍 23 1.5 实用功能 24 1.6 定时执行代码 25 1.7 本章小结 26 第2章 Ext Core实例系统设计 27 2.1 需求分析 27 2.2 系统设计 28 2.3 功能结构图 29 2.4 开发与运行环境 31 2.5 数据库...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
坐标详解 9.5.2. 多模块项目 9.5.3. 项目继承 9.6. POM最佳实践 9.6.1. 依赖归类 9.6.2. 多模块 vs. 继承 9.6.2.1. 简单项目 9.6.2.2. 多模块企业级项目 9.6.2.3. 原型父项目 10. 构建生命周期 10.1...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
│ 学习Struts提供的和Form相关标签.txt │ 日企编码规范.doc │ 电信盈科面试题.pdf │ 速算.txt │ 面试题URL.txt │ ├─Javascript │ │ javascript资料(源码,教材,ppt).rar │ │ │ └─javascript资料...
ant配置文件实例详解 build.xml 代码 xml version="1.0" encoding="UTF-8"?> <!-- name:对应工程的名字;default:需要的缺省任务(运行"ant"不指明任务时执行的任务) --> by duzn 2007-04-02 回复 (0) Antenna与j2me...