JSTL标签库

news2024/11/8 23:31:17

英文全称: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.coloradmin.cn/o/420707.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Ubuntu 开机启动 通过crontab定时器去检查脚本 实现

有个项目的程序需要实现开机启动 通过添加一个qmcy.service服务的方法 发现 确实执行脚本了 但是脚本的程序缺并没有起来 但是如果手动执行这个脚本 程序是能起来的 不知道为啥 没办法 网上搜了下 可以通过 crontab定时器去检查 程序是否启动 没启动的话去 执行对应的脚…

【毕业设计】基于程序化生成和音频检测的生态仿真与3D内容生成系统----程序化生成多图层地形贴图的算法设计

(2条消息) 【开发日志】2023.04 ZENO----Image Processing----CompositeCV、Composite2、Composite3_EndlessDaydream的博客-CSDN博客 (2条消息) 【开发日志】2023.04 ZENO----Image Processing----ImageEdit、EditRGB、EditHSV_EndlessDaydream的博客-CSDN博客 (2条消息) 【…

telegraf在iiot领域的基本应用(Modbus,OPC)

熟悉telegraf是因为influxdb缘故&#xff0c;当时telegraf主要是作为granfa监控的agent一环&#xff0c;很多文章有相关的介绍&#xff0c;但作为java开发对telegraf&#xff08;go语言开发&#xff09;也仅仅只是适用级别&#xff0c;这边文章也只讲到一些简单的应用。希望能帮…

<STM32>STM32CubeMX-CAN通信(扫描读取数据方式)(5)

&#xff1c;STM32&#xff1e;STM32CubeMX-CAN通信&#xff08;扫描读取数据方式&#xff09;&#xff08;5&#xff09; 本节主要讲解CAN通信的功能&#xff0c;主要采用扫面检测接收数据的方式&#xff1b; CAN的详细解说可参考《STM32F4XXX中文参考手册》&#xff0c;资料有…

CDH 之 Kerberos 安全认证和 Sentry 权限控制管理(一)

一、Kerberos 和 Sentry 概述 1.1 什么是 Kerberos Kerberos是一种计算机网络授权协议&#xff0c;用来在非安全网络中&#xff0c;对个人通信以安全的手段进行身份认证。这个词又指麻省理工学院为这个协议开发的一套计算机软件。软件设计上采用客户端/服务器结构&#xff0c;…

java微服务商城高并发秒杀项目--011.授权规则和系统规则

