文章目录
- 一、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生成

