JavaWeb — JSTL标签库

本文介绍了Java标准标签库(JSTL)的基本概念及其在JSP中的应用方式,包括引入JSTL标签库的步骤、核心标签库的使用方法及常见标签如c:if、c:forEach、c:choose等的功能与示例。

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

JSTL标签库

  • 什么是JSTL标签库?

    • Java Standard Tag Lib(Java标准的标签库)

    • JSTL标签库通常结合EL表达式一起使用。目的是让JSP中的java代码消失。

    • 标签是写在JSP当中的,但实际上最终还是要执行对应的java程序。(java程序在jar包当中。)

  • 使用JSTL标签库的步骤:

    • 第一步:引入JSTL标签库对应的jar包。

      • tomcat10之后引入的jar包是:

        • jakarta.servlet.jsp.jstl-2.0.0.jar

        • jakarta.servlet.jsp.jstl-api-2.0.0.jar

      • 在IDEA当中怎么引入?

        • 在WEB-INF下新建lib目录,然后将jar包拷贝到lib当中。然后将其“Add Lib...”

        • 一定是要和mysql的数据库驱动一样,都是放在WEB-INF/lib目录下的。

        • 什么时候需要将jar包放到WEB-INF/lib目录下?如果这个jar是tomcat服务器没有的。

    • 第二步:在JSP中引入要使用标签库。(使用taglib指令引入标签库。)

      • JSTL提供了很多种标签,你要引入哪个标签????重点掌握核心标签库。

      • <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
        这个就是核心标签库。
        prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"
    • 第三步:在需要使用标签的位置使用即可。表面使用的是标签,底层实际上还是java程序。

  • JSTL标签的原理

    <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    以上uri后面的路径实际上指向了一个xxx.tld文件。
    tld文件实际上是一个xml配置文件。
    在tld文件中描述了“标签”和“java类”之间的关系。
    以上核心标签库对应的tld文件是:c.tld文件。它在哪里。
    在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下,有一个c.tld文件。
    • 源码解析:配置文件tld解析

      <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>
    • jstl中的核心标签库core当中有哪些常用的标签呢?

      • c:if

        • <c:if test="boolean类型,支持EL表达式"></c: 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类型。--%>
          <c:if test="${empty param.username}">
          <h1>用户名不能为空。</h1>
          </c:if>
          
          <%--没有else标签的话,可以搞两个if出来。--%>
          <%--if标签还有var属性,不是必须的。--%>
          <%--if标签还有scope属性,用来指定var的存储域。也不是必须的。--%>
          <%--scope有四个值可选:page(pageContext域)、request(request域)、session(session域)、application(application域)--%>
          <%--将var中的v存储到request域。--%>
          <c:if test="${not empty param.username}" var="v" scope="request">
              <h1>欢迎你${param.username}。</h1>
          </c:if>
          
          <hr>
          <%--通过EL表达式将request域当中的v取出--%>
          <%--v变量中存储的是test属性的值。--%>
          ${v}
      • c:forEach

        • <c:forEach items="集合,支持EL表达式" var="集合中的元素" varStatus="元素状态对象"> ${元素状态对象.count} </c: forEach>

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

        • <%--var用来指定循环中的变量--%>
          <%--begin开始--%>
          <%--end结束--%>
          <%--step步长--%>
          <%--底层实际上:会将i存储到pageContext域当中。--%>
          <c:forEach var="i" begin="1" end="10" step="1">
              <%--所以这里才会使用EL表达式将其取出,一定是从某个域当中取出的。--%>
              ${i}<br>
          </c:forEach>
          
          <hr>
          <%--var="s"这个s代表的是集合中的每个Student对象--%>
          <%--varStatus="这个属性表示var的状态对象,这里是一个java对象,这个java对象代表了var的状态"--%>
          <%--varStatus="这个名字是随意的"--%>
          <%--varStatus这个状态对象有count属性。可以直接使用。--%>
          <c:forEach items="${stuList}" var="s" varStatus="stuStatus">
              <%--varStatus的count值从1开始,以1递增,主要是用于编号/序号。--%>
              编号:${stuStatus.count},id:${s.id},name:${s.name} <br>
          </c:forEach>
          
      • c:choose c:when c:otherwise

        <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>

改造OA

  • 使用什么技术改造呢?

    • Servlet + JSP + EL表达式 + JSTL标签。进行改造。

  • 在前端HTML代码中,有一个标签,叫做base标签,这个标签可以设置整个网页的基础路径。

<base href="${pageContext.request.scheme}://${pageContext.request.serverName}:${pageContext.request.serverPort}${pageContext.request.contextPath}/">

注意html的base标签可能对JS代码不起作用。所以JS代码最好前面写上"/oa" 

<script type="text/javascript">
    function del(dno) {
        var ok = window.confirm("亲,删了不可恢复哦!");
        if (ok) {
            /*注意html的base标签可能对JS代码不起作用。所以JS代码最好前面写上"/oa" */
            document.location.href = "${pageContext.request.contextPath}/dept/delete?deptno=" + dno;
        }
    }
</script>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值