JSTL标签库

news/2024/5/18 13:12:06 标签: java, servlet, jstl

英文全称:Java Standard Tag Lib(Java标准的标签库)

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

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

使用JSTL标签库的步骤:

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

                tomcat10之前引入的jar包是:

                        taglibs-standard-impl-1.2.1.jar

                        taglibs-standard-spec-1.2.1.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当中。然后选中jar包,右击鼠标,点击“Add Lib...”

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

                什么时候需要将jar包放到WEB-INF/lib目录下?

                        回答:如果这个jar包是tomcat服务器没有的就需要放到WEB-INF/lib目录下。

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

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

                        <%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>这个就是核心标签库。
                prefix="这里随便起一个名字就行了,核心标签库,大家默认的叫做c,你随意。"说是随意,但是最好跟随大家的脚步。

        第三步:在需要使用标签的位置使用即可。表面上使用的是标签,底层实际上还是java程序。

JSTL标签的原理

        JSP文件中使用<%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>引入核心库标签
      以上uri后面的路径实际上指向了一个xxx.tld文件。
               1.tld文件实际上是一个xml配置文件。
               2.在tld文件中描述了“标签”和“java类”之间的关系。
               3.以上核心标签库对应的tld文件是:c.tld文件。它在哪里。
                       回答:在jakarta.servlet.jsp.jstl-2.0.0.jar里面META-INF目录下,有一个c.tld文件。

源码解析:配置文件tld解析

<tag>

    <description>以下内容是对该标签的描述</description>

    <name>catch</name> 标签的名字是catch

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

以下是JSP文件中的使用:

        <%@taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>

        <c:catch var="">

                JSP....

        </c:catch>

JSTL中的核心标签库core当中常用的标签如下:

1.c:if

<body>

        <%--

                <c:if/>

                        if标签用来做if判断。

                        test属性表示判断的条件(使用EL表达式输出)

        --%>

        <%-- 如果test="${66 == 66}"条件为真 输出66等于66 --%>

        <c:if test="${66 == 66}">

                <h1>66等于66</h1>

        </c:if>

        <%-- 如果test="${66 != 66}"条件为真 输出66不等于66 --%>

        <c:if test="${66 != 66}">

                <h1>66不等于66</h1>

        </c:if>

</body>

2.c:foreach  (下面代码是完整的JSP页面代码,介绍foreach标签的使用)

<%@pageimport="java.util.Map"%>

<%@pageimport="java.util.HashMap"%>

<%@pageimport="java.util.List"%>

<%@pageimport="com.bjpowernode.entity.Person"%>

<%@pageimport="java.util.ArrayList"%>

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

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>

