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
英文地址,請注明出處:http://en.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;本文手把…