首页 > 其他分享 >深度解析JSTL标签库

深度解析JSTL标签库

时间:2023-06-03 13:33:19浏览次数:41  
标签:stuList java 标签 jar JSTL Student 解析

1. 什么是JSTL标签库?  53

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

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

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

2. 使用JSTL标签库的步骤:53

2.1 第一步:引入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服务器没有的。

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

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

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

      这个就是核心标签库。

  prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"

2.3  第三步:在需要使用标签的位置使用即可。

表面使用的是标签,底层实际上还是java程序。

代码在E:\java学习\javaWeb\course\course25\web

17.jsp
<%--深度学习JSTL标签库   53--%>
<%@ page import="java.util.List" %>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %>
<%@ page import="java.util.ArrayList" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%--引入标签库 这里引入的是jstl的核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%--格式化标签库,专门负责格式化操作的。--%>
<%--<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>--%>

<%--sql标签库--%>
<%--<%@taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql" %>--%>

<%
    //创建list集合
    List stuList = new ArrayList<>();
    //创建Student对象
    Student s1 = new Student("110", "警察");
    Student s2 = new Student("120", "救护车");
    Student s3 = new Student("119", "消防车");
    //添加到List集合中
    stuList.add(s1);
    stuList.add(s2);
    stuList.add(s3);
    //将list集合存储到request域当中
    request.setAttribute("stuList",stuList);
%>

<%--需求:将List集合中的元素遍历。输出学生信息到浏览器--%>
<%--使用java代码--%>
<%
    //从域中获取list集合
    List stus = (List) request.getAttribute("stuList");
    //编写for循环遍历list集合
    for (Student stu : stus) {
%>
        id:<%=stu.getId()%>,name:<%=stu.getName()%>

<%
    }
%>


<%--使用core标签库中forEach标签。对List集合进行遍历--%>
<%--EL表达式只能从域中取数据。--%>
<%--var后面的名字是随意的。var属性代表的是集合中的每一个元素。--%>
<c:forEach items="${stuList}" var="s">
    id:${s.id},name${s.name}

c:forEach>

3. JSTL标签的原理   53

    <%@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文件。

3.1 源码解析:配置文件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>
      

4. jstl中的核心标签库core当中有哪些常用的标签呢?54

4.1 c:if

代码在E:\java学习\javaWeb\course\course25\web

18.jsp

<%--深度学习JSTL标签库常用的标签库 c:if  54--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%--引入标签库 这里引入的是jstl的核心标签库--%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--核心标签库中的if标签--%>
<%--test属性是必须的。test属性支持EL表达式。test属性值只能是boolean类型。--%>
<c:if test="${empty param.username}">
    
用户名不能为空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">
    
欢迎你${param.username}h1>
c:if>
<%--通过EL表达式将request域当中的v取出--%>
<%--v变量中存储的是test属性的值。--%>
${v}

4.2 c:forEach

 ${元素状态对象.count} 

 ${i} 

代码在E:\java学习\javaWeb\course\course25\web

19.jsp

<%--深度学习JSTL标签库常用的标签库c:forEach   54--%>
<%@ page import="com.bjpowernode.javaweb.jsp.bean.Student" %>
<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--var用来指定循环中的变量--%>
<%--begin开始--%>
<%--end结束--%>
<%--step步长--%>
<%--底层实际上:会将i存储到pageContext域当中。--%>
<c:forEach var="i" begin="1" end="10" step="1" >
    <%--所以这里才会使用EL表达式将其取出,一定是从某个域当中取出的。--%>
    ${i}

c:forEach>



<%
    //创建list集合
    List stuList = new ArrayList<>();
    //创建Student对象
    Student s1 = new Student("110", "警察");
    Student s2 = new Student("120", "救护车");
    Student s3 = new Student("119", "消防车");
    //添加到List集合中
    stuList.add(s1);
    stuList.add(s2);
    stuList.add(s3);
    //将list集合存储到request域当中
    request.setAttribute("stuList",stuList);
%>


<%--使用core标签库中forEach标签。对List集合进行遍历--%>
<%--EL表达式只能从域中取数据。--%>
<%--var后面的名字是随意的。var属性代表的是集合中的每一个元素。--%>
<%--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}

c:forEach>

4.3 c:choose c:when c:otherwise

代码在E:\java学习\javaWeb\course\course25\web

20.jsp

<%--深度学习JSTL标签库常用的标签库c:choose   54--%>
<%@page contentType="text/html;charset=UTF-8" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%--c:choose类似于--%>
<%--
    if(){

    }else if(){

    }else if(){

    }else if(){

    }else{

    }