<html>

        <head>

                <title>foreach标签</title>

        </head>

        <body>

                <%--

                        1.遍历1到10,并输出。

                                begin属性设置开始的索引

                                end属性设置结束的索引

                                var属性表示循环的变量(也是当前正在遍历到的数据)

 

                        类似Java中的代码:

                        for(inti=1; i<10; i++){

                                System.out.print(i);

                        }

                --%>

                <c:forEach begin="1" end="10" var="i">

                        ${i}

                </c:forEach>

                <hr>

                <c:forEach begin="1" end="10" var="i">

                        ${i}<br/>

                </c:forEach>

                <hr>

                <tableborder="1">

                        <c:forEach begin="1" end="10" var="i">

                        <tr>

                                <td>${i}</td>

                        </tr>

                        </c:forEach>

                </table>

                <hr>

                <c:forEach var="i" begin="1" end="9">

                        <h1>${i}</h1>

                </c:forEach>

                <%--

                        2.遍历Object数组

                                items表示遍历的数据源(遍历的集合)

                                var表示当前遍历到的数据

                --%>

                <%--下面首先准备一个Object数组并添加到请求作用域中成为共享数据--%>

                <%

                        request.setAttribute("array",newString[]{"abc","111","good"});

                %>

                <c:forEach items="${requestScope.array}" var="item">

                        ${item}

                </c:forEach>

                <hr>

                <%--

                        3.遍历Map集合

                                items表示被遍历的集合

                                var表示遍历到的元素

                --%>

                <%--下面我们现在先准备一个Map集合,并存入到请求作用域中--%>

                <%

                        Map<String,Object> map = newHashMap<>();

                        map.put("key1","value1");

                        map.put("key2","value2");

                        map.put("key3","value3");

                        request.setAttribute("map",map);

                %>

                <c:forEach items="${requestScope.map}" var="entry">

                        ${entry}<br/>

                </c:forEach>

                <hr/>

                <%--

                        4.遍历List集合

                                items表示遍历的集合

                                var表示遍历到的数据

                                begin表示遍历开始的索引值

                                end表示结束遍历的索引值

                                step表示遍历的步长值也就是i++或者i+=2...

                                varStatus表示当前遍历到的数据的状态

                                比如:varStatus="status"

                                        status就具有如下方法:

                                                status.getCurrent获取当前遍历到的数据

                                                status.getIndex获取遍历到的索引值

                                                status.getCount获取遍历数据的个数

                                                status.isFirst当前遍历的数据是否是第一条

                                                status.isLast当前遍历的数据是否是最后一条

                                                status.getBegin获取属性begin的值

                                                status.getEnd获取属性end的值

                                                status.getStep获取属性step的值

                --%>

                <%

                        List<Person> personList = newArrayList<Person>();

                        personList.add(newPerson(1,"张三","123",18,"13033335555"));

                        personList.add(newPerson(2,"李四","123",19,"13033334444"));

                        personList.add(newPerson(3,"王五","123",22,"13033333333"));

                        personList.add(newPerson(4,"赵六","123",20,"13033336666"));

                        personList.add(newPerson(5,"孙七","123",21,"13033337777"));

                        request.setAttribute("list",personList);

                %>

                <tableBORDER="1">

                        <tr>

                                <th>编号</th>

                                <th>姓名</th>

                                <th>密码</th>

                                <th>年龄</th>

                                <th>电话</th>

                                <th>操作</th>

                        </tr>

                        <c:forEachitems="${requestScope.list}"var="preson">

                        <tr>

                                <td>${preson.id}</td>

                                <td>${preson.name}</td>

                                <td>${preson.pwd}</td>

                                <td>${preson.age}</td>

                                <td>${preson.phone}</td>

                                <td>修改/删除</td>

                        </tr>

                        </c:forEach>

                </table>

        </body>

</html>

程序运行之后,浏览器页面显示效果如下:

3.<c:choose> <c:when> <c:otherwise>标签  (下面代码是完整的JSP页面代码,介绍这几个标签的使用)

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

<%@pagecontentType="text/html;charset=UTF-8"language="java"%>

<html>

        <head>

                <title>choose-when-otherwise</title>

        </head>

        <body>

                <%--

                        <c:choose><c:when><c:otherwise>标签

                                作用:多路判断。跟switch...case....default非常接近

                                choose标签开始选择判断

                                when标签表示每一种判断情况

                                test属性表示当前这种判断情况的值

                                otherwise标签表示剩下的情况

                        <c:choose><c:when><c:otherwise>标签使用时需要注意的点:

                                1、标签里不能使用html注释,要使用jsp注释

                                2、when标签的父标签一定要是choose标签

                --%>

                <%-- 在请求作用域中存入数据 --%>

                <%

                        request.setAttribute("height",150);

                %>

                <c:choose>

                        <c:when test="${requestScope.height>=190}">

                                <h2>小巨人</h2>

                        </c:when>

                        <c:when test="${requestScope.height>=180}">

                                <h2>很高</h2>

                        </c:when>

                        <c:when test="${requestScope.height>=170}">

                                <h2>还可以</h2>

                        </c:when>

                        <c:otherwise>

                                <c:choose>

                                        <c:when test="${requestScope.height>160}">

                                                <h3>大于160</h3>

                                        </c:when>

                                        <c:when test="${requestScope.height>150}">

                                                <h3>大于150</h3>

                                        </c:when>

                                        <c:when test="${requestScope.height>140}">

                                                <h3>大于140</h3>

                                        </c:when>

                                        <c:otherwise>

                                                其他小于140

                                        </c:otherwise>

                                </c:choose>

                        </c:otherwise>

                </c:choose>

        </body>

