当前位置: 首页 > news >正文

04、EL和JSTL核心技术

目录

1 EL表达式(熟悉)

1.1 基本概念

1.2 主要功能 

1.3 访问内置对象的数据 

1.3.1访问方式

1.3.2 执行流程 

1.4 访问请求参数的数据 

1.5 访问Bean对象的属性 

 1.5.1 访问方式

1.5.2 主要区别 

1.6 访问集合中的数据 

1.7 常用的内置对象 

1.8 常用的运算符

1.8.1 常用的算术运算符

1.8.2 常用的关系运算符 

1.8.3 常用的逻辑运算符

 1.8.4 条件运算符

 1.8.5 验证运算符

2 JSTL标签(熟悉) 

 2.1 基本概念

 2.3 常用核心标签

 2.3.1 输出标签

 2.3.2 设置标签

 2.3.3 删除标签

 2.3.4 单条件判断标签

 2.3.5 多条件判断标签

 2.3.6 循环标签

 2.4 常用函数标签

 2.5 常用格式化标签

 2.6 自定义标签 


1 EL表达式(熟悉)

1.1 基本概念

  • EL(Expression Language)表达式提供了在JSP中简化表达式的方法,可以方便地访问各种数据并输出。

1.2 主要功能 

  • 依次访问pageContext、request、session和application作用域对象存储的数据。
  • 获取请求参数值。
  • 访问Bean对象的属性。
  • 访问集合中的数据。
  • 输出简单的运算结果。

1.3 访问内置对象的数据 

1.3.1访问方式

<%=request.getAttribute(“ varName”)%>
用EL实现: ${ varName }

1.3.2 执行流程 

1.4 访问请求参数的数据 

  •  在EL之前使用下列方式访问请求参数的数据
request.getParameter(name);
request.getParameterValues(name);
  • 在EL中使用下列方式访问请求参数的数据 
    param:接收的参数只有一个值。
    paramValues:接受的参数有多个值。
<!-- 获取指定参数的数值 --> 
${param.name} 
<!-- 获取指定参数中指定下标的数值 --> 
${paramValues.hobby[0]}

1.5 访问Bean对象的属性 

 1.5.1 访问方式

  • 方式一: $ { 对象名 . 属性名 },例如:${user.name}
  • 方式二: $ { 对象名 [“属性名”] },例如:${user[“name”]}

1.5.2 主要区别 

  • 当要存取的属性名中包含一些特殊字符,如: . 或 ,等并非字母或数字的符号,就一定要使用 [ ]而不是.的方式

  • 使用[]的方式可以动态取值,具体方式如下:

    <% request.setAttribute(“prop”,“age”); %>
    <!-- 相当于表达式中写一个变量 --> 
    ${ user[prop] }
    

1.6 访问集合中的数据 

<!-- student为ArrayList类型的对象 --> 
${student[0].name}

1.7 常用的内置对象 

类别标识符描述
JSPpageContextPageContext 处理当前页面
作用域pageScope同页面作用域属性名称和值有关的Map类
requestScope同请求作用域属性的名称和值有关的Map类
sessionScope同会话作用域属性的名称和值有关的Map类
applicationScope同应用程序作用域属性的名称和值有关的Map类
请求参数param根据名称存储请求参数的值的Map类
paramValues把请求参数的所有值作为一个String数组来存储的Map类
请求头header根据名称存储请求头主要值的Map类
headerValues把请求头的所有值作为一个String数组来存储的Map类
Cookiecookie根据名称存储请求附带的cookie的Map类
初始化参数initParam根据名称存储Web应用程序上下文初始化参数的Map类

1.8 常用的运算符

1.8.1 常用的算术运算符

算术运算符说 明范 例运算结果
+${1+2}3
-${2-1}1
*${2*3}6
/或div${16/5}或${16div5}3.2
% 或 mod取余${16%5}或${16mod5}1

1.8.2 常用的关系运算符 

