在 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
分享到:
相关推荐
**JSTL详解--Core标签库介绍** JavaServer Pages(JSP)标准标记库(JSTL)是一个关键的工具,旨在减少JSP页面中的脚本元素,提高代码的可维护性和可读性。JSTL包含了一系列定制的标记库,用于实现常见的Web应用...
#### 三、Core标签库详解 Core标签库是JSTL中最基础也是最常用的一部分,它封装了一系列JSP页面的一般处理功能,共包含14个标签,分为四大类: 1. **多用途核心标签**:包括`<c:out>`、`<c:set>`、`<c:remove>`和`...
JSTL的TLD(Tag Library Descriptors)文件定义了每个库的功能和命名空间,比如`/jstl-core.tld`对应核心标签库,`/jstl-x.tld`对应XML标签库。在JSP页面中,通过`<%@ taglib %>`指令引用这些TLD,定义对应的前缀...
在JSTL 1.1版本中,提供了五个主要的标签库,分别是Core、XML processing、I18N formatting、Database access和Functions。每个库都有特定的URI和前缀,方便在JSP页面中引用。 Core标签库是JSTL的基础,包含了处理...
**JSP标准标签库(JSTL)与C标签库详解** JSP(JavaServer Pages)标准标签库(JSTL)是Java EE平台的一部分,它提供了一套标准的标签来处理常见任务,如迭代、条件判断、XML处理等,以简化JSP页面的编写,提高代码...
**JSTL Core标签库详解:** - `<c:set>`:用于设置变量,可以将值绑定到page、request、session或application作用域。 - `<c:if>`和`<c:choose>`:实现条件判断,`<c:if>`对应单个条件,`<c:choose>`则对应多个条件...
- **prefix="c"**:指定标签库的前缀,本例中为 "c",表示使用 core 标签库时将前缀指定为 "c"。 - **uri="http://java.sun.com/jstl/core"**:指定标签库的 URI,虽然不一定是指向真实网页的 URL,但它可以帮助 JSP...
**JSP核心标签库的使用详解** JSP(JavaServer Pages)是一种动态网页技术,它允许开发者在HTML页面中嵌入Java代码以实现服务器端的交互功能。JSTL(JSP Standard Tag Library),即JSP标准标签库,是为了解决JSP中...
C标签库详解:** C库提供了多种控制流标签,下面是其中几个常用的: - `<c:set>`:设置变量的值。 - `<c:out>`:输出变量或表达式的值,通常用于显示数据,有防止XSS攻击的功能。 - `<c:remove>`:删除指定作用域中...
### JSP标准标签库(JSTL)详解 #### 6.1 JSTL简介 JSTL(JSP Standard Tag Library),即JSP标准标签库,是由Sun Microsystems提出并由Apache Jakarta组织维护的一种用于简化JSP开发的技术。JSTL提供了一套标准化...
#### Core标签库详解 本文主要介绍Core标签库,这是JSTL中最常用的部分。Core标签库包含了执行基本逻辑操作的标签,如`<c:if>`、`<c:forEach>`等。以下是Core标签库中几个常用标签的简要说明: - **`<c:if>`** - ...
### JSP标准标签库(JSTL)详解 #### 一、JSTL简介 JSTL(JSP Standard Tag Library,JSP标准标签库)是由Sun Microsystems发布的一组用于简化JSP页面开发的标准标签库。它允许开发者使用预定义的标签来执行常见的...
在实际开发中,`JSTL_标签库详解(一个不漏).doc`和`JSTL核心标签库.doc`这样的文档是极有价值的参考资料,它们详细解释了每个标签的用法、属性以及示例,可以帮助开发者快速理解和掌握JSTL的使用。确保阅读并理解...
#### 三、Core标签库详解 Core标签库是JSTL中最常用的部分,它主要包括了一般用途的标签、条件标签、迭代标签和URL相关的标签。 ##### 1. `<c:out>` 标签用于计算一个表达式并输出结果。它可以替代JSP中的 `<%= %>...
Core 标签库详解 Core 标签库是JSTL中最常用的库之一,它提供了一系列常用的功能,包括条件判断、循环迭代以及URL操作等。下面详细介绍几个常用的标签: ##### 2.1 `<c:out>` 标签用于输出表达式的值。它可以...
JSTL的核心标签库,即C标签库,包含了13个标签,按照功能可以分为四大类: 1. **表达式控制标签**:`out`、`set`、`remove`、`catch`,主要用于数据的输出、变量的设置与删除以及异常处理。 2. **流程控制标签**:`...