一.JSTL简介

  JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组

件,由Apache的Jakarta小组研发。



JSTL主要的标签库

JSTL

标记名称

标签配置文件

描述

核心标签库

c

c.tld

定义了属性管理、迭代、判断、输出

SQL标签库

sql

sql.tld

定义了查询数据库操作

XML标签库

xml

x.tld

用语操作XML数据

函数标签库

fn

fn.tld

提供了一些常用的操作函数、如字符串函数

I18N格式标签库

fmt

fmt.tld

格式化数据





二.导入JSTL

  有两种方式:一种是建立MyEclipse的Web项目时自动导入;一种是通过下载jstl.ar包后,导

入到项目中。


第一种:

这种很简单,只要建立了MyEclipse想,如下:


java 通过标签重写set方法 java jstl标签_XML



然后在JSP页面中是这样引入标签的:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>




在输入uri的时候,加上组合键Alt+/ 就可以提示选择标签了。




第二种:

为了演示一些功能,以下的演示都用第二种导入方式。


java 通过标签重写set方法 java jstl标签_XML_02



将jar包放到lib文件夹内,然后Build Path即可。


然后将这个jar包以rar形式打开,如下:


java 通过标签重写set方法 java jstl标签_XML_03



将这5个tld放入到WEN-INF文件夹中:


java 通过标签重写set方法 java jstl标签_标签库_04




然后在web.xml中可以自定义引入标签文件的映射名称:

<jsp-config>
  
  	<taglib>
  	
  		<taglib-uri>JSTL-c</taglib-uri>
  		<taglib-location>/WEB-INF/c.tld</taglib-location>
  	
  	</taglib>
  	
  	
  	<taglib>
  	
  		<taglib-uri>JSTL-fmt</taglib-uri>
  		<taglib-location>/WEB-INF/fmt.tld</taglib-location>
  	
  	</taglib>
  	
  	
  	<taglib>
  	
  		<taglib-uri>JSTL-fn</taglib-uri>
  		<taglib-location>/WEB-INF/fn.tld</taglib-location>
  	
  	</taglib>
  	
  	
  	<taglib>
  	
  		<taglib-uri>JSTL-sql</taglib-uri>
  		<taglib-location>/WEB-INF/sql.tld</taglib-location>
  	
  	</taglib>
  	
  	
  	<taglib>
  	
  		<taglib-uri>JSTL-x</taglib-uri>
  		<taglib-location>/WEB-INF/x.tld</taglib-location>
  	
  	</taglib>





然后 j1.jsp:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="JSTL-c" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>j1.jsp</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

	<h3>
		<c:out value="Hello JSTL"></c:out>
	</h3>

</body>
</html>




java 通过标签重写set方法 java jstl标签_标签库_05









三.核心标签库

  核心标签库是JSTL标签中最重要的部分,也是开发中最常使用到的部分了,在核心标签库中主

要完成的就是流程控制、迭代输出等操作等。



<c:out>标签:

<body>

	<%
	
		request.setAttribute("CaMnter", "Save you from anything 07") ;
	
	%>

	<h3><c:out value="${CaMnter}"></c:out></h3>
	<h3><c:out value="${She}" default="Never remember me"></c:out></h3>
	<h3><c:out value="${She}">Never remember me</c:out></h3>

</body>




java 通过标签重写set方法 java jstl标签_标签库_06


这里值得一提的就是,<c:out>标签中的default属性,如果输出对象为null,那么就会默认

输出“”。default可以设置默认输出的内容,如果输出对象为null,那么就会输出default的

值。default的值可以设置在标签体之中,如:<c:out>default内容</c:out>。






<c:set>标签:

<body>
	
	<c:set var="CaMnter" value="Save you from anything 07" scope="request"></c:set>
	<c:set var="She" scope="request">Never remember me</c:set>
	<h3><c:out value="${requestScope.CaMnter}"></c:out></h3>
	<h3><c:out value="${requestScope.She}"></c:out></h3>

</body>