关系运算符说 明范 例运算结果
==或eq等于${1==2}或${1 eq 2}false
!= 或ne不等于${2!=1}或${1 ne 2}true
< 或lt小于${2<3}或${2 lt 3 }true
> 或 gt大于${16>5}或${16 gt 5}true
<= 或 le小于等于${16<=5}或${16 le 5}false
>= 或 ge大于等于${16>=5}或${16 ge 5}true

1.8.3 常用的逻辑运算符

逻辑运算符说 明范 例运算结果
&& 或 and与运算${true&&true}或${true and true}true
|| 或or或运算${true||false}或${true or false}true
! 或not非运算${!true}或${not true }false

 1.8.4 条件运算符

${条件表达式? 语句1 : 语句2}

 1.8.5 验证运算符

${empty 表达式}  返回布尔值
判断表达式是否为"空"值,null值、无元素的集合或数组、长度为零的String被认为是空值。

2 JSTL标签(熟悉) 

 2.1 基本概念

  • 下载JSTL的jar包并添加到项目中,下载地址为:https://tomcat.apache.org/download-taglibs.cgi
  • 在JSP页面中使用taglib指定引入jstl标签库,方式为:
<!-- prefix属性用于指定库前缀 --> 
<!-- uri属性用于指定库的标识 --> 
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

 2.3 常用核心标签

 2.3.1 输出标签

<c:out></c:out> 用来将指定内容输出的标签

 2.3.2 设置标签

<c:set></c:set> 用来设置属性范围值的标签

 2.3.3 删除标签

<c:remove></c:remove> 用来删除指定数据的标签

 2.3.4 单条件判断标签

<c:if test =“EL条件表达式”> 满足条件执行 
</c:if >

 2.3.5 多条件判断标签

<c:choose > <c:when test =“EL表达式”> 满足条件执行 </c:when> …<c:otherwise> 不满足上述when条件时执行 </c:otherwise> 
</c:choose >

 2.3.6 循环标签

<c:forEach var=“循环变量” items=“集合”> … 
</c:forEach>

 2.4 常用函数标签

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

 2.5 常用格式化标签

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

 2.6 自定义标签 

  • 如果上面几个标签不能满足需求,程序员也可以自定义标签,步骤如下:
  • 编写标签类继承SimpleTagSupport类或TagSupport类并重写doTag方法或doStartTag方法。
public class TagTest extends SimpleTagSupport { private String name; public String getName() { return name; }public void setName(String name) { this.name = name; }@Override public void doTag() throws JspException, IOException { JspWriter out = this.getJspContext().getOut(); out.println("自定义标签的参数为:" + name); } 
}
  • 定义标签库文件(tld标签库文件)并配置标签说明文件到到WEB-INF下:
<tag><name>helloTag</name> <tag-class>com.yy.demo01.TagTest</tag-class> <body-content>empty</body-content> <attribute> <name>name</name> <required>true</required> </attribute> 
</tag>
  •  在JSP中添加taglib指令引入标签库使用:
<%@ taglib prefix="hello" uri="http://hyq.com" %>

相关文章:

04、EL和JSTL核心技术

目录 1 EL表达式&#xff08;熟悉&#xff09; 1.1 基本概念 1.2 主要功能 1.3 访问内置对象的数据 1.3.1访问方式 1.3.2 执行流程 1.4 访问请求参数的数据 1.5 访问Bean对象的属性 1.5.1 访问方式 1.5.2 主要区别 1.6 访问集合中的数据 1.7 常用的内置对象 …...

【LeetCode热题100】--148.排序链表

148.排序链表 对链表进行排序最适合的算法就是归并排序&#xff1a; 对链表自顶向下归并排序的过程&#xff1a; 找到链表的中点&#xff0c;以中点为分界&#xff0c;将链表拆分成两个子链表&#xff0c;寻找链表的中点可以使用快慢指针的做法&#xff0c;快指针每次移动 2步…...

分布式并行训练(DP、DDP、DeepSpeed)