--%>

<%--注意:这个嵌套结构不能随便改,只能这样嵌套。--%>
<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>

标签:stuList,java,标签,jar,JSTL,Student,解析
From: https://blog.51cto.com/u_15784725/6407824

相关文章

  • SVG标签的Xpath定位方法(关闭Tab标签页)
    svg(可伸缩矢量图形 )在前端应用中广泛被使用,然而采用传统的xpath元素定位方法已经无法对其进行定位,我们需要将svg标签及其包含的子标签用以下方式表达:工作时遇到一个问题,就是想删除Tab标签页,但是标签的关闭是个SVG标签,用传统的Xpath标签无法定位,查找了一些资料,参考了两个别人分享......
  • Fragment原理解析androidx版本&ViewPager与Fragment
    资料Fragment生命周期为什么要通过Fragment.setArguments(Bundle)传递参数单独问题:动态方式,静态方式添加随Activity启动动态添加回退栈onSaveInstance静态方式添加FragmentmHost是这个finalFragmentControllermFragments=FragmentController.createController(newHostCallb......
  • Java 计算数学表达式(字符串解析求值工具)
    Java字符串转换成算术表达式计算并输出结果,通过这个工具可以直接对字符串形式的算术表达式进行运算,并且使用非常简单。这个工具中包含两个类Calculator和ArithHelperCalculator代码如下:importjava.util.Collections;importjava.util.Stack;/***算数表达式求值*......
  • 【C语言】动态内存管理函数的 深度解析 #是不是对数组不能变大变小而烦恼呢?学会动态内
    前言动态内存管理函数可以说很好用,但是有些小危险。所谓动态内存分配,就是指在程序执行的过程中动态地分配或者回收存储空间的分配内存的方法。动态内存分配不像数组等静态内存分配方法那样需要预先分配存储空间,而是由系统根据程序的需要即时分配,且分配的大小就是程序要求......
  • 全面解析立体拼合问题
    立体拼合在国考中必考,所以必须拿下,总结了不同的题型。1、普通拼合推荐做题步骤:排除一眼错→大致看个数(能否试拼)→分层画图法数个数(选项个数不一样)试拼(找特殊块→“占地大”的)分层画图法(化立体为平面、化拼为拆)分层凑数法(所谓的“零空间想象”)2、题型解法2.1、数个数类型......
  • 数据隐私为先:EMQX Cloud BYOC 架构解析
    随着物联网的飞速发展,保护数据隐私和安全变得愈发重要。构建一个安全、可靠、可扩展的物联网基础设施成为企业的首要任务。EMQ近期推出了EMQXCloudBYOC,采用了以数据隐私为先的架构,为解决这些问题提供了一个理想的方案。用户可以在自己的云环境中部署MQTT集群,完全掌控自己的......
  • span标签样式表
    title:SpanListcategories:-手册1《半小时漫画中国哲学史》2“既许一人以偏爱,愿尽余生之慷慨”3data.json文件链接4当使用重做日志文件来进行数据库恢复时,ORACLE将读取其中的重做记录(包括其中的修改向量),并且将这些修改用于相关的块中。5存储结构管理主要就......
  • 《深度剖析CPython解释器》16. Python函数机制的深度解析(第三部分): 闭包的底层实现
    https://www.cnblogs.com/traditional/p/13580694.html楔子上一篇我们看了函数是如何调用的,这一次我们看一下函数中局部变量的访问、以及闭包相关的知识。函数中局部变量的访问我们说过函数的参数和函数内部定义的变量都属于局部变量,所以它也一样是通过静态的方式进行访问。......
  • 视频美颜sdk是什么?技术解析与实现原理详解
    视频美颜技术的发展则为人们提供了一种美化自己的方式,因此,视频美颜技术成为了一个备受关注的领域。在这个领域中,视频美颜sdk技术则是实现高效美颜的关键因素之一。本文将从技术角度分析视频美颜sdk的实现原理和优势。一、视频美颜技术的概述视频美颜技术是一种基于计算机视觉和图像......
  • 使用dom4j解析mybatis核心配置文件
    1. 代码   32-34test代码在com.powernode.xml.testParseXMLByDom4jTestpackagecom.powernode.xml.test;importorg.dom4j.Document;importorg.dom4j.Element;importorg.dom4j.Node;importorg.dom4j.io.SAXReader;importorg.junit.Test;importjava.io.InputStream......