16.JavaWeb基础 JSTL(JSP标准标签库)
2014-08-14 21:01
363 查看
一.JSTL简介
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组
件,由Apache的Jakarta小组研发。
JSTL主要的标签库
二.导入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字符串。
JSTL(JSP Standard Tag Library,JSP标准标签库)是一个开放源代码的标签组
件,由Apache的Jakarta小组研发。
JSTL | 标记名称 | 标签配置文件 | 描述 |
核心标签库 | c | c.tld | 定义了属性管理、迭代、判断、输出 |
SQL标签库 | sql | sql.tld | 定义了查询数据库操作 |
XML标签库 | xml | x.tld | 用语操作XML数据 |
函数标签库 | fn | fn.tld | 提供了一些常用的操作函数、如字符串函数 |
I18N格式标签库 | fmt | fmt.tld | 格式化数据 |
有两种方式:一种是建立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字符串。
相关文章推荐
- javaWeb jstl的基础使用
- javaWeb基础知识----JSTL
- Java Web基础——自定义标签和JSTL
- 10017---JavaWeb基础--JSTL
- Java Web基础——自定义标签和JSTL
- The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this ap
- 利用Java技术开发Web网络课件浅议-Java基础-Java-编程开发
- Java Web Start 入门基础教程
- Java Web Start入门基础教程
- Java-JSTL(JSP标准标签库)介绍
- WEB开发技术比较报告-Java基础-Java-编程开发
- 教案:转换课程第4章Java Web技术基础
- Java-JSTL(JSP标准标签库)
- Java语言基础16-存取方法再论(Access methods revisited)
- 学习使用J2EE Web应用的事件功能-Java基础-Java-编程开发
- Java Web应用中如何实现任务有效调度-Java基础-Java-编程开发
- 在Web应用中动态创建PDF文件-Java基础-Java-编程开发
- Java-JSTL(JSP标准标签库)
- Java-JSTL(JSP标准标签库)
- Java Web Start入门基础教程