??EL 只能通过索引获取单个元素,但数据库的数据条数是不固定的,需要使用循环来获取。由于jsp 页面不建议用Java脚本来做循环,JSTL标签库应运而生。
??JSTL 是 JSP 标准标签库,利用标签库的标签可以取代 JSP 页面上的 Java 代码,简化 JSP 页面的设计
标签库名 | URI字符串 | 作用 | 前缀 |
---|---|---|---|
核心标签库 | http://java.sun.com/jsp/jstl/core | 用于页面逻辑控制如:if、forEach | c |
格式化标签库 | http://java.sun.com/jsp/jstl/fmt | 用于执行格式操作如:格式化日期字符串 | fmt |
① 获取jar包
??可在官网下载下载地址,或在Tomcat目录中的\webapps\examples\WEB-INF\lib 目录下获取这两个jar包
② 导入对应jar包
③ 创建 JSP 页面,使用 taglib 的指令引用标签库
<%--prefix表示前缀,固定为c,uri 标识 --%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--prefix表示前缀,固定为fmt,uri 标识 --%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
④ 通过标签库定义好的标签,进行使用
属性名 | 是否支持EL | 属性类型 | 属性描述 |
---|---|---|---|
test | 支持 | boolean值 | EL 中条件为真则执行标签体内容 注意:没有对应 else 标签 |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>cif标签</title></head>
<body>
<%
request.setAttribute("age",19);
%>
<c:if test="${age >=18}">
成年
</c:if>
<c:if test="${age < 18}">
未成年
</c:if>
</body>
</html>
标签名 | 作用 |
---|---|
choose | 类似 java 中swtich, choose只是一个容器,包含下面两个元素 |
when | 可出现多个,用于每个判断条件,类似于 switch 中 case。有一个 test 属性,与 if 的test功能相同 |
otherwise | 如果上面所有的条件都不满足,执行 otherwise 内容。类似于 switch 中 default |
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>choose标签</title></head>
<body>
<%
request.setAttribute("score",88);
%>
<%--变量 score 不为空,则返回 score 的值,否则返回 0--%>
<c:if test="${not empty score}">
<c:choose>
<c:when test="${score >=80 && score<=100}">
<h3 style="color: orangered">很棒</h3>
</c:when>
<c:when test="${score >=60 && score<80}">
<h3 style="color: bisque">不错</h3>
</c:when>
<c:when test="${score >=0 && score<60}">
<h3 style="color: brown">不应该</h3>
</c:when>
<c:otherwise>
<h3 style="color: rosybrown">分数有误</h3>
</c:otherwise>
</c:choose>
</c:if>
</body>
</html>
属性名 | 是否支持EL | 属性类型 | 属性描述 |
---|---|---|---|
items | 支持 | 数组或集合 | 使用 EL 表达式,代表集合或数组 |
var | 不支持 | String | var 的变量名代表集合中的每一个元素 |
varStatus | 不支持 | String | 代表每个元素的状态对象,共有4个属性,如下表 |
属性 | 数据类型 | 含义 |
---|---|---|
index | int | 当前遍历到的这个元素索引号,从 0 开始 |
count | int | 遍历到当前为止,一共遍历了多少个元素,从1 开始 |
first | boolean | 如果当前遍历的是第1个元素,则返回true |
last | boolean | 如果当前遍历的是最后1个元素,则返回true |
实体类代码 Employee
package com.domain;
import java.math.BigDecimal;
public class Employee {
private String name;
private BigDecimal salary;
public Employee() {
}
public Employee(String name, BigDecimal salary) {
this.name = name;
this.salary = salary;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public BigDecimal getSalary() {
return salary;
}
public void setSalary(BigDecimal salary) {
this.salary = salary;
}
@Override
public String toString() {
return "Employee{" +
"name='" + name + '\'' +
", salary=" + salary +
'}';
}
}
Servlet 代码 EmployeeServlet
package com.web.servlet;
import com.domain.Employee;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
@WebServlet("/list")
public class EmployeeServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// 模拟从数据库查询的员工信息
List<Employee> eps = new ArrayList<Employee>();
eps.add(new Employee("大黄", new BigDecimal(1234)));
eps.add(new Employee("小黄", new BigDecimal(2345)));
eps.add(new Employee("小小黄", new BigDecimal(3456)));
eps.add(new Employee("小黑", new BigDecimal(4567)));
eps.add(new Employee("大白", new BigDecimal(5876)));
eps.add(new Employee("小红", new BigDecimal(9678)));
// 将集合存储请求域中
request.setAttribute("eps", eps);
// 转发到JSP页面显示数据
request.getRequestDispatcher("/index.jsp").forward(request, response);
}
}
JSP代码 index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>员工表</title>
<style>
tr {
text-align: center;
}
</style>
</head>
<body>
<table align="center" border="1" cellspacing="0" cellpadding="0" width="80%">
<caption>员工信息列表</caption>
<tr>
<th>姓名</th>
<th>工资</th>
</tr>
<%--
forEach标签:用于JSP页面遍历集合和数组
items属性:设置要遍历的集合或数组:一般从作用域中获取
var属性:设置一个变量名:用来接收遍历到的每一个元素
varStatus属性:设置一个变量名:记录当前遍历元素的状态(状态对象)
index 属性:当前遍历元素的在集合中的索引值:从0开始
count 属性:遍历到当前元素为止已经遍历了多少个元素,从 1 开始
--%>
<c:forEach items="${eps}" var="ep" varStatus="status">
<!-- 给偶数行设置背景颜色 -->
<tr style="background-color:${status.count % 2 == 0 ? 'gray;' : ''}">
<td>${status.count}</td>
<td>${ep.name}</td>
<td>${ep.salary}</td>
</tr>
</c:forEach>
</table>
</body>
</html>
属性名 | 属性类型 | 属性描述 |
---|---|---|
value | Date | 要格式化的日期对象 |
pattern | String | 指定日期格式 |
<%@ page import="java.util.Date" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>PlayFMT</title>
</head>
<body>
<%
request.setAttribute("date",new Date());
%>
<%--日期格式标签--%>
<fmt:formatDate value="${date}"
pattern="yyyy-MM-dd"></fmt:formatDate>
</body>
</html>