Servlet学习03 - JSTL

本文介绍了JSTL标签库的作用、如何引入和使用,包括核心标签如if、forEach,以及在实际项目中的应用案例,如OA系统改造。通过结合EL表达式,JSTL减少了JSP中的Java代码,提升开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

什么是JSTL标签库?

  • java Standard Tag Lib(java标准的标签库)
  • JSTL标签库通常结合EL表达式一起使用
  • 标签是写在JSP当中的,但实际上最终还是要执行对应的java代码(java程序在jar包当中)

使用JSTL的目的

  • 代替JSP中的java代码

使用JSTL标签库的步骤

  1. 引入JSTL标签库对应的jar包

  2. 在JSP中引入要使用标签库(使用taglib指令引入标签库)

    • JSTL提供了很多标签,我们这里重点掌握的是核心标签库,所以以引入核心标签库为例。

      <%-- 核心标签库,这里prefix的值可以顺便写,一般写c --%>
      <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
      
      <%-- 格式化标签库 --%>
      <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
      
      <%-- sql标签库 --%>
      <%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>
      
  3. 使用标签,表面使用的是标签,底层实际还是调用了java程序

    <%-- 用法 --%>
    <c:if test=""></c:if>
    

JSTL中的核心标签库core当中有哪些常用的标签?

if标签

<%@page contentType="text/html;charset=UTF-8" %>

<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<%--if标签--%>
<%--test属性是必须的,test属性支持EL表达式,test属性值只能是boolean类型--%>
<%--http://127.0.0.1:8080/jstl/02.jsp--%>
<c:if test="${empty param.username}">
    <h1>用户名不能为空!</h1>
</c:if>

<%--http://127.0.0.1:8080/jstl/02.jsp?username=zhangsan--%>
<c:if test="${not empty param.username}">
    <h1>欢迎你${param.username}</h1>
</c:if>

forEach标签

注意:需要在JSP页面上方引入标签库

<%@page contentType="text/html;charset=UTF-8" %>

<%--引入核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

案例1

<c:forEach var="i" begin="1" end="10" step="2">
    ${i}<br>
</c:forEach>

案例2

<%
    List<Student> list = new ArrayList<>();
    Student stu1 = new Student("zhangsan", "男");
    Student stu2 = new Student("lisi", "男");
    Student stu3 = new Student("wangwu", "男");
    Student stu4 = new Student("zhaoliu", "女");

    list.add(stu1);
    list.add(stu2);
    list.add(stu3);
    list.add(stu4);

    // 将list集合存储到request域中
    request.setAttribute("stuList", list);
%>

<%--需求:遍历集合中的数据,并输出到浏览器--%>
<%--使用java代码--%>
<%
    List<Student> stuList = (List<Student>) request.getAttribute("stuList");
    for (Student stu: stuList) {
%>
    <%=stu.getName()%>、<%=stu.getSex()%><br/>
<%
    }
%>

<%-- 使用标签实现效果 --%>
<%--varStatus:元素状态对象--%>
<c:forEach items="${stuList}" var="s" varStatus="stuStatus">
    ${stuStatus.count}、${s.name}、${s.sex}<br/>
</c:forEach>

Student.java

package com.bz.web.bean;

import java.util.Objects;

public class Student {
    private String name;
    private String sex;

    public Student() {
    }

    public Student(String name, String sex) {
        this.name = name;
        this.sex = sex;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return name.equals(student.name) && sex.equals(student.sex);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, sex);
    }
}

案例3

<%--类似:switch--%>
<%--http://127.0.0.1:8080/jstl/02.jsp?age=17--%>
<c:choose>
    <c:when test="${param.age < 18}">青少年</c:when>
    <c:when test="${param.age < 35}">青年</c:when>
    <c:when test="${param.age < 55}">中年</c:when>
    <c:otherwise>老年</c:otherwise>
</c:choose>

JSTL标签源码分析

<tag>
    <description>
        标签描述
    </description>
    <name>catch</name> 标签的名字
    <tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class> 标签对应的java类
    <body-content>JSP</body-content> 标签体中可以出现的内容,如果式JSP,表示标签体中可以出现符合JSP所有语法的代码,例如EL表达式
    <attribute>	标签的属性
        <description>
            属性描述
        </description>
        <name>var</name> 属性名
        <required>false</required> false:表示该属性不是必须的,可以不写
        <rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式,false:表示不支持EL表达式
    </attribute>
  </tag>

用法:
<c:catch var="">
	JSP...
</c:catch>

OA系统改造

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值