java 通过标签重写set方法 java jstl标签_标签库_07


与setAttribute()方法类似。






<c:set>标签设置对象的属性:


package com.zyy.jstl;

public class SimpleInfo {

	private String name;

	private String info;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		 = name;
	}

	public String getInfo() {
		return info;
	}

	public void setInfo(String info) {
		this.info = info;
	}

}




<body>

	<%
		SimpleInfo sim = new SimpleInfo();
		request.setAttribute("sim", sim);
	%>

	<c:set value="CaMnter" target="${requestScope.sim }" property="name"></c:set>
	<c:set value="Save you from anything 07" target="${requestScope.sim }"
		property="info"></c:set>
	<h3>
		<c:out value="${requestScope.sim.name}"></c:out>
	</h3>
	<h3>
		<c:out value="${requestScope.sim.info}"></c:out>
	</h3>

</body>





java 通过标签重写set方法 java jstl标签_标签库_08








<c:remove>标签:


<body>
	
	<c:set var="CaMnter" value="Save you from anything 07" scope="request"></c:set>
	<h3>删除前:<c:out value="${requestScope.CaMnter}"></c:out></h3>
	<c:remove var="CaMnter" scope="request"/>
	<h3>删除后:<c:out value="${requestScope.CaMnter}"></c:out></h3>

</body>




java 通过标签重写set方法 java jstl标签_XML_09



相当于removeAttribute()方法,删除后为null,但是JSTL的<c:out>输出,转换为了""。









<c:catch>标签:

<body>

	<c:catch var="error">
	<%
	
		int result = 10/0 ;
	
	%>
	</c:catch>

	<h3>异常:${error }</h3>

</body>




java 通过标签重写set方法 java jstl标签_XML_10





<c:if>标签:


<body>

	<c:if test="${param.CaMnter=='Save you from anything 07' }" var="result" scope="page">
	
		<h3>var="result"保存判断的结果:${result }</h3>
	
	</c:if>

</body>




地址重写后:


java 通过标签重写set方法 java jstl标签_XML_11







<c:choose>、<c:when>、<c:otherwise>标签:


这里需要注意的是:<c:choose>标签只能作为<c:when>、<c:otherwise>的父标签出现。


<body>

	<%
	
		pageContext.setAttribute("CaMnter", "Save you from anything 07") ;
	
	%>
	
	<c:choose>
		
		<c:when test="${CaMnter != 'Forget her' }">
		
			<h3>It is impossible to forget her</h3>
		
		</c:when>
		
		<c:when test="${CaMnter == 'Save you from anything 07' }">
		
			<h3>Save you from anything 07</h3>
		
		</c:when>
		
		<c:otherwise>
		
			<h3>She will live forever in my heart</h3>
		
		</c:otherwise>
	
	</c:choose>

</body>




java 通过标签重写set方法 java jstl标签_html_12




<c:choose>就相当于switch一样,上述代码<c:when test="${CaMnter == 'Save

 you from anything 07' }">也符合条件,但是不执行,这就好比case一样顺序对比

有符合条件的就break跳出的原理是一样的。









<c:forEach>标签:


输出数组:


<body>

	<%
		String me[] = { "Save you from anything 07",
				"It is impossible to forget her",
				"She will live forever in my heart" };

		pageContext.setAttribute("me", me);
	%>

	<h3>输出全部:</h3>
	<c:forEach items="${me }" var="info">
		<h3>${info }</h3>
	</c:forEach>
	<br>

	<h3>输出全部(间隔=2):</h3>
	<c:forEach items="${me }" var="info" step="2">
		<h3>${info }</h3>
	</c:forEach>
	<br>

	<h3>输出前两个:</h3>
	<c:forEach items="${me }" var="info" begin="0" end="1">
		<h3>${info }</h3>
	</c:forEach>

</body>




java 通过标签重写set方法 java jstl标签_java 通过标签重写set方法_13






输出List:


