JSP——标准标签库 (JSTL)

news2025/1/6 20:22:16

在这里插入图片描述

✅作者简介:热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:JAVA开发者成长之路
✨特色专栏:国学周更-心性养成之路
🥭本文内容:JSP——EL表达式
更多内容点击👇
      JSP——EL表达式

本文目录

    • 1.1 EL现有问题
    • 1.2 什么是JSTL
    • 1.3 JSTL的作用
    • 1.4 JSTL使用
    • 1.5 核心标签
      • 1.5.1 条件标签if判断
      • 1.5.2 多条件choose判断
      • 1.5.3 迭代foreach
      • 1.5.4 url标签
    • 1.6 整合

在这里插入图片描述

1.1 EL现有问题

  • EL主要是用于作用域获取数据,虽然可以做运算判断,但是得到的都是一个结果,做展示
  • EL不存在流程控制。比如判断。
  • EL对于集合只能做单点访问,不能实现遍历操作。比如循环。

1.2 什么是JSTL

(1)JSTL:全称为Java Server Standard Tag Library

(2)JSP标准标签库(JSTL)是一个JSP标签集合

1.3 JSTL的作用

  • 可对EL获取的数据进行逻辑操作
  • 与EL合作完成数据的展示

1.4 JSTL使用

  • 导入两个jar文件:standard.jar和jstl.jar文件拷贝到/WEB-INF /lib/下
  • 在JSP页面引入标签库<%@taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” >

1.5 核心标签

1.5.1 条件标签if判断

语法:<c:if test="条件"></c:if>

案例代码

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            request.setAttribute("username", "zhangsan");
            request.setAttribute("age", 18);

        %>
        <h2>姓名:${username},年龄:${age}</h2>

        <!-- test属性中是条件,条件需要使用EL表达式来实现-->
        <c:if test="${username eq 'zhangsan'}">
            <h2>欢迎你,${username}</h2>
        </c:if>

        <c:if test="${username ne 'zhangsansan'}">
            <h2>请重新登录</h2>
        </c:if>


    </body>
</html>

效果展示:

在这里插入图片描述

1.5.2 多条件choose判断

语法:
<c:choose>
	<c:when test="条件1">结果1</c:when>
	<c:when test="条件2">结果2</c:when>
	......
	<c:when test="条件n">结果n</c:when>
	<c:otherwise>结果m</c:otherwise>
</c:choose>

案例代码:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            request.setAttribute("username", "zhangsan");
            request.setAttribute("age", 35);

        %>
        <h2>姓名:${username},年龄:${age}</h2>

        <%--根据年龄判断--%>
        <c:choose>
            <c:when test="${age<18}"><h2>少年</h2></c:when>
            <c:when test="${age>=18 and age<30}"><h2>青年</h2></c:when>
            <c:when test="${age>=30 and age<50}"><h2>中年</h2></c:when>
            <c:otherwise><h2>老年</h2></c:otherwise>
        </c:choose>


    </body>
</html>

效果展示:

在这里插入图片描述

1.5.3 迭代foreach

语法:
<c:foreach var="变量名" items="集合" begin="起始下标" end="结束下标" step="间隔长度" varstatus="遍历状态"></c:foreach>

案例一代码:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.cxyzxc.www.entity.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List<String> list = new ArrayList<>();
            list.add("A");
            list.add("B");
            list.add("C");
            list.add("D");
            list.add("E");
            list.add("F");
            list.add("G");
            request.setAttribute("list", list);
        %>

        <h2>Java中增强for循环遍历</h2>
        <%
            for(String str:list){
                out.println(str);
            }
        %>

        <hr />

        <h2>JSTL迭代foreach</h2>
        <!--
            var:变量名
            items:遍历的数组或者集合名,用EL表达式表示
            begin:开始下标
            end:结束下标
            step:间隔长度
            varStatus:遍历状态
                first:是否是第一行
                last:是否是最后一行
                count:当前行数
                index:当前元素下标
         -->
        <c:forEach var="str" items="${list}" begin="0" end="5" step="2" varStatus="sta">
            <p>${str}&nbsp;&nbsp;${sta.first}&nbsp;&nbsp;${sta.last}&nbsp;&nbsp;${sta.count}&nbsp;&nbsp;${sta.index}</p>
        </c:forEach>
    </body>