</html>

程序运行之后,在浏览器页面显示结果如下:

 


http://www.niftyadmin.cn/n/229651.html

相关文章

Mysql【安装教程】

Mysql安装教程 1.安装教程 可以去官网下载这个版本的&#xff1a;mysql-installer-community-8.0.31.0 双击点开&#xff0c;选择自定义&#xff1a; 选择主键&#xff1a;左边选择之后就点蓝色按钮添加到右边去&#xff0c;next&#xff1a; 如果出现这个页面&#xff0c…

数据库----------自增长约束、非空约束

目录 1.自增长约束(auto_increment) 1.概念 2.特点 3.指定自增字段初始值 4.delete和truncate在删除后自增列的变化 2.非空约束(not null) 1.概念 2.语法 3.添加非空约束 4.删除非空约束 1.自增长约束(auto_increment) 1.概念 在MysQL中&#xff0c;当主键定义为自增…

Redis分布式锁这样用,有坑?

背景 在微服务项目中&#xff0c;大家都会去使用到分布式锁&#xff0c;一般也是使用Redis去实现&#xff0c;使用RedisTemplate、Redisson、RedisLockRegistry都行&#xff0c;公司的项目中&#xff0c;使用的是Redisson&#xff0c;一般你会怎么用&#xff1f;看看下面的代码…

算法 贪心2 || 122.买卖股票的最佳时机II 55. 跳跃游戏 45.跳跃游戏II

122.买卖股票的最佳时机II 如果想到其实最终利润是可以分解的&#xff0c;那么本题就很容易了&#xff01; 如何分解呢&#xff1f; 假如第0天买入&#xff0c;第3天卖出&#xff0c;那么利润为&#xff1a;prices[3] - prices[0]。 相当于(prices[3] - prices[2]) (prices[2…

相机坐标系、像素坐标系转换

相机内参矩阵是相机的重要参数之一&#xff0c;它描述了相机光学系统的内部性质&#xff0c;例如焦距、光学中心和图像畸变等信息。在计算机视觉和图形学中&#xff0c;相机内参矩阵通常用于将图像坐标系中的像素坐标转换为相机坐标系中的三维坐标&#xff0c;或者将相机坐标系…

【RabbitMQ学习日记】—— 再见RabbitMQ

一、发布确认高级篇 在生产环境中由于一些不明原因&#xff0c;导致 rabbitmq 重启&#xff0c;在 RabbitMQ 重启期间生产者消息投递失败&#xff0c;导致消息丢失&#xff0c;需要手动处理和恢复如何才能进行 RabbitMQ 的消息可靠投递呢&#xff1f; 特别是在这样比较极端的情…

nvidia-smi 各种命令

各种命令网站 点 主频 显卡就像一家工厂&#xff0c;工厂的工人是GPU。而主频就相当于工人的工作效率&#xff0c;主频越高&#xff0c;意味着工人的工作效率越高&#xff0c;能在单位时间内完成更多的任务。但同时&#xff0c;工作效率越高&#xff0c;工人们就越容易疲劳&…

windows 如何切换 java 版本

解决下载安装配置java的困难 「下載java jdk」 &#xff0c; 有 jdk 20\17\11\8 和 jre 8 删除oracle自带的环境变量 为了避免oracle设置的变量影响&#xff0c;需要先手动删除Path中的下列变量&#xff1a; C:\Program Files (x86)\Common Files\Oracle\Java\javapath可以…