JSP中许多自定义的标签库,已经由JCP的成员Apache定义好并已经打包。我们只需要导入该JAR包后,在页面中使用taglib指令将其导入即可使用。这套标签库称为JSTL(JSP Standard Tag libarary)即JSP标准标签库
JSTL中定义了五个标签库
- 核心标签库:主要用于完成基本的逻辑运算(重点)
- 格式化标签库:主要用于完成日期、数字的格式化显示
- EL函数标签库:定义了若干个EL函数
- SQL操作标签库:完成SQL操作(已经不使用,由java完成)
- XML操作标签库:完成XML操作(已经不使用,由java完成)
上面是对JSTL简单了解,该博客主要写关于核心标签库,ok,先看下目录
博客目录
1、写JSTL的准备
2、核心标签库常用的标签
3、c:set
4、c:remove
5、c:catch
6、c:out
7、c:if
8、c:choose
9、c:forEach(重点)
一、写JSTL的准备
写JSTL之前需要导入两个jar包
- jstl.jar
- standard.jar
将以上两个jar包导入后,可以在standard.jar下的META-INF可以找到c.tld,在c.tld中都是核心标签库的自定义标签
taglib指令在核心标签库中的使用
使用JSTL核心标签库,需要在页面中通过taglib指令,将标签库导入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
二、核心标签库常用的标签
- c:set
- c:remove
- c:out
- c:catch
- c:if
- c:choose
- c:forEach
三、c:set
用于进行变量定义,并将变量存放到指定域属性空间,为Bean的属性赋值,设置Map的key与value
Beantest.java
package linjie.com;
public class Beantest{
private String name;
private int age;
public Beantest() {}
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;
}
}
index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="linjie.com.Beantest"
import="java.util.*"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!-- c:set将变量存放到reuqest域属性空间中 -->
<!--
value:变量的值
var:变量名
scope:将变量存放的域属性空间,取值为page、request、session、application、默认为page范围
-->
<c:set var="name" value="林杰" scope="request"></c:set>
name=${requestScope.name }<br>
<br>
------------------------------
<br>
<!-- c:set为Bean属性赋值 -->
<!--
target:指定的Bean对象
property:指定对象的指定属性
value:为指定对象的指定属性所赋值
-->
<%
Beantest be=new Beantest();
pageContext.setAttribute("be", be);
%>
<c:set property="name" value="linjie" target="${pageScope.be }"></c:set>
name=${be.name }<br>
<br>
------------------------------
<br>
<!-- c:set为Map的key与Value赋值 -->
<!--
target:指定的map
property:指定map的指定的key
value:指定map的key所赋的值
-->
<%
Map<String,String> map=new HashMap();
pageContext.setAttribute("map", map);
%>
<c:set property="name" value="king" target="${map}"></c:set>
<c:set property="age" value="20" target="${map}"></c:set>
map=${map }<br>
name=${map.name }<br>
age=${map.age }<br>
</body>
</html>
客户浏览器显示结果
四、c:remove
从域属性空间中删除指定变量
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="name" value="林杰" scope="request"></c:set>
<c:set var="name" value="linjie" scope="page"></c:set>
<c:set var="name" value="lucy" scope="session"></c:set>
<c:set var="name" value="king" scope="application"></c:set>
删除指定域空间中的指定变量<br>
<c:remove var="name" scope="request"/>
name_request=${requestScope.name }<br>
name_page=${pageScope.name }<br>
name_session=${sessionScope.name }<br>
name_application=${applicationScope.name }<br>
<br>
-----------------------------
<br>
删除所有域中的属性值<br>
<c:remove var="name"/>
name_request=${requestScope.name }<br>
name_page=${pageScope.name }<br>
name_session=${sessionScope.name }<br>
name_application=${applicationScope.name }<br>
</body>
</html>
客户浏览器显示结果
五、c:catch
获取异常信息
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:catch var="ex">
<%
int i=3/0;
%>
</c:catch>
ex=${ex.message }<br>
</body>
</html>
客户浏览器显示结果异常
六、c:out
用于在页面上输出EL表达式的值
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<!--value:指定要输出的EL表达式
escapeXml:是否忽略HTML标签
1、默认为true,不解析HTML标签
2、若为false,则解析HTML标签
3、EL本身也是解析HTML标签的,无法忽略,不能将HTML按原样输出 -->
<c:set var="name" value="<h1>林杰<h1>"></c:set>
name1=<c:out value="${name }"></c:out><br>
name2=<c:out value="${name }" escapeXml="false"></c:out>
name3=${name }<br>
</body>
</html>
客户浏览器显示结果
EL表达式不用就可以在页面上输出,使用< c:out/>好处就是:
可以控制是否解析HTML标签,还可以设定初始值(如下)
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> name=<c:out value="${name }" default="林杰"></c:out> <br> name=${empty name ? 'linjie' : name } </body> </html>
客户浏览器显示结果
七、c:if
用于实现对于条件的判断
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="name" value="林杰"></c:set>
<!-- test:判断条件。若为true,则执行标签体,否则不执行 -->
<c:if test="${name=='林杰' }">
成功执行...
</c:if>
</body>
</html>
客户浏览器显示结果
八、c:choose
进行选择
框架
<c:choose>
<!--当...的情况 -->
<c:when test="">
</c:when>
<c:when test="">
</c:when>
<!-- 否则 -->
<c:otherwise>
</c:otherwise>
</c:choose>
一个简单分页DEMO(当前页为第一页,只有下一页、尾页可选)
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<c:set var="pageno" value="1"></c:set><!-- 当前页码 -->
<c:set var="totalpage" value="5"></c:set><!-- 总页码 -->
<c:choose>
<c:when test="${totalpage==1 }">
首页 上一页 下一页 尾页
</c:when>
<c:when test="${pageno==1 }">
首页 上一页 <a href="#">下一页</a> <a href="#">尾页</a>
</c:when>
<c:when test="${pageno==5 }">
<a href="#">首页</a> <a href="#">上一页</a> 下一页 尾页
</c:when>
<c:otherwise>
<a href="#">首页</a> <a href="#">上一页</a> <a href="#">下一页</a> <a href="#">尾页</a>
</c:otherwise>
</c:choose>
</body>
</html>
客户浏览器显示结果
九、c:forEach
用于循环遍历数组、list、set、map集合
1、简单遍历数组、map、set、list
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
-----------遍历list-------------<br>
<%
List<String> names=new ArrayList<String>();
names.add("林杰");
names.add("linjie");
pageContext.setAttribute("names",names);
%>
<c:forEach items="${names }" var="name">
${name }<br>
</c:forEach>
<br>
-----------遍历set-------------
<br>
<%
Set<String> schools=new HashSet<String>();
schools.add("浙大");
schools.add("北大");
pageContext.setAttribute("schools", schools);
%>
<c:forEach items="${schools }" var="school">
${school }<br>
</c:forEach>
<br>
-----------遍历map------------
<br>
<%
Map<String,Object> maps=new HashMap();
maps.put("name", "林杰");
maps.put("address", "浙江");
pageContext.setAttribute("maps", maps);
%>
<c:forEach items="${maps }" var="map">
${map }<br>
</c:forEach>
<br>
------------遍历数组 int[]
<br>
<%
int[] ages={20,21,22};
pageContext.setAttribute("ages", ages);
%>
<c:forEach items="${ages}" var="age">
${age }<br>
</c:forEach>
</body>
</html>
客户浏览器显示结果
2、begin、end、step用法
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%
List<String> names=new ArrayList<String>();
names.add("林杰");
names.add("linjie");
names.add("luxy");
names.add("king");
names.add("bbbb");
pageContext.setAttribute("names",names);
%>
<!--items:代表域属性
begin、end:开始结束位置
step:步长(跨度) -->
<c:forEach items="${names }" var="name" begin="0" end="4" step="2">
${name }<br>
</c:forEach>
<br>
---------------------------------
<br>
<c:forEach var="num" begin="0" end="10" step="2">
${num }<br>
</c:forEach>
</body>
</html>
客户浏览器显示结果
3、高级功能(表格处理)
<%@ page language="java" contentType="text/html; charset=UTF-8"
import="java.util.*"
import="linjie.com.*"
pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<!-- odd:行数为奇数 -->
<style type="text/css">
.odd{
background-color:#eee
}
.even{
background-color:#888
}
</style>
<body>
<%
List<Beantest> be=new ArrayList<Beantest>();
be.add(new Beantest("林杰",20));
be.add(new Beantest("aa",21));
be.add(new Beantest("bb",22));
be.add(new Beantest("cc",23));
pageContext.setAttribute("be", be);
%>
<table>
<tr>
<th>序号</th>
<th>姓名</th>
<th>年龄</th>
</tr>
<!-- varStatus:处理一些域行数相关的功能(vs.count\vs.first\vs.last\vs.index) -->
<c:forEach items="${be }" var="b" varStatus="vs">
<tr class=${vs.count%2==0 ? 'even' : 'odd' }>
<td>${vs.count }</td>
<td>${b.name }</td>
<td>${b.age }</td>
</tr>
</c:forEach>
</table>
</body>
</html>
客户浏览器显示结果