</html>

效果展示:

在这里插入图片描述
案例二代码:

<%@ page import="java.util.List" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="com.cxyzxc.www.entity.User" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            List<User> users = new ArrayList<User>();
            users.add(new User("张三","123456"));
            users.add(new User("李四","123456"));
            users.add(new User("王五","123456"));
            users.add(new User("赵六","123456"));
            users.add(new User("孙七","123456"));
            users.add(new User("吴八","123456"));
            users.add(new User("周九","123456"));
            request.setAttribute("users", users);
        %>

        <h2>所有用户信息</h2>
        <!--
            var:变量名
            items:遍历的数组或者集合名,用EL表达式表示
            begin:开始下标
            end:结束下标
            step:间隔长度
            varStatus:遍历状态
                first:是否是第一行
                last:是否是最后一行
                count:当前行数
                index:当前元素下标
         -->
        <table border="1" width="500px" cellspacing="0">
            <tr>
                <th>用户名</th>
                <th>密码</th>
                <th>是否是第一个</th>
                <th>是否是最后一个</th>
                <th>计数count</th>
                <th>索引index</th>
            </tr>

        <c:forEach var="user" items="${users}" varStatus="sta">
            <tr>
                <td>${user.username}</td>
                <td>${user.password}</td>
                <td>${sta.first}</td>
                <td>${sta.last}</td>
                <td>${sta.count}</td>
                <td>${sta.index}</td>
            </tr>
        </c:forEach>
        </table>

    </body>
</html>

效果展示:

在这里插入图片描述

1.5.4 url标签

(1)在Cookie禁用的情况下,通过重写URL拼接JESSIONID来传递ID值。便于下一次访问时仍可查到上一次的Session对象

(2)语法:<c:url context=‘${pageContext.request.contextPath}’ value=‘/xxxController’ />

(3)注意:所有涉及到页面跳转或者重定向跳转时。都应该使用URL重写

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
    <head>
        <title>Title</title>
    </head>
    <body>
        <%
            String newURL = response.encodeRedirectURL(request.getContextPath() + "/jstl/JstlDemo04.jsp");
        %>
        <%=newURL%>

        <a href="<%=response.encodeRedirectURL(request.getContextPath()+"/jstl/JstlDemo04.jsp")%>">跳转</a>
        <br/>


        <c:url context="${pageContext.request.contextPath}" value="/jstl/JstlDemo04.jsp"></c:url>

        <a href="<c:url context='${pageContext.request.contextPath}' value='/jstl/JstlDemo04.jsp'></c:url>">跳转2</a>
    </body>
</html>

效果展示:

在这里插入图片描述

1.6 整合

将现有EmpProject项目进行整合,使用EL+JSTL替换脚本代码


  码文不易,本篇文章就介绍到这里,如果想要学习更多Java系列知识点击关注博主,博主带你零基础学习Java知识。与此同时,对于日常生活有困扰的朋友,欢迎阅读我的第四栏目:《国学周更—心性养成之路》,学习技术的同时,我们也注重了心性的养成。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/146636.html

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

相关文章

5G NR标准: 第19章 毫米波射频技术

第19章 毫米波射频技术 现有的 2G、3G 和 4G 移动通信 3GPP 规范适用于 6 GHz 以下的频率范围&#xff0c;相应的 RF 要求考虑了与 6 GHz 以下操作相关的技术方面。 NR 也在这些频率范围内运行&#xff08;标识为频率范围 1&#xff09;&#xff0c;但另外还将定义为在 24.25…