[pytorch distributed] 01 nn.DataParallel 数据并行初步 数据并行 vs. 模型并行 数据并行&#xff1a;模型拷贝&#xff08;per device&#xff09;&#xff0c;数据 split/chunk&#xff08;对batch切分&#xff09; 每个device上都拷贝一份完整模型&#xff0c;每个device分…...

Linux- fg命令 bg命令

fg fg是Unix-like操作系统&#xff08;如Linux和macOS&#xff09;中的一个shell内建命令&#xff0c;用于将后台作业带到前台执行。这个命令常用于与bg&#xff08;后台执行&#xff09;命令和jobs&#xff08;列出当前作业&#xff09;命令一起&#xff0c;进行shell中的作业…...

leetcode第362场周赛

2873. 有序三元组中的最大值 I 核心思想&#xff1a;由于这题数据范围比较小&#xff0c;直接枚举i,j,k即可。 2874. 有序三元组中的最大值 II 核心思想&#xff1a;这题是在2873题目的基础上将数据范围进行了增加&#xff0c;意味着我们需要对上面的代码进行优化。两种优化方…...

图神经网络GNN(一)GraphEmbedding

DeepWalk 使用随机游走采样得到每个结点x的上下文信息&#xff0c;记作Context(x)。 SkipGram优化的目标函数&#xff1a;P(Context(x)|x;θ) θ argmax P(Context(x)|x;θ) DeepWalk这种GraphEmbedding方法是一种无监督方法&#xff0c;个人理解有点类似生成模型的Encoder过程…...

多目标平衡优化器黏菌算法(MOEOSMA)求解CEC2020多模式多目标优化

多目标平衡优化器黏菌算法&#xff08;MOEOSMA&#xff09;比现有的多目标黏菌算法具有更好的优化性能。在MOEOSMA中&#xff0c;动态系数用于调整勘探和开采趋势。采用精英存档机制来促进算法的收敛性。使用拥挤距离法来保持Pareto前沿的分布。采用平衡池策略模拟黏菌的协同觅…...

快速开发微信小程序之一登录认证

一、背景 记得11、12年的时候大家一窝蜂的开始做客户端Android、IOS开发&#xff0c;我是14年才开始做Andoird开发&#xff0c;干了两年多&#xff0c;然后18年左右微信小程序火了&#xff0c;我也做了两个小程序&#xff0c;一个是将原有牛奶公众号的功能迁移到小程序&#x…...

Mybatis配置文件(mybatis-config.xml)和Mapper映射文件(XXXMapper.xml)模板

配置文件 ${dirver} ---> com.mysql.jdbc.Driver ${url} ---> jdbc:mysql://localhost:3306/数据库名 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE configurationPUBLIC "-//mybatis.org//DTD Config 3.0//EN""h…...

4. 条件查询

首先区分下match&#xff0c;match_phrase,term, 参考&#xff1a;https://zhuanlan.zhihu.com/p/592767668?utm_id0 1、全量查询分页指定source 示例&#xff1a;请求地址为http://127.0.0.1:9200/students/_search&#xff0c;请求体为&#xff1a; {"query":…...

【VIM】初步认识VIM-2

2-6 Vim 如何搜索替换_哔哩哔哩_bilibili 1-6行将self改成this 精确替换quack单词为交...

《HelloGitHub》第 90 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对编程感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 …...

Apache Hudi初探(五)(与flink的结合)--Flink 中hudi clean操作

背景 本文主要是具体说说Flink中的clean操作的实现 杂说闲谈 在flink中主要是CleanFunction函数&#xff1a; Overridepublic void open(Configuration parameters) throws Exception {super.open(parameters);this.writeClient FlinkWriteClients.createWriteClient(conf,…...

stream对list数据进行多字段去重

方法一&#xff1a; //根据sj和name去重 List<NursingHandover> testList list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getj() ";" o.getName() ";&…...

一种基于体素的射线检测

