Java研学-JSTL标签库

一 概述

1 EL与JSTL

  EL 只能通过索引获取单个元素,但数据库的数据条数是不固定的,需要使用循环来获取。由于jsp 页面不建议用Java脚本来做循环,JSTL标签库应运而生。

2 JSTL介绍

  JSTL 是 JSP 标准标签库,利用标签库的标签可以取代 JSP 页面上的 Java 代码,简化 JSP 页面的设计

3 常用标签库

标签库名 URI字符串 作用 前缀
核心标签库 http://java.sun.com/jsp/jstl/core 用于页面逻辑控制如:if、forEach c
格式化标签库 http://java.sun.com/jsp/jstl/fmt 用于执行格式操作如:格式化日期字符串 fmt

4 使用步骤

① 获取jar包
  可在官网下载下载地址,或在Tomcat目录中的\webapps\examples\WEB-INF\lib 目录下获取这两个jar包
Java研学-JSTL标签库_第1张图片
② 导入对应jar包
Java研学-JSTL标签库_第2张图片
③ 创建 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" %>

④ 通过标签库定义好的标签,进行使用

二 常用标签

1 标签 – 页面单条件判断

属性名 是否支持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>

2 标签 – 多分支判断

标签名 作用
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>

3 标签 – 遍历集合或数组

属性名 是否支持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>

4
属性名 属性类型 属性描述
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>

你可能感兴趣的:(#,Java研学,java,开发语言)