16.JavaWeb基础 JSTL(JSP标准标签库)





一.JSTL简介

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

件,由Apache的Jakarta小组研发。



JSTL主要的标签库
JSTL标记名称标签配置文件描述
核心标签库cc.tld定义了属性管理、迭代、判断、输出
SQL标签库sqlsql.tld定义了查询数据库操作
XML标签库xmlx.tld用语操作XML数据
函数标签库fnfn.tld提供了一些常用的操作函数、如字符串函数
I18N格式标签库fmtfmt.tld格式化数据




二.导入JSTL

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

入到项目中。


第一种:

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





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

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


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




第二种:

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





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


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





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






然后在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>











三.核心标签库

  核心标签库是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>




这里值得一提的就是,<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>




与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) {
		this.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>











<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>





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









<c:catch>标签:

<body>

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

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

</body>







<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>


地址重写后:









<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>






<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>








输出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>











输出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>









<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>









<c:import>标签:


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



包含外部页面:


<body>

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

</body>














传参:

<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>










<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>












<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>






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






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

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






四.其他标签库



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

  读取资源文件、日期和数字格式化、设置时区。


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


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

        条件评估以及可扩展样式语言转换(Extensible Style Language Tr-

ansformations , XSLT)的执行


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

       contains(sring,substring)},其功能是判断string字符串中是否包含

       substring字符串








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值