【人工智能原理自学】梯度下降和反向传播:能改

&#x1f60a;你好&#xff0c;我是小航&#xff0c;一个正在变秃、变强的文艺倾年。 &#x1f514;笔记来自B站UP主Ele实验室的《小白也能听懂的人工智能原理》。 &#x1f514;本文讲解梯度下降和反向传播&#xff1a;能改&#xff0c;一起卷起来叭&#xff01; 目录一、“挪…

Rollup Decentralization

1. 引言 当前的Rollup为中心化的&#xff0c;这并不是必须的&#xff0c;而是当前的选择。 2. 何为Rollup&#xff1f; Rollup与其它L2或侧链的主要区别在于&#xff1a; L1数据可用性 Rollup&#xff1a;只要L1的数据可用性存在&#xff0c;用户可重构L2状态&#xff0c;然…

SQL LIKE 操作符

LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 SQL LIKE 操作符 LIKE 操作符用于在 WHERE 子句中搜索列中的指定模式。 SQL LIKE 语法 SELECT column1, column2, ... FROM table_name WHERE column LIKE pattern; 参数说明&#xff1a; column1, column2, ...&…

php://filter伪协议(总结)

文章目录php://filter伪协议总结php://filter伪协议介绍php://filter伪协议使用方法php://filter过滤器分类filter字符串过滤器string.rot13string.toupperstring.tolowerstring.strip_tagsfilter转换过滤器convert.base64-encodeconvert.base64-decodeconvert.quoted-printabl…

【Kotlin】空安全 ① ( Kotlin 的空安全机制 | 变量可空性 | 默认变量不可赋空值 | 声明可空类型变量 )

文章目录一、Kotlin 的空安全机制二、变量可空性1、默认变量不可赋空值2、声明可空类型变量一、Kotlin 的空安全机制 Java 中的空指针问题 : 在 Java 语言 编写的程序中 , 出现最多的崩溃就是 NullPointerException 空指针异常 , 该异常是 运行时 才爆出的 , 在 代码编写时 以…

冰冰学习笔记:C++11的新特性

欢迎各位大佬光临本文章&#xff01;&#xff01;&#xff01; 还请各位大佬提出宝贵的意见&#xff0c;如发现文章错误请联系冰冰&#xff0c;冰冰一定会虚心接受&#xff0c;及时改正。 本系列文章为冰冰学习编程的学习笔记&#xff0c;如果对您也有帮助&#xff0c;还请各位…

k8s入门教程

文章导读 kubernetes&#xff0c;是一个全新的基于容器技术的分布式架构领先方案&#xff0c;是谷歌严格保密十几年的秘密武器----Borg系统的一个开源版本&#xff0c;于2014年9月发布第一个版本&#xff0c;2015年7月发布第一个正式版本。 kubernetes的本质是一组服务器集群&…

创建自己的docker镜像

dockerfile案例1导入dockerfiel以及java文件导入后第一步docker build -t javaweb:1.0 .docker build -t &#xff08;名称以及对应的版本&#xff09;javaweb:1.0 .&#xff08;空格之后的一个点表示从当前目录开始&#xff09;导入成功之后运行容器即可docker run --name web…

二十七、linux系统详解

一、Linux基础篇 1. Linux目录结构 ⑴ 基本介绍: linux的文件系统是采用级层式的树状目录结构&#xff0c;在此结构中的最上层是根目录“/”&#xff0c;然后在此目录下再创建其他的目录。 深刻理解linux树状文件目录是非常重要的&#xff0c;这里我给大家说明一下。 记住一…

Markdown生成目录结构的方法

参考文章&#xff1a;https://www.cnblogs.com/abc-x/p/13470575.htmlmarkdown生成目录结构的方法&#xff1a;示例&#xff1a;project│ README.md│ file001.txt │└───folder1│ │ file011.txt│ │ file012.txt│ ││ └───subfolder1│ │ file111.txt│ │ fil…

