JSP中常用JSTL标签

文章目录

  • 一、JSTL核心标签库
    • [1、<c:forEach> 循环](#1、<c:forEach> 循环)
    • [2、<c:if> 条件判断(无 else)](#2、<c:if> 条件判断(无 else))
    • [3、<c:choose> + <c:when> + <c:otherwise> 多分支 if‑else‑if](#3、<c:choose> + <c:when> + <c:otherwise> 多分支 if‑else‑if)
    • [4、<c:set> 定义域变量](#4、<c:set> 定义域变量)
    • [5、<c:out> 输出数据(防 XSS 转义)](#5、<c:out> 输出数据(防 XSS 转义))
  • [二、JSTL 格式化标签 fmt:(用于处理日期数字)](#二、JSTL 格式化标签 fmt:(用于处理日期数字))
    • 1、格式化日期
    • [2、格式化数字 / 保留小数](#2、格式化数字 / 保留小数)
  • [三、JSP中为什么变量都要写成{}这种形式](#三、JSP中为什么变量都要写成{}这种形式)

注:本文总结了jsp页面编写中,常用到的一些JSTL标签,主要处理遍历、判断、格式化等等操作。释义是按自己理解写的,如果有误,欢迎大家批评指正!

一、JSTL核心标签库

引入:

markup 复制代码
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

1、<c:forEach> 循环

有两种使用方法,常用的还是用来遍历List:

markup 复制代码
<%-- 1.遍历后台List集合(最常用) --%>
<c:forEach items="${userList}" var="user" varStatus="s">
    ${s.count} - ${user.name}
</c:forEach>

<%-- 2.数字循环 1~10 --%>
<c:forEach begin="1" end="10" var="i">
    ${i}
</c:forEach>

1、items = " {userList}",这里是你循环的对象,常常是一个List, { }里面的名字一定要和你后端存的key一致。

例:List< User > userList = new ArrayList<>();

request.setAttribute("userList",userList);

2、var = "user",这里的user,与后端bean名无关,可以起任意的名字,表示List中每一条数据,也就是每一个bean。后续需要遍历展示哪个属性就用user.字段名。

3、varStatus="s",varStatus就是一个固定属性,里面有四个自带的值,s就相当于给他起个简单的别名,叫什么都可以。

前端效果:

1 - 张三

2 - 李四

3 - 王五

2、<c:if> 条件判断(无 else)

下面代码的意思就是如果age>=18,前端就显示成年人。

markup 复制代码
<c:if test="${age >= 18}">
    成年人
</c:if>

age这个字段一般是从后端传来的一个叫age的值:request.setAttribute("age", age);

3、<c:choose> + <c:when> + <c:otherwise> 多分支 if‑else‑if

markup 复制代码
<c:choose>
    <c:when test="${score>=90}">优秀</c:when>
    <c:when test="${score>=60}">及格</c:when>
    <c:otherwise>不及格</c:otherwise>
</c:choose>

这个很好理解,相当于:

java 复制代码
{
    if(score >= 90){
        System.out.print("优秀");
    }
    else if(score >= 60){
        System.out.print("及格");
    }
    else{
        System.out.print("不及格");
    }
}

4、<c:set> 定义域变量

markup 复制代码
<%-- 定义变量name=张三 --%>
<c:set var="name" value="张三" scope="page"/>
${name}

JSP 有 4 个作用域(前两个常用):

1、scope="page"(默认,最常用)

变量只在当前这个 JSP 页面有效

页面跳转、包含其他页面 → 都访问不到

2.、scope="request"

一次请求内有效(转发可以带过去)

3.、scope="session"

整个会话有效(浏览器不关就一直存在)

4.、scope="application"

整个项目运行期间都有效

5、<c:out> 输出数据(防 XSS 转义)

输出内容,如果内容为空,就显示默认文字 "暂无数据"

markup 复制代码
<c:out value="${content}" default="暂无数据"/>

二、JSTL 格式化标签 fmt:(用于处理日期数字)

引入:

markup 复制代码
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

注:和上面引入的库不一样,上面是c库,这个是fmt库。

1、格式化日期

markup 复制代码
<fmt:formatDate value="${createTime}" pattern="yyyy-MM-dd HH:mm:ss"/>

实际效果:

createTime = 2026-05-14 15:30:20

2、格式化数字 / 保留小数

markup 复制代码
<fmt:formatNumber value="${price}" pattern="0.00"/>

三、JSP中为什么变量都要写成${}这种形式

首先明确一点,JSP 里,只要是:后端传过来的变量 / JSTL<c:set> 定义的变量,取值必须用 ${}。下面讲述原因:

1、后端把数据存在 4 大作用域(page/request/session/application)中,${} 是 EL 表达式,专门用来取域对象里的数据。

2、${}可以区分普通文字和变量。

例:$ {name}、name

3、$ { } 是一整个表达式,不是只包变量!

例:<c:if test=" a g e > = 18 " > 成年人 < / c : i f > 不能写成 < c : i f t e s t = " {age >= 18}">成年人</c:if>不能写成<c:if test=" age>=18">成年人</c:if>不能写成<c:iftest="{age}>= 18">成年人</c:if>

注:文中图片由AI生成

相关推荐
l1t1 小时前
在aarch64机器上安装clang来生成codonjit python模块
开发语言·python
程序员清风1 小时前
AI开发岗该如何准备面试?
java·后端·面试
笨拙的老猴子1 小时前
Spring AI 实战教程(七):Agent 智能体 —— 用电商购物助手学透自主规划与工具执行
java·人工智能·spring
谙弆悕博士1 小时前
快速学C语言——第19章:C语言常用开发库
c语言·开发语言·算法·业界资讯·常用函数
月落归舟1 小时前
深入解析Java基础之基础
java·开发语言
折哥的程序人生 · 物流技术专研1 小时前
《Java 100 天进阶之路》第20篇:Java初始化、构造器、对象创建的过程
java·开发语言·后端·面试
南宫萧幕2 小时前
基于 Simulink 与 Python 联合仿真的 eVTOL 强化学习全链路实战
开发语言·人工智能·python·算法·机器学习·控制
电魂泡哥2 小时前
CMS垃圾回收
java·jvm·算法
csbysj20202 小时前
Perl 运算符
开发语言