授权规则在shop-order-server中新建RequestOriginParserDefinition.java,定义请求来源如何获取Component public class RequestOriginParserDefinition implements RequestOriginParser {Overridepublic String parseOrigin(HttpServletRequest request) {/*** 定义从请求的什么…

文本分类论文阅读

1.ChineseBERT: Chinese Pretraining Enhanced by Glyph and Pinyin Information&#xff08;ACL2021&#xff09; 字形嵌入根据汉字的不同字体获得&#xff0c;能够从视觉特征中捕捉汉字语义&#xff0c;拼音嵌入表征汉字的发音&#xff0c;解决了汉语中非常普遍的异义异义现…

四、vue基础-指令(一)、vscode代码片段

一、vscode代码片段 我们在前面联系Vue的过程中&#xff0c;有些代码片段是需要经常写的&#xff0c;我们再VSCode中我们可以生成一个代码片段&#xff0c;方便我们快速生成。VSCode中的代码片段有固定的格式&#xff0c;所以我们一般会借助于一个在线工具来完成。 具体步骤如…

01_什么是Uboot

目录 U-Boot简介 获取Uboot U-Boot初次编译 U-Boot烧写与启动 U-Boot简介 Linux系统要启动就必须需要一个bootloader程序(裸机程序),也就说芯片上电以后先运行一段bootloader程序。这段bootloader程序会先初始化DDR等外设,然后将Linux镜像从flash(NAND,NOR FLASH,SD,EMMC等…

【防止恶意用户注册】-- 手机在网状态 API 的防欺诈应用解析

简介 手机在网状态 API 支持传入手机号码&#xff0c;查询手机号在网状态&#xff0c;返回在网、在网不可用、不在网&#xff08;销号/未启用/停机&#xff09;等多种状态&#xff0c;查询手机号在网状态之后&#xff0c;可以根据具体的业务需求来进行不同的处理。 本文主要介…

EA的使用---文档的生成

EA中文档的自动生成 1.找到如下界面 2.选择第一个 3.设置存储的位置 4.点击Generate 5.查看生成的文档

ViT Vision Transformer进行猫狗分类

文章目录依赖准备数据集合残差结构PatchEmbed模块Attention模块MLPBlockVisionTransformer结构模型定义定义一个模型训练VISION TRANSFORMER简称ViT&#xff0c;是2020年提出的一种先进的视觉注意力模型&#xff0c;利用transformer及自注意力机制&#xff0c;通过一个标准图像…

【C++STL精讲】string的模拟实现

文章目录&#x1f490;专栏导读&#x1f490;文章导读&#x1f337;定义string类&#x1f337;构造函数&#x1f337;拷贝构造函数&#x1f337;赋值重载&#x1f337;析构函数&#x1f337;[]操作符重载&#x1f337;比较运算符重载&#x1f337;c_str、size、capacity&#x…

模板学堂|DataEase图表样式解析

DataEase开源数据可视化分析平台于2022年6月正式发布模板市场&#xff08;https://dataease.io/templates/&#xff09;。模板市场旨在为DataEase用户提供专业、美观、拿来即用的仪表板模板&#xff0c;方便用户根据自身的业务需求和使用场景选择对应的仪表板模板&#xff0c;并…

「VS」Visual Studio 常用小技巧

目录指定代码不编译设置选中项目为启动项代码区显示行号新建垂直文档组生成后将dll复制到指定目录指定代码不编译 说明&#xff1a;在项目开发时&#xff0c;有时候已经将代码加入到项目中&#xff0c;但有不想要编译时可以一下操作。 文件处右键→属性→常规→从生成中排除→选…

快速解决CentOS中yum下载慢的问题(更换成阿里云)

目录1、备份自带的YUM源2、下载新的yum源3、清除旧的 yum 缓存4、更新yum缓存4、查看更换的阿里云镜像的仓库是否生效。为了下载速度快&#xff0c;每次都要做好镜像的更改&#xff0c;既然次数多&#xff0c;懒得每次还来查资料&#xff0c;就自己写一篇博客加强自己的记忆。 …

Docker环境安装

Docker环境安装Docker简介Docker工作原理Docker的应用场景Docker 的优点CentOS Docker 安装与配置Docker 安装Docker 配置Docker容器概念Docker容器操作拉取镜像删除镜像容器相关命令创建并启动容器停止和恢复容器删除容器Docker简介 Docker 是一个开源的应用容器引擎&#xf…

4年外包上岸,我只能说这类公司能不去就不去

我大学学的是计算机专业&#xff0c;毕业的时候&#xff0c;对于找工作比较迷茫&#xff0c;也不知道当时怎么想的&#xff0c;一头就扎进了一家外包公司&#xff0c;一干就是4年。现在终于跳槽到了互联网公司了&#xff0c;我想说的是&#xff0c;但凡有点机会&#xff0c;千万…

ChatGPT背后的AI背景、技术门道和商业应用(万字长文,建议收藏)

作者&#xff1a;京东科技 李俊兵 各位看官好&#xff0c;我是球神&#xff08;江湖代号&#xff09;。 自去年11月30日ChatGPT问世以来&#xff0c;迅速爆火出圈。 起初我依然以为这是和当年Transformer, Bert一样的“热点”模型&#xff0c;但是当一篇篇文章/报告不断推送…

计算机网络面试八股文攻略(二)—— TCP 与 UDP

一、基础概念 TCP 与 UDP 是活跃于 运输层 的数据传输协议 TCP&#xff1a;传输控制协议 &#xff08;Transmission Control Protocol&#xff09;–提供面向连接的&#xff0c;可靠的数据传输服务。具体来说就是一种要建立双端连接才能发送数据&#xff0c;能确保传输可靠的…