Struts2 工作总结

一 in,

在SQL中,IN 是一个条件操作符,用于指定多个可能的值,通常用在 WHERE 子句中。它的作用是检查某个字段的值是否在给定的值列表中,相当于多个 OR 条件的简写形式。

不使用 IN(冗长)

SELECT * FROM fruits WHERE name = 'apple' OR name = 'banana' OR name = 'orange';

-- 使用 IN(简洁)

SELECT * FROM fruits WHERE name IN ('apple', 'banana', 'orange');

  1. 性能问题
    如果 IN 的值列表很大(如上千个值),数据库优化器可能处理较慢,此时考虑用临时表或 JOIN

  2. NULL 值
    IN 不会匹配 NULL 值。如果需要包含 NULL,需额外添加条件:

    WHERE name IN ('apple', 'banana') OR name IS NULL
  3. NOT IN
    反向过滤,排除列表中的值:

    SELECT * FROM fruits WHERE name NOT IN ('apple', 'banana');

二,转义

model.setD40000(StringEscapeUtils .escapeHtml(model.getD40000().replace("\"", "")));

这段代码的作用是对 model.getD40000() 返回的字符串进行HTML 转义双引号去除处理,然后将处理后的结果重新设置回 model.setD40000()

  • 步骤 1model.getD40000()
    获取 model 对象中 D40000 字段的原始字符串值。

  • 步骤 2.replace("\"", "")
    删除字符串中的所有双引号 "(例如 "hello" → hello)。

  • 步骤 3StringEscapeUtils.escapeHtml(...)
    对处理后的字符串进行 HTML 转义,将特殊字符(如 <>&'")转换为对应的 HTML 实体,防止 XSS 攻击或 HTML 注入。
    示例

    • hello & world → hello &amp; world
    • <script> → &lt;script&gt;
  • 步骤 4model.setD40000(...)
    将最终处理后的字符串重新设置回 model 对象的 D40000 字段。

三 排序,

List<YourObject> sortedList = originalList.stream() .sorted(Comparator.comparing(YourObject::getFieldName)) .collect(Collectors.toList());

  • originalList:原始 List
  • YourObject::getFieldName:指定排序的字段(通过 getter 方法引用)。
  • collect(Collectors.toList()):将排序后的 Stream 重新收集为 List
(1) 降序排序

使用 Comparator.reversed()

List<Person> sortedByAgeDesc = people.stream()
.sorted(Comparator.comparing(Person::getAge).reversed())
.collect(Collectors.toList());
(2) 多字段排序

先按 age 升序,再按 name 降序

List<Person> sortedByAgeThenName = people.stream()
.sorted(Comparator.comparing(Person::getAge)
.thenComparing(Comparator.comparing(Person::getName).reversed()))
.collect(Collectors.toList());
(3) 处理 null 值

如果字段可能为 null,使用 Comparator.nullsFirst() 或 Comparator.nullsLast()

List<Person> sortedWithNulls = people.stream()
.sorted(Comparator.comparing(
Person::getName,
Comparator.nullsFirst(Comparator.naturalOrder())
))
.collect(Collectors.toList());
(4) 自定义排序逻辑

使用 Comparator.comparing() 并传入 Lambda

List<Person> sortedByNameLength = people.stream()
.sorted(Comparator.comparing(p -> p.getName().length()))
.collect(Collectors.toList());

四,AJAX 和 HTML Form 

特性AJAXHTML Form
数据传输方式异步(后台发送请求,不刷新页面)同步(提交后页面刷新或跳转)
请求方法通常用 XMLHttpRequest 或 fetch<form> 的 submit 行为
数据格式JSON、XML、纯文本等默认 application/x-www-form-urlencoded 或 multipart/form-data(文件上传)
用户体验无刷新,动态更新页面页面跳转或刷新
适用场景局部更新、实时交互(如搜索建议)传统表单提交(如登录、文件上传)
前端控制可自定义请求头、处理响应依赖浏览器默认行为
后端接收方式与 Form 类似(键值对或 JSON)通过 request.getParameter() 或 @RequestParam(Spring)

五, enctype="multipart/form-data" 

sturus2上传文件时需要 enctype="multipart/form-data" 

在Struts2(或任何Web应用)中上传文件时,需要使用 multipart/form-data 编码类型,这是由文件上传的底层机制和HTTP协议的特性共同决定的

  1. 二进制数据需要独立传输,避免 URL 编码导致的损坏。
  2. 底层库依赖此格式解析文件,Struts2 仅是封装了调用逻辑。
  3. HTTP 协议标准multipart/form-data 是文件上传的 MIME 类型规范。

Struts2 本身不直接处理文件上传,而是依赖第三方库(如 Jakarta Commons FileUpload 或 COS)解析 multipart/form-data 请求。这些库的核心逻辑是:

  1. 解析请求体:根据 boundary 分隔符提取各部分数据。
  2. 区分文件与文本:通过 Content-Disposition 头部判断字段类型(如 form-data; name="file"; filename="test.jpg" 表示文件)。
  3. 保存临时文件:将上传的文件流写入服务器临时目录,供后续处理。

六,组合框(ComboBox)

<select id="comboId" name="comboName">

<option value="">-- 请选择 --</option>

<option value="1">选项1</option>

<option value="2">选项2</option>

<option value="3">选项3</option>

</select>

分组选项(<optgroup>

<select>

<optgroup label="分类1">

<option value="1">选项1</option>

<option value="2">选项2</option>

</optgroup>

<optgroup label="分类2">

<option value="3">选项3</option>

</optgroup>

</select>

Struts2 动态绑定:通过 <s:if> 或 <s:select> 实现选项选中状态的逻辑控制。

七,overflow滚动条

visible默认值,内容超出容器时直接溢出(不裁剪,不显示滚动条)。
hidden超出部分隐藏,不显示滚动条
scroll强制显示滚动条(即使内容未溢出,也会显示空滚动条)。
auto仅在内容溢出时显示滚动条(按需显示)。
clip类似 hidden,但禁止程序化滚动(如 JavaScript 的 scrollTop)。
  • overflow: auto:最常用的按需滚动。
  • overflow: scroll:强制显示滚动条(适合需要明确提示可滚动的场景)。
  • 自定义滚动条:通过 ::-webkit-scrollbar 美化(注意浏览器兼容性)。
  • 隐藏滚动条:用 scrollbar-width: none 和 ::-webkit-scrollbar { display: none }

............................

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

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

相关文章

MQTT 认证与授权机制实践(二)

四、实战案例&#xff1a;主流 Broker 的认证授权配置指南&#xff08;一&#xff09;EMQ X&#xff1a;企业级物联网 Broker 的安全方案1. 认证配置&#xff08;用户名密码 证书&#xff09;EMQ X 作为一款企业级物联网 Broker&#xff0c;在安全认证方面提供了丰富且灵活的配…

多路转接介绍及代码实现

目录 1.多路转接技术的产生背景 2.select 3.poll 3.epoll 1.多路转接技术的产生背景 一个技术的出现必然有它要解决的问题,那么多路转接解决的问题是什么嗯? 我们知道,一个进程里面有一个文件描述符表管理这个进程所打开的文件,我们进行网络通信的时候,本质就是创建一个…

《sklearn机器学习——回归指标1》

skearn.metrics模块实现一些损失函数&#xff0c;评分&#xff0c;并且应用函数去测度回归标签。其中一些已经改进&#xff0c;可以处理多指标案例&#xff1a;mean_squared_error&#xff0c;mean_absolute_error&#xff0c;explained_variance_score和r2_score。 这些函数使…

消息存储机制-索引文件及页缓存

对于生产者来说&#xff0c;将消息写到commit log文件里面。这里会有消息的逻辑队列&#xff0c;逻辑队列里面保存了消息的偏移量。除了consumerquenue之外&#xff0c;它还会将数据分发到另外一个文件叫indexfile索引文件里面。这个索引文件可以保存消息的一些信息&#xff0c…

辗转相除法(欧几里得算法)的证明

欢迎访问我的主页: https://heeheeaii.github.io/ 辗转相除法是一种用于计算两个非负整数最大公约数的有效算法。它的证明主要分为两个部分&#xff1a; 证明核心引理&#xff1a; gcd(a,b)gcd(b,amodb)证明算法的收敛性&#xff1a; 证明算法一定会在有限步内结束。 辗转相除法…

RL【3】:Bellman Optimality Equation

系列文章目录 文章目录系列文章目录前言Definition of optimal policyBellman optimality equationIntroductionMaximization on the right-hand sideContraction mapping theoremSolutionOptimalityAnalyzing optimal policies总结前言 本系列文章主要用于记录 B站 赵世钰老师…

有序数组,距离目标最近的k个数 二分查找

&#x1f914; 新手做题思路&#xff1a;第1步&#xff1a;理解题目- 找距离x最近的k个数- 数组已排序- 返回结果也要排序&#xff08;升序&#xff09;- 距离相同时&#xff0c;选择较小的数第2步&#xff1a;关键insight- 数组已排序 → 考虑二分查找- 最近的k个数一定是连续…

学习心得分享

我认为知识是一定要系统化的学习&#xff0c;结构化梳理&#xff0c;这样在运用或思考的时候&#xff0c;能够回忆起自己在这一块梳理的知识结构&#xff0c;如果有记录那么能快速回忆并理解&#xff0c;如果没有记录&#xff0c;那么说明对自己来说超纲了&#xff0c;把知识进…

为什么说 Linode 和 DigitalOcean 的差距,不止于 VPS?

在今天这个全球化的商业战场上&#xff0c;中国企业的出海已从“选择题”变为“必答题”。当我们满怀雄心&#xff0c;将产品和业务推向海外市场时&#xff0c;基础设施的选择&#xff0c;往往是决定成败的第一步。它不仅关乎成本与性能&#xff0c;更直接影响着团队的开发效率…

NSSCTF每日一题_Web_[SWPUCTF 2022 新生赛]奇妙的MD5

为了保持做题的感觉和持续学习&#xff0c;也就有了每日一题系列&#xff0c;选一些有意义的题目或者一些CTF新颖题目作为参考学习。[SWPUCTF 2022 新生赛]奇妙的MD51. 访问首页界面并进行分析估计题目MD5提示,查询得知ffifdyop 这个字符串是一个奇妙的MD5字符串因为将“ffifdy…

服务器IP暴露被攻击了怎么办?

当服务器IP暴露后&#xff0c;可能会面临各种网络攻击&#xff0c;如DDoS攻击、端口扫描、恶意入侵等&#xff0c;这将严重影响服务器的正常运行和数据安全。本文将从检测攻击类型、采取紧急防护措施、优化服务器配置、寻求专业支持以及预防未来攻击五个方面&#xff0c;详细探…

TDengine 时间函数 TIMETRUNCATE 用户手册

TDengine TIMETRUNCATE 函数用户使用手册 函数概述 TIMETRUNCATE 是 TDengine 中的一个时间处理标量函数&#xff0c;用于将时间戳按照指定的时间单位进行截断操作。该函数在时间数据聚合、分组和统计分析中非常有用&#xff0c;特别适用于智能电表等时序数据的分析场景。 语…

Linux电脑怎样投屏到客厅的大电视?支持远程投屏吗?

一般的电脑投屏软件都会推出Windows版本和macOS版本&#xff0c;虽然这两个版本已经覆盖大部分消费者的常用电脑&#xff0c;但是依然有一部分群体因为电脑系统版本问题不能使用投屏软件。 如果你当前使用的是Linux系统的电脑&#xff0c;而且又要将电脑投屏投屏到客厅的大电视…

MP4视频太大如何压缩?分享6种简单便捷的压缩小技巧

随着拍摄高清视频的设备越来越多&#xff0c;我们经常会遇到MP4视频文件体积过大的问题&#xff0c;无论是上传到社交平台、发送给朋友&#xff0c;还是存储在设备中&#xff0c;过大的视频文件都会带来诸多不便。那么&#xff0c;MP4视频太大怎么压缩呢&#xff1f;本文将介绍…

k8s 部署 redis

创建部署文件 vim redis.yaml添加如下内容&#xff1a; apiVersion: v1 kind: Namespace metadata:name: redis --- apiVersion: v1 kind: Secret metadata:name: redis-passwordnamespace: redis type: Opaque data:password: d2d3cmhnZWE # 建议生产环境使用更复杂的密码 ---…

FFMPEG H264

一、H264压缩编码1.1 H264 中的 I 帧、P帧和 B帧H264 使用帧内压缩和帧间压缩的方式提高编码压缩率&#xff1b;H264 采用了独特的 I 帧、P 帧和 B 帧策略来实现&#xff0c;连续帧之间的压缩&#xff1b;1.2 其他概念GOP&#xff08;图像组&#xff09;&#xff1a;一个IDR帧到…

Unity 解决天空盒中间出现一条线

问题解决找到天空盒对应贴图&#xff0c;在Inspector 面板中找到Advanced →Generate Mip Maps 并取消勾选即可。效果动态修改天空盒RenderSettings.skybox targetSkyboxMaterial; DynamicGI.UpdateEnvironment();

Python爬虫实战:研究Showcase模块,构建电商平台销售数据采集和分析系统

1. 引言 1.1 研究背景 在数字经济快速发展的今天,电商平台积累了海量的商品信息、交易数据和用户反馈,这些数据蕴含着丰富的市场洞察。根据中国电子商务研究中心数据,2024 年我国网络零售市场规模突破 15 万亿元,平台商品数据呈现指数级增长。如何高效提取这些数据并转化…

C++中的Reactor和Proactor模型进行系统性解析

<摘要> 本解析系统阐述了网络编程中Reactor与Proactor两种高性能I/O模型的核心概念。Reactor基于同步I/O多路复用&#xff0c;通过事件循环分发通知&#xff0c;由应用层自行完成I/O操作&#xff1b;而Proactor则基于异步I/O&#xff0c;由操作系统完成I/O操作后主动回调…

【技术教程】如何将文档编辑器集成至基于Node.js的网页应用程序中

当今数字化时代&#xff0c;Web应用对在线文档编辑的需求日益增长。无论是构建在线办公系统、内容管理平台还是协作工具&#xff0c;让用户能够直接在浏览器中编辑和处理文档已成为基本需求。 想知道如何为你的 Node.js 应用添加强大的在线文档编辑功能吗&#xff1f;本文手把…