• JSTL标签库


    一、什么是JSTL核心标签库:

    1. JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。
    2. 标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。

    二、使用JSTL核心标签库的步骤:

    • 第一步:引入JSTL标签库对应的jar包。
      jakarta.servlet.jsp.jstl-2.0.0.jar
      jakarta.servlet.jsp.jstl-api-2.0.0.jar
    • 第二步:在JSP中引入要使用标签库。(使用taglib指令引入标签库。)
    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    //这个是jstl核心标签库,jstl不止核心标签库,还有<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>日期格式化标签库等。
    prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。不同uri对应的标签库里有不同的功能"
    
    • 1
    • 2
    • 3
    • 第三步:在需要使用标签的位置使用即可。表面使用的是标签,方便前后端分离,底层实际上还是java程序。

    三、JSTL标签的原理:

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    以上uri后面的路径实际上指向了一个xxx.tld文件。
    tld文件实际上是一个xml配置文件。
    在tld文件中描述了“标签”和“java类”之间的关系。
    
    • 1
    • 2
    • 3
    • 4

    源码:

    <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表示该属性不是必须的。true表示该属性是必须的。
            <rtexprvalue>false</rtexprvalue> 这个描述说明了该属性是否支持EL表达式。false表示不支持。true表示支持EL表达式。
        </attribute>
      </tag>
    
    <c:catch var="">
    	JSP....
    </c:catch>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    四、常用标签:

    1. if标签:
    <c:if test="${empty param.username}">
    	<h1>用户名不能为空</h1>
    </c:if>
    
    • 1
    • 2
    • 3

    (1)test属性是必须写的,test属性支持EL表达式,test属性必须是boolean类型。
    (2)if标签还有var属性,表示将var的值作为键,test属性的结果值作为值,以键值对保存到域中。
    (3)if标签还有scope属性,用来指定var的存储域(page,request,session,application)。
    (4)表示如果param.username为空,则执行标签中的内容。

    <c:if test="${not empty param.username}">
    	<h1>欢迎${param.username}</h1>
    </c:if>
    
    • 1
    • 2
    • 3

    (1)表示如果param.username不为空,则执行标签中的内容。

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

    (1)var用来指定循环中的变量
    (2)begin开始值
    (3)end结束值
    (4)step步长
    (5)因为可以使用EL表达式,所以底层肯定将i存储到某个域中了。

    <c:forEach items="${list}" var="s">
    	${s.id}
    </c:forEach>
    
    • 1
    • 2
    • 3

    (1)item存储集合或数组
    (2)s是迭代器对象
    (3)forEach标签还有一个varStatus属性,他是一个对象,varStatus对象有count属性,用来记录循环次数,从1开始,以1递增。

    1. choose:
    <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>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    (1)test属性必须是boolean类型。
    (2)相当于if–else语句。

    五、日期格式化标签库:

    //引入核心标签库
    <%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
    //可以用来格式化后端传来的Date类型的数据,格式化样式为为pattern格式,用于页面显示特定格式的日期时使用
    <fmt:formatDate value="${requestScope.date1}" pattern="yyyy-MM-dd"></fmt:formatDate>
    
    • 1
    • 2
    • 3
    • 4

    具体见:日期处理

  • 相关阅读:
    白盒测试案例设计(我爷爷都能看懂)
    C语言基础知识
    JAVA 力扣练习题:回文数
    分类预测 | MATLAB实现ELM极限学习机多特征分类预测(二分类)
    能带你起飞的【数据结构】成王第十一篇:堆
    【Fiddler】mac m1 机器上使用 fiddler 抓取接口
    青少年python系列 36.函数的参数
    .NET通过源码深究依赖注入原理
    Maven打包可执行jar包方法大全(史上最全)
    互联网架构演进方向
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126463818