效果 基于体素的射线检测 一个漏检的射线检测 从起点一直递增指定步长即可得到一个稀疏的检测 bool Raycast(Vector3 from, Vector3 forword, float maxDistance){int loop 6666;Vector3 pos from;Debug.DrawLine(from, from forword * maxDistance, Color.red);while (loo…...

利用Docker安装Protostar

文章目录 一、Protostar介绍二、Ubuntu下安装docker三、安装Protostar 一、Protostar介绍 Protostar是一个免费的Linux镜像演练环境&#xff0c;包含五个系列共23道漏洞分析和利用实战题目。 Protostar的安装有两种方式 第一种是下载镜像并安装虚拟机https://github.com/Exp…...

go基础语法10问

1.使用值为 nil 的 slice、map会发生啥 允许对值为 nil 的 slice 添加元素&#xff0c;但对值为 nil 的 map 添加元素&#xff0c;则会造成运行时 panic。 // map 错误示例 func main() {var m map[string]intm["one"] 1 // error: panic: assignment to entry i…...

SpringCloud + SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题

title: “SpringCloud SpringGateway 解决Get请求传参为特殊字符导致400无法通过网关转发的问题” createTime: 2021-11-24T10:27:5708:00 updateTime: 2021-11-24T10:27:5708:00 draft: false author: “Atomicyo” tags: [“tomcat”] categories: [“java”] description: …...

vim基本操作

功能&#xff1a; 命令行模式下的文本编辑器。根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。使用方式&#xff1a;vim filename 如果已有该文件&#xff0c;则打开它。 如果没有该文件&#xff0c;则打开个一个新的文件&#xff0c;并命名为filename 模式…...

Drift plus penalty 漂移加惩罚Part1——介绍和工作原理

文章目录 正文Methodology 方法论Origins and applications 起源和应用How it works 它是怎样工作的The stochastic optimization problem 随机优化问题Virtual queues 虚拟队列The drift-plus-penalty expression 漂移加惩罚表达式Drift-plus-penalty algorithmApproximate sc…...

基于大模型的 UI 自动化系统

基于大模型的 UI 自动化系统 下面是一个完整的 Python 系统,利用大模型实现智能 UI 自动化,结合计算机视觉和自然语言处理技术,实现"看屏操作"的能力。 系统架构设计 #mermaid-svg-2gn2GRvh5WCP2ktF {font-family:"trebuchet ms",verdana,arial,sans-…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

【WiFi帧结构】

文章目录 帧结构MAC头部管理帧 帧结构 Wi-Fi的帧分为三部分组成&#xff1a;MAC头部frame bodyFCS&#xff0c;其中MAC是固定格式的&#xff0c;frame body是可变长度。 MAC头部有frame control&#xff0c;duration&#xff0c;address1&#xff0c;address2&#xff0c;addre…...

JavaScript 中的 ES|QL:利用 Apache Arrow 工具

作者&#xff1a;来自 Elastic Jeffrey Rengifo 学习如何将 ES|QL 与 JavaScript 的 Apache Arrow 客户端工具一起使用。 想获得 Elastic 认证吗&#xff1f;了解下一期 Elasticsearch Engineer 培训的时间吧&#xff01; Elasticsearch 拥有众多新功能&#xff0c;助你为自己…...

深入理解JavaScript设计模式之单例模式

目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式&#xff08;Singleton Pattern&#…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍

文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结&#xff1a; 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析&#xff1a; 实际业务去理解体会统一注…...

CMake 从 GitHub 下载第三方库并使用

有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...

QT: `long long` 类型转换为 `QString` 2025.6.5

在 Qt 中&#xff0c;将 long long 类型转换为 QString 可以通过以下两种常用方法实现&#xff1a; 方法 1&#xff1a;使用 QString::number() 直接调用 QString 的静态方法 number()&#xff0c;将数值转换为字符串&#xff1a; long long value 1234567890123456789LL; …...

【论文阅读28】-CNN-BiLSTM-Attention-(2024)

本文把滑坡位移序列拆开、筛优质因子&#xff0c;再用 CNN-BiLSTM-Attention 来动态预测每个子序列&#xff0c;最后重构出总位移&#xff0c;预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵&#xff08;S…...