文章目录
三、JSTL标签库
1.JSTL是jsp标准标签库
2.JSTL中的五个标签库
核心标签库:主要用于完成基本的逻辑运算
格式化标签库:主要用于完成日期,数字的格式化显示
EL函数标签库:定义了若干EL函数
SQL操作标签库:目前已经不使用了
XML操作标签库:目前已经不使用了
3.核心标签库
(1)c:set标签
<%@ page pageEncoding="UTF-8" import="Servlet.*" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- 本例演示JSTL标签库中的set标签 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<%-- c:set 将变量放入指定的域中 --%>
<%-- 这里的name默认存放到page域中,也可以通过scope属性指定对应的域 --%>
<c:set var="name" value="张三" scope="session"></c:set>
<%-- 找不到 --%>
name = ${pageScope.name}<br>
<%-- 能找到 --%>
name = ${sessionScope.name}<br>
<%-- c:set 为Bean的属性赋值 --%>
<%
Student s = new Student();
pageContext.setAttribute("student", s);
%>
<c:set value="李四" property="name" target="${pageScope.student}"></c:set>
<c:set value="20" property="age" target="${pageScope.student}"></c:set>
student = ${student }<br>
<%-- c:set 为Map赋值 --%>
<%
Map<String,Object> map = new HashMap<>();
pageContext.setAttribute("map", map);
%>
<%-- 键值对以property和value成对出现 --%>
<c:set value="male" property="sex" target="${pageScope.map }"></c:set>
<c:set value="100" property="age" target="${pageScope.map }"></c:set>
map = ${map }
</body>
</html>
student类:
package Servlet;
public class Student
{
private String name;
private int age;
public Student()
{
}
public Student(String name,int age)
{
this.name = name;
this.age = age;
}
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 toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
(2)c:remove标签
(3)c:catch标签
(4)c:out标签
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%-- 本例演示c:remove,c:catch和c:out --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<%-- c:remove 删除指定域中的属性 --%>
<c:set var="school" value="page"></c:set>
<c:set var="school" value="request" scope="request"></c:set>
<c:set var="school" value="session" scope="session"></c:set>
<c:set var="school" value="application" scope="application"></c:set>
<%-- 删除session域中的school属性 --%>
<c:remove var="school" scope="session"/>
school = ${pageScope.school }<br>
school = ${requestScope.school }<br>
school = ${sessionScope.school }<br>
school = ${applicationScope.school }<br>
<%-- c:remove 删除所有域中的属性 --%>
<c:remove var="school"/>
school = ${pageScope.school }<br>
school = ${requestScope.school }<br>
school = ${sessionScope.school }<br>
school = ${applicationScope.school }<br>
<%-- c:catch 捕获异常 --%>
<c:catch var="exception">
<%
//此代码有异常
int i = 5 / 0;
%>
</c:catch>
exception = ${exception }<br>
exception = ${exception.message }<br>
<%-- c:out 用于输出,若EL中变量没有定义,则使用default中的默认值 --%>
<c:set var="name" value="lisi"></c:set>
name = <c:out value="${name }" default="zhangsan"></c:out><br>
name = ${name }<br>
<%-- 默认情况下c:out不会解析html,直接输出“<h1>我是标题<h1>” --%>
<c:set var="title" value="<h1>我是标题<h1>"></c:set>
<%-- 将escapeXml设为false时,会解析html --%>
title = <c:out value="${title }" escapeXml="false"></c:out><br>
<%-- EL表达式默认解析html --%>
title = ${title }<br>
</body>
</html>
(5)c:if标签
(6)c:choose标签
<%@ page pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<%-- c:if的用法 --%>
<c:set var="name" value="zhangsan"></c:set>
<c:if test="${name == 'zhangsan' }">
<a href="#">欢迎您${name }</a>
</c:if>
<br><br><br>
<%-- c:choose的用法 --%>
<c:set var="pageno" value="5"></c:set>
<c:set var="totalno" value="10"></c:set>
<%-- 根据当前的页数指定对应的链接 --%>
<%-- c:choose只能包含两类标签c:when和c:otherwise --%>
<c:choose>
<%-- 当是第一页时 --%>
<c:when test="${pageno == 1 }">
<a href="#">下一页</a>
<a href="#">末页</a>
当前是:${pageno } / ${totalno } 页
</c:when>
<c:when test="${pageno == totalno }">
<a href="#">首页</a>
<a href="#">上一页</a>
当前是:${pageno } / ${totalno } 页
</c:when>
<c:otherwise>
<a href="#">首页</a>
<a href="#">上一页</a>
<a href="#">下一页</a>
<a href="#">末页</a>
当前是:${pageno } / ${totalno } 页
</c:otherwise>
</c:choose>
</body>
</html>
(7)c:forEach标签
<%@ page pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<%
List<String> ages = new ArrayList<>();
ages.add("10");
ages.add("11");
ages.add("2");
ages.add("100");
ages.add("77");
ages.add("93");
ages.add("3");
pageContext.setAttribute("ages", ages);
%>
<%-- 使用forEach遍历List --%>
<%-- 从第3个开始,第5个结束 --%>
<c:forEach items="${ages }" var="age" begin="3" end="5">
${age }<br>
</c:forEach>
<br>----------------------------------<br>
<%-- 从第0个开始,第5个结束,步长为2 --%>
<c:forEach items="${ages }" var="age" begin="0" end="5" step="2">
${age }<br>
</c:forEach>
<br>----------------------------------<br>
<%-- 输出数字1-10 --%>
<c:forEach begin="1" end="10" var="num">
${num }
</c:forEach>
</body>
</html>
4.格式化标签库
这里只演示日期格式化
<%@ page pageEncoding="UTF-8" import="java.util.*"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
<%-- 本例演示格式化日期标签 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<%
Date d = new Date();
pageContext.setAttribute("d", d);
%>
<%-- 此时输出的是默认格式的日期 --%>
date = ${d }<br>
<%-- 使用自定义格式的日期 --%>
date = <fmt:formatDate value="${d }" pattern="yyyy-MM-dd"/><br>
<%-- 此处不显示,将格式化后的日期保存到变量birthday中 --%>
date = <fmt:formatDate value="${d }" pattern="yyyy-MM-dd" var="birthday"/><br>
生日:<input type="text" value="${birthday }" /><br>
</body>
</html>