【Linux多线程编程】5. 线程锁(2)——死锁、读写锁

前言 上篇文章【Linux多线程编程】4. 线程锁&#xff08;1&#xff09;——互斥锁 我们介绍了线程同步的其中一种方式——互斥锁&#xff0c;互斥锁也可以理解为独占锁&#xff0c;只要有一个线程拿到该锁&#xff0c;其他的线程想要获取只能阻塞等待。但互斥锁的使用不当也可…

【云原生】Ceph 在 k8s中应用

文章目录一、概述二、Ceph Rook 介绍三、通过Rook在k8s中部署Ceph1&#xff09;下载部署包2&#xff09;部署 Rook Operator3&#xff09;创建 Rook Ceph 集群4&#xff09;部署Rook Ceph 工具5&#xff09;部署Ceph Dashboard6&#xff09;检查6&#xff09;通过ceph-tool工具…

VirusTotal智能搜索itw查找从github下载的恶意Android样本

1. Introduction ITW是in the wild的缩写&#xff0c;VirusTotal提供了itw这个搜索关键词&#xff0c;可以搜到从某个url&#xff08;部分url&#xff09;上下载到的样本。 作者写过的其他VirusTotal智能搜索用法的文章见参考1和2. 2. itw使用 比如为了查找从github下载的恶…

Day852.Thread-Per-Message模式 -Java 性能调优实战

Thread-Per-Message模式 Hi&#xff0c;我是阿昌&#xff0c;今天学习记录的是关于Thread-Per-Message模式的内容。 Thread-Per-Message 模式&#xff0c;简言之就是为每个任务分配一个独立的线程。 并发编程领域的问题总结为三个核心问题&#xff1a; 分工同步互斥 其中&…

client-go源码学习(三):Indexer、SharedInformer

本文基于Kubernetes v1.22.4版本进行源码学习&#xff0c;对应的client-go版本为v0.22.4 3、Informer机制 4&#xff09;、Indexer Indexer中有Informer维护的指定资源对象的相对于etcd数据的一份本地缓存&#xff0c;可通过该缓存获取资源对象&#xff0c;以减少对Kubernete…

计算Java对象大小(附实际例子分析)

对象大小如何计算 对象大小包括俩部分的内容&#xff0c;对象头和对象内容。&#xff08;图片源于网络&#xff09; 对象头 此处假设是64位的JVM 对象地址&#xff0c;占4个字节。对象标记&#xff0c;占8个字节&#xff0c;包括锁标记&#xff0c;hashcode, age 等。数组…

python 如何使用 pandas 在 flask web 网页中分页显示 csv 文件数据

目录 一、实战场景 二、知识点 python 基础语法 python 文件读写 python 分页 pandas 数据处理 flask web 框架 jinja 模版 三、菜鸟实战 初始化 Flask 框架&#xff0c;设置路由 jinja 模版 渲染列表数据 分页请求数据 显示详情页数据示例 运行结果 运行截图 …

[oeasy]python0040_换行与回车的不同_通用换行符_universal_newlines

换行回车 回忆上次内容 区分概念 terminal终端 主机网络中 最终的 端点 TeleTYpewriter 电传打印机终端硬件 shell 终端硬件基础上的 软件壳子 Console 控制台 主机旁边 的 控制面板 存储文件 的 时候 我 在文件里 打了回车\n系统 将0x0a存入字节 进文件换行 自动就有 回车…

航空客运订票系统(C语言,软件用的DEV)

这两天整理之前的作业代码&#xff0c;把自己一点一点敲出来的系统又看了一下&#xff0c;挑几个发出来供大家参考。想要源码、报告可以找我啦&#xff0c;代码的注释之前写的都是非常详细的&#xff01; 但是不是无偿的啦&#xff08;不坑&#xff0c;一杯奶茶喽&#xff0c;不…