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 常用的内置对象
| 类别 | 标识符 | 描述 |
| JSP | pageContext | PageContext 处理当前页面 |
| 作用域 | pageScope | 同页面作用域属性名称和值有关的Map类 |
| requestScope | 同请求作用域属性的名称和值有关的Map类 | |
| sessionScope | 同会话作用域属性的名称和值有关的Map类 | |
| applicationScope | 同应用程序作用域属性的名称和值有关的Map类 | |
| 请求参数 | param | 根据名称存储请求参数的值的Map类 |
| paramValues | 把请求参数的所有值作为一个String数组来存储的Map类 | |
| 请求头 | header | 根据名称存储请求头主要值的Map类 |
| headerValues | 把请求头的所有值作为一个String数组来存储的Map类 | |
| Cookie | cookie | 根据名称存储请求附带的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表达式(熟悉) 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.排序链表 对链表进行排序最适合的算法就是归并排序: 对链表自顶向下归并排序的过程: 找到链表的中点,以中点为分界,将链表拆分成两个子链表,寻找链表的中点可以使用快慢指针的做法,快指针每次移动 2步…...
分布式并行训练(DP、DDP、DeepSpeed)
[pytorch distributed] 01 nn.DataParallel 数据并行初步 数据并行 vs. 模型并行 数据并行:模型拷贝(per device),数据 split/chunk(对batch切分) 每个device上都拷贝一份完整模型,每个device分…...
Linux- fg命令 bg命令
fg fg是Unix-like操作系统(如Linux和macOS)中的一个shell内建命令,用于将后台作业带到前台执行。这个命令常用于与bg(后台执行)命令和jobs(列出当前作业)命令一起,进行shell中的作业…...
leetcode第362场周赛
2873. 有序三元组中的最大值 I 核心思想:由于这题数据范围比较小,直接枚举i,j,k即可。 2874. 有序三元组中的最大值 II 核心思想:这题是在2873题目的基础上将数据范围进行了增加,意味着我们需要对上面的代码进行优化。两种优化方…...
图神经网络GNN(一)GraphEmbedding
DeepWalk 使用随机游走采样得到每个结点x的上下文信息,记作Context(x)。 SkipGram优化的目标函数:P(Context(x)|x;θ) θ argmax P(Context(x)|x;θ) DeepWalk这种GraphEmbedding方法是一种无监督方法,个人理解有点类似生成模型的Encoder过程…...
多目标平衡优化器黏菌算法(MOEOSMA)求解CEC2020多模式多目标优化
多目标平衡优化器黏菌算法(MOEOSMA)比现有的多目标黏菌算法具有更好的优化性能。在MOEOSMA中,动态系数用于调整勘探和开采趋势。采用精英存档机制来促进算法的收敛性。使用拥挤距离法来保持Pareto前沿的分布。采用平衡池策略模拟黏菌的协同觅…...
快速开发微信小程序之一登录认证
一、背景 记得11、12年的时候大家一窝蜂的开始做客户端Android、IOS开发,我是14年才开始做Andoird开发,干了两年多,然后18年左右微信小程序火了,我也做了两个小程序,一个是将原有牛奶公众号的功能迁移到小程序&#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,match_phrase,term, 参考:https://zhuanlan.zhihu.com/p/592767668?utm_id0 1、全量查询分页指定source 示例:请求地址为http://127.0.0.1:9200/students/_search,请求体为: {"query":…...
【VIM】初步认识VIM-2
2-6 Vim 如何搜索替换_哔哩哔哩_bilibili 1-6行将self改成this 精确替换quack单词为交...
《HelloGitHub》第 90 期
兴趣是最好的老师,HelloGitHub 让你对编程感兴趣! 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 https://github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等,涵盖多种编程语言 …...
Apache Hudi初探(五)(与flink的结合)--Flink 中hudi clean操作
背景 本文主要是具体说说Flink中的clean操作的实现 杂说闲谈 在flink中主要是CleanFunction函数: Overridepublic void open(Configuration parameters) throws Exception {super.open(parameters);this.writeClient FlinkWriteClients.createWriteClient(conf,…...
stream对list数据进行多字段去重
方法一: //根据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镜像演练环境,包含五个系列共23道漏洞分析和利用实战题目。 Protostar的安装有两种方式 第一种是下载镜像并安装虚拟机https://github.com/Exp…...
go基础语法10问
1.使用值为 nil 的 slice、map会发生啥 允许对值为 nil 的 slice 添加元素,但对值为 nil 的 map 添加元素,则会造成运行时 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基本操作
功能: 命令行模式下的文本编辑器。根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。使用方式:vim filename 如果已有该文件,则打开它。 如果没有该文件,则打开个一个新的文件,并命名为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…...
青少年情绪障碍辅导机构大筛选,教你选流程规范的靠谱机构
一、为什么要看这份榜单当孩子出现情绪障碍,如叛逆、抑郁、焦虑等问题时,家长往往会感到焦虑和无助,不知道该选择哪家辅导机构。一份客观、专业的辅导机构榜单,可以为家长提供有价值的参考,帮助他们快速了解不同机构的…...
从Claude Code到nanocode:轻量级AI编程助手核心架构与工程实践
1. 项目概述:从Claude Code到nanocode的轻量化之路 如果你是一名开发者,尤其是对AI编程助手(AI Agent)的内部工作原理充满好奇,那么你很可能听说过Anthropic的Claude Code。它是一个功能强大的命令行AI代理࿰…...
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案
哔哩下载姬完全指南:从入门到精通的全能B站视频下载方案 【免费下载链接】downkyi 哔哩下载姬downkyi,哔哩哔哩网站视频下载工具,支持批量下载,支持8K、HDR、杜比视界,提供工具箱(音视频提取、去水印等&…...
无线充电技术解析:从Qi标准到射频远距充电的现状与未来
1. 无线充电的现状与用户困境作为一名长期关注消费电子与网络通信设备的技术博主,我每天打交道最多的就是各种“电老虎”和“充电宝”。Rebecca Day在文章里描述的那个圣诞场景,我简直不能再熟悉了——在一堆新设备的包装盒里翻找线缆,在抽屉…...
牛津树资源合集
022-牛津树学校版 1-16级 文件大小: 6.8GB内容特色: 16阶校园版绘本音频一次打包,6.8G进阶无痛适用人群: 想省补习费的3-12岁家长核心价值: 跟着牛津进度走,词汇语感双飙升下载链接: https://pan.quark.cn/s/1ae54f5fbf4f Susan教英语《牛津树家庭版 L…...
多智能体安全协调中的约束推断与CBF应用
1. 多智能体安全协调中的约束推断方法概述在分布式多智能体系统中,安全协调一直是个极具挑战性的问题。想象一下,当一群机器人在仓库中协同搬运货物时,每个机器人可能只知道部分环境信息(比如某些障碍物的位置)&#x…...
AI自主报告正常胸片:技术原理、临床价值与英国NHS实践挑战
1. 项目概述:当AI开始“读”胸片作为一名在医学影像和人工智能交叉领域摸爬滚打了十多年的从业者,我亲眼见证了AI从实验室里的新奇玩具,逐渐成长为临床医生案头一个值得信赖的“第二双眼睛”。最近,一个特别的应用场景正在全球范围…...
开关电源传导共模噪声抑制:Y电容原理、安规限制与EMI滤波器设计
1. 项目概述:理解隔离式开关电源中的传导共模噪声在开发离线式开关电源,比如我们常见的手机充电器、笔记本电脑适配器或者工业电源模块时,工程师们常常会遇到一个既棘手又必须解决的难题:传导电磁干扰(Conducted EMI&a…...
FMCP协议:构建创作者统一文件管理中枢,打破应用孤岛
1. 项目概述:一个为创作者而生的文件管理中枢如果你是一位内容创作者,无论是视频剪辑师、摄影师、平面设计师,还是播客制作人,你的工作流里一定少不了与海量文件打交道。原始素材、工程文件、渲染输出、版本迭代……这些文件散落在…...
C语言核心知识体系总结
C语言核心知识体系总结本文旨在系统梳理C语言的基础与进阶知识点,帮助读者建立清晰的知识框架。内容涵盖:程序编译过程、数据类型与变量、运算符与表达式、控制结构、函数、指针、结构体与共用体、动态内存分配、文件操作等。适合复习巩固或查漏补缺。第…...