<body>

	<%
		List me = new ArrayList();

		me.add("Save you from anything 07");
		me.add("It is impossible to forget her");
		me.add("She will live forever in my heart");
		
		request.setAttribute("me", me) ;
		
	%>

	<h3>输出全部:</h3>
	<c:forEach items="${me }" var="me_part">
		<h3>${me_part }</h3>
	</c:forEach>
	<br>


</body>






java 通过标签重写set方法 java jstl标签_html_14







输出Map:

<body>

	<%

		Map me = new HashMap() ;
	
		me.put("me_part1", "Save you from anything 07") ;
		
		me.put("me_part2", "Save you from anything 07") ;
		
		me.put("me_part3", "Save you from anything 07") ;
		
		request.setAttribute("me", me) ;
	
	%>

	<h3>输出全部:</h3>
	<c:forEach items="${me }" var="me_part">
		<h3>${me_part.key }  -- >  ${me_part.value	 }</h3>
	</c:forEach>
	<br>


</body>




java 通过标签重写set方法 java jstl标签_html_15







<c:forTokens>标签:


<body>

	<%

		String me = "Save you from anything 07" ;
		request.setAttribute("me", me) ;
	
	%>

	<h3>拆分后的结果:</h3>
	<c:forTokens items="${me }" delims=" " var="me_part">
	
		${me_part } *
	
	</c:forTokens>
	
	<br>


</body>




java 通过标签重写set方法 java jstl标签_java 通过标签重写set方法_16







<c:import>标签:


与<jsp.include>标签类似,但不同的是,<c:import>可以包含外部的页面。



包含外部页面:


<body>

	<c:import url="http://www.baidu.com/" charEncoding="UTF-8"></c:import>

</body>




java 通过标签重写set方法 java jstl标签_java 通过标签重写set方法_17












传参:

<body>

	<c:import url="param.jsp" charEncoding="UTF-8">
	
		<c:param name="url" value="c:import" ></c:param>
		<c:param name="CaMnter" value="Save you from anything 07" ></c:param>
	
	</c:import>

</body>




param.jsp:


<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="JSTL-c" prefix="c"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>


<title>param.jsp</title>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

</head>

<body>

	<%
	
		request.setCharacterEncoding("UTF-8") ;
	
	%>
	
	<h3>接受参数页面:${param.url}的${param.CaMnter }</h3>

</body>
</html>




java 通过标签重写set方法 java jstl标签_XML_18








<c:url>标签: 

<body>

	<c:url value="param.jsp" var="url">

		<c:param name="url" value="c:url"></c:param>
		<c:param name="CaMnter" value="Save you from anything 07"></c:param>

	</c:url>

	<a href="${url }">提交</a>

</body>




java 通过标签重写set方法 java jstl标签_html_19



java 通过标签重写set方法 java jstl标签_html_20







<c:redirect>标签:

  JSP中可以通过response.sendRedirect()方法进行客户端跳转,JSTL中也提供了一个类

似的标签<c:redirect>。

<body>

	<c:redirect url="param.jsp">

		<c:param name="url" value="c:redirect"></c:param>
		<c:param name="CaMnter" value="Save you from anything 07"></c:param>

	</c:redirect>

</body>




java 通过标签重写set方法 java jstl标签_标签库_21




如图地址改变了,客户端跳转。






由于标签内容繁杂,这里我们就详细介绍了核心标签库,其他的标签库,仅仅只做功能描述和介

绍,都挺简单只要查查文档,都可以使用。






四.其他标签库



国际化标签库(fmt):支持多种语言的引用程序。能够设置用户所在区域、设置所有请求编码、


SQL标签库(sql):对访问和修改数据库提供标准化支持。数据库连接、数据库操作、事务处理。


XML标签库(xml):对XML文件处理和操作提供支持,包括XML节点的解析,迭代,基于XML数据的

(Extensible Style Language Tr-

ansformations , XSLT)的执行。


函数标签库(fn):通过在EL表达式中调用函数标签库中的函数来实现特定的操作,例如: ${fn:

其功能是判断string字符串中是否包含

字符串。