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、forEachc
格式化标签库http://java.sun.com/jsp/jstl/fmt用于执行格式操作如:格式化日期字符串fmt

4 使用步骤

① 获取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" %>

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

二 常用标签

1 <c:if> 标签 – 页面单条件判断

属性名是否支持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 <c:choose> 标签 – 多分支判断

标签名作用
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 <c:forEach> 标签 – 遍历集合或数组

属性名是否支持EL属性类型属性描述
items支持数组或集合使用 EL 表达式,代表集合或数组
var不支持Stringvar 的变量名代表集合中的每一个元素
varStatus不支持String代表每个元素的状态对象,共有4个属性,如下表
属性数据类型含义
indexint当前遍历到的这个元素索引号,从 0 开始
countint遍历到当前为止,一共遍历了多少个元素,从1 开始
firstboolean如果当前遍历的是第1个元素,则返回true
lastboolean如果当前遍历的是最后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 <fmt:formatDate 标签 – 格式化日期

属性名属性类型属性描述
valueDate要格式化的日期对象
patternString指定日期格式
<%@ 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>
  • 33
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泰勒疯狂展开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值