Core标签库详解

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>

 

DURL相关标签: <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 时显示的数据(可选,当valuedefault都不填时显示为空)

3

escapeXml

当设置为 false 时会自动将value中特殊字符转换成常用字符,如&nbsp;替换成“”,&amp;替换成”&”。设置成true则保持原样:value中是什么值就显示什么值。(可选,默认为 true

 

4、实例:

<!-- 有Value值 -->
<c:out value="AAA&nbsp;" default="NO value" escapeXml="true"></c:out><!-- 结果:AAA&nbsp;-->
<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&nbsp;" 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

变量的作用范围:pagerequestsessionapplication。若没有指定,默认为保存于 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

变量的作用范围:pagerequestsessionapplication。若没有指定,默认为全部查找(可选)

 

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

变量的作用范围:pagerequestsessionapplication。若没有指定,默认为保存于 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、作用:这三个标签用于实现复杂条件判断语句,类似“ifelse ifelse”的条件语句。

 

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

导入文本的变量名作用范围,总共有四种:pagerequestsessionapplication。(可选)

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、说明:

acontext属性中的值应该是: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>标签的varscope属性就会将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

变量名作用范围,总共有四个:pagerequestsessionapplication。(可选)

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>
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值