浩浩学编程JavaWeb-07JSTL标签

    科技2026-02-22  37

    JSTL标签

    引入前提:当需要遍历输出时,JSP 脚本穿插,循环结构复杂

    <table> <tr> <th>编号</th> <th>姓名</th> <th>成绩</th> </tr> <% List<User> list=(List<User>) request.getAttribute("list"); for (User user:list){ request.setAttribute("user",user); %> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.age}</td> </tr> <% } %> </table>

    1.基本概念

    JSP Standard Tag Library JSP 标准标签库, JSP 为开发者提供的⼀系列的标签,使⽤这些标签可以完成⼀些逻辑处理,⽐如循环遍历集合,让代码更加简洁,不再出现 JSP 脚本穿插的情况。

    实际开发中 EL 和 JSTL 结合起来使⽤, JSTL 侧重于逻辑处理, EL 负责展示数据。

    JSTL 的使⽤ 1、需要导⼊ jar 包(两个 jstl.jar 和 standard.jar)存放的位置 web/WEB-INF

    2、右键项目,Open Mode Settings,Libraries,+,Java,添加jar包

    3、在 JSP ⻚⾯开始的地⽅导⼊ JSTL 标签库

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

    “http://java.sun.com/jsp/jstl/core” 引入核心标签库

    “ prefix=“c” ” 用 “c”表示,后面的方法必须是 <c:

    <table> <tr> <th>编号</th> <th>姓名</th> <th>成绩</th> </tr> <%List<User> list=(List<User>) request.getAttribute("list");%> <c:forEach items="${list}" var="user"> <tr> <td>${user.id}</td> <td>${user.name}</td> <td>${user.score}</td> </tr> </c:forEach> </table>

    2.常用标签

    JSTL 优点:

    1、提供了统⼀的标签

    2、可以⽤于编写各种动态功能

    核⼼标签库常⽤标签:

    set、 out、 remove、 catch

    set:向域对象中添加数据

    默认存到 page 里面,更改存放域用 scope="…"

    用键值对方法存储,var 就是 key

    <%--存到scope="application"--%> <c:set var="name" value="haoqi" scope="application"></c:set> ${applicationScope.name} <%--set 不能创建和存放属性,但能更改属性的值--%> <% User user = new User(1,"haoqi",19.0); request.setAttribute("user",user); %> ${user.name} //haoqi <hr/> <%-- 修改目标user 当key == name时 将value="dapeng"--%> <c:set target="${user}" property="name" value="dapeng"></c:set> ${user.name} //dapeng <hr/>

    out:输出域对象中的数据

    只有out里面的value需要EL表达式

    <%--当value值为空时输出default里面的信息--%> <c:out value="${name}" default="no name"></c:out> <hr/> ${name} <hr/>

    remove: 删除域对象中的数据

    <!--scope="page" 只删除page里面的--> <c:remove var="name" scope="page"></c:remove> <c:out value="${name}" default="未定义"></c:out>

    cach:捕获异常

    <!--当出现异常时,将异常信息存到定义的变量 error 里面,并输出--> <c:catch var="error"> <% int a = 10/0; %> </c:catch> ${error}

    完整版

    <body> <c:set var="name" value="tom" scope="page"></c:set> <!--当value为空时,输出 default里面的信息--> <c:out value="${name}" default="未定义"></c:out> <!--几乎等价--> ${name} <!--scope="page" 只删除page里面的--> <c:remove var="name" scope="page"></c:remove> <c:out value="${name}" default="未定义"></c:out> <!--当出现异常时,将异常信息存到定义的变量 error 里面,并输出--> <c:catch var="error"> <% int a=10/0; %> </c:catch> ${error} </body>

    3.其他标签

    条件标签

    if和choose

    <body> <c:set var="num1" value="1"></c:set> <c:set var="num2" value="2"></c:set> <!--只判断if时,使用这个--> <!--判断语句写在test里面,用 EL表达式--> <!--没有 eles ,写一个完全相反的条件判断自己实现else--> <c:if test="${num1>num2}">yes</c:if> <c:if test="${num1<num2}">no</c:if> <hr> <!--类似if-else时,用这个--> <!--choose when otherwise 搭配使用--> <c:choose> <c:when test="${num1>num2}">yes</c:when> <c:otherwise>no</c:otherwise> </c:choose> </body>

    迭代标签

    【最经常使用的一个】

    forEach

    begin/end:开始/结束的位置/下标,从0计数

    strp:每次间隔 n 个输出

    varStatus:记录用户的状态,有 sta.index (下标) 等方法

    <body> <% List<String> list=new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); request.setAttribute("list",list); %> <c:forEach items="${list}" var="str" begin="0" end="4" step="2" varStatus="sta"> ${sta.index} ${str}<br/> </c:forEach> </body>

    输出结果:

    0 a 2 c 4 e

    格式化标签

    引入:<%@ taglib prefix=“fmt” uri=“http://java.sun.com/jsp/jstl/fmt” %>

    对日期和数字进行格式化

    <body> <% request.setAttribute("date",new Date()); %> ${date} <!--Sat Mar 28 19:10:51 CST 2020--> <fmt:formatDate value="${date}" pattern="yyyy-MM-dd HH:mm:ss"></fmt:formatDate> ${date} <!--2020-3-28 19:10:51--> <!--以小数点为中心,maxIntegerDigits向左取整数位,maxFractionDigits向右取小数位--> <fmt:formatNumber var="32145.23434" maxIntegerDigits="2" maxFractionDigits="3"></fmt:formatNumber> <!--45.234--> </body>

    函数库标签

    引入:<%@ taglib prefix=“fn” uri=“http://java.sun.com/jsp/jstl/functions” %>

    底层就是Java里面的 函数,方法与String里面的方法类似

    <body> <% request.setAttribute("info","JavaWeb"); %> <!--判断字符串info 里面有没有 字符串We--> ${fn:contains(info,"We" )} <br> <!--判断字符串info 是不是以 Ja 开头--> ${fn:startsWith(info,"Ja" )} <br> <!--判断字符串info 是不是以 ab 结尾--> ${fn:endsWith(info, "eb")} <br> <!--查找下标--> ${fn:indexOf(info, "va")} <br> <!--截取--> ${fn:substring(info,2 ,3 )} <br> <!--替换--> ${fn:replace(info,"W" ,"Haa" )} <br> <!--分割,取第一/第二块--> ${fn:split(info, "H")[0]}-- ${fn:split(info, "H")[1]} </body> ```v
    Processed: 0.013, SQL: 9