SpringMvc與Struts2

一、Spring MVC

1.1 概述

Spring MVC 是 Spring 框架的一部分,是一個基于 MVC 設計模式的輕量級 Web 框架。它提供了靈活的配置和強大的擴展能力,適合構建復雜的 Web 應用程序。

1.2 特點
  1. 輕量級:與 Spring 框架無縫集成,依賴注入和面向切面編程(AOP)支持良好。
  2. 靈活性:支持多種視圖技術(JSP、Thymeleaf、Freemarker 等)。
  3. 注解驅動:通過注解(如 @Controller、@RequestMapping)簡化配置。
  4. REST 支持:原生支持 RESTful 風格的 Web 服務。
  5. 測試友好:易于單元測試和集成測試。
1.3 核心組件
  1. DispatcherServlet:前端控制器,負責接收所有請求并將其分發給相應的處理器。
  2. HandlerMapping:映射請求 URL 到具體的處理器(Controller)。
  3. Controller:處理請求并返回模型和視圖。
  4. ModelAndView:封裝模型數據和視圖信息。
  5. ViewResolver:解析視圖名稱并返回具體的視圖對象(如 JSP、Thymeleaf 等)。
1.4 工作流程

在這里插入圖片描述

  1. 客戶端發送請求到 DispatcherServlet。
  2. DispatcherServlet 通過 HandlerMapping 找到對應的 Controller。
  3. Controller 處理請求并返回 ModelAndView。
  4. DispatcherServlet 通過 ViewResolver 解析視圖。
  5. 視圖渲染并返回響應給客戶端。
1.5 示例代碼
@Controller
public class HelloController {@RequestMapping("/hello")public ModelAndView hello() {ModelAndView modelAndView = new ModelAndView("hello");modelAndView.addObject("message", "Hello, Spring MVC!");return modelAndView;}
}

二、Struts2

2.1 概述

Struts2 是 Apache Struts 項目的第二代框架,是一個基于 MVC 設計模式的 Web 框架。它繼承了 Struts1 的優點,并引入了 WebWork 的設計理念,提供了更強大的功能和更靈活的配置。

2.2 特點
  1. 強大的攔截器機制:通過攔截器實現 AOP 功能(如日志、權限檢查等)。
  2. 配置文件驅動:通過 XML 文件配置 Action 和攔截器。
  3. OGNL 表達式:支持強大的數據綁定和表達式語言。
  4. 插件機制:通過插件擴展框架功能。
  5. 社區支持:擁有活躍的社區和豐富的插件。
2.3 核心組件
  1. FilterDispatcher:前端控制器,負責接收所有請求并將其分發給相應的 Action。
  2. Action:處理請求并返回結果(如 SUCCESS、ERROR 等)。
  3. Interceptor:攔截器,用于在 Action 執行前后進行處理(如日志、權限檢查等)。
  4. Result:根據 Action 的返回結果選擇相應的視圖(如 JSP、Freemarker 等)。
  5. ValueStack:用于在視圖和 Action 之間傳遞數據。
2.4 工作流程

在這里插入圖片描述

  1. 客戶端發送請求到 FilterDispatcher。
  2. FilterDispatcher 通過配置文件找到對應的 Action。
  3. Interceptor 在 Action 執行前后進行處理。
  4. Action 處理請求并返回結果。
  5. Result 根據結果選擇視圖并渲染響應。
2.5 示例代碼

(1)Action 類

public class HelloAction extends ActionSupport {private String message;public String execute() {message = "Hello, Struts2!";return SUCCESS;}public String getMessage() {return message;}
}

(2)配置文件(struts.xml)

<struts><package name="default" extends="struts-default"><action name="hello" class="com.example.HelloAction"><result name="success">/hello.jsp</result></action></package>
</struts>

三、Spring MVC 與 Struts2 的對比

特性Spring MVCStruts2
設計理念輕量級,與 Spring 框架無縫集成基于攔截器的 MVC 框架
配置方式注解驅動,支持 XML 配置配置文件驅動(struts.xml)
攔截器機制通過 AOP 實現內置強大的攔截器機制
數據綁定支持多種數據綁定方式使用 OGNL 表達式進行數據綁定
視圖技術支持多種視圖技術(JSP、Thymeleaf 等)支持多種視圖技術(JSP、Freemarker 等)
REST 支持原生支持 RESTful 風格需要插件支持 RESTful 風格
測試友好性易于單元測試和集成測試測試相對復雜
社區支持社區活躍,文檔豐富社區活躍,但逐漸被 Spring MVC 取代

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/71723.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/71723.shtml
英文地址,請注明出處:http://en.pswp.cn/web/71723.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據類設計_圖片類設計之1_矩陣類設計(前端架構基礎)

前言 學的東西多了,要想辦法用出來.C和C是偏向底層的語言,直接與數據打交道.嘗試做一些和數據方面相關的內容 引入 圖形在底層是怎么表示的,用C來表示 認識圖片 圖片是個風景,動物,還是其他內容,人是可以看出來的.那么計算機是怎么看懂的呢?在有自主意識的人工智能被設計出來…

開發者社區測試報告(功能測試+性能測試)

功能測試 測試相關用例 開發者社區功能背景 在當今數字化時代&#xff0c;編程已經成為一項核心技能&#xff0c;越來越多的人開始學習編程&#xff0c;以適應快速變化的科技 環境。基于這一需求&#xff0c;我設計開發了一個類似博客的論壇系統&#xff0c;專注于方便程序員…

EasyRTC嵌入式音視頻通話SDK:基于ICE與STUN/TURN的實時音視頻通信解決方案

在當今數字化時代&#xff0c;實時音視頻通信技術已成為人們生活和工作中不可或缺的一部分。無論是家庭中的遠程看護、辦公場景中的遠程協作&#xff0c;還是工業領域的遠程巡檢和智能設備的互聯互通&#xff0c;高效、穩定的通信技術都是實現這些功能的核心。 EasyRTC嵌入式音…

【OneAPI】網頁截圖API-V2

API簡介 生成指定URL的網頁截圖或縮略圖。 舊版本請參考&#xff1a;網頁截圖 V2版本新增全屏截圖、帶殼截圖等功能&#xff0c;并修復了一些已知問題。 全屏截圖&#xff1a; 支持全屏截圖&#xff0c;通過設置fullscreentrue來支持全屏截圖。全屏模式下&#xff0c;系統…

簡單的 Python 示例,用于生成電影解說視頻的第一人稱獨白解說文案

以下是一個簡單的 Python 示例&#xff0c;用于生成電影解說視頻的第一人稱獨白解說文案。這個示例使用了 OpenAI 的 GPT 模型&#xff0c;因為它在自然語言生成方面表現出色。 實現思路 安裝必要的庫&#xff1a;使用 openai 庫與 OpenAI API 進行交互。設置 API 密鑰&#…

記錄小白使用 Cursor 開發第一個微信小程序(一):注冊賬號及下載工具(250308)

文章目錄 記錄小白使用 Cursor 開發第一個微信小程序&#xff08;一&#xff09;&#xff1a;注冊賬號及下載工具&#xff08;250308&#xff09;一、微信小程序注冊摘要1.1 注冊流程要點 二、小程序發布流程三、下載工具 記錄小白使用 Cursor 開發第一個微信小程序&#xff08…

六軸傳感器ICM-20608

ICM-20608-G是一個6軸傳感器芯片&#xff0c;由3軸陀螺儀和3軸加速度計組成。陀螺儀可編程的滿量程有&#xff1a;250&#xff0c;500&#xff0c;1000和2000度/秒。加速度計可編程的滿量程有&#xff1a;2g&#xff0c;4g&#xff0c;8g和16g。學習Linux之SPI之前&#xff0c;…

python可應用在金融分析的那一個方面,如何部署在linux server上面。

Python 在金融分析中應用廣泛&#xff0c;以下是幾個主要方面&#xff1a; ### 1. **數據處理與分析** - 使用 **Pandas** 和 **NumPy** 等庫來處理和分析大規模數據集&#xff0c;進行清理、轉換和統計運算。 - 舉例&#xff1a;處理歷史市場數據&#xff0c;分析價格趨…

Git與GitHub:理解兩者差異及其關系

目錄 Git與GitHub&#xff1a;理解兩者差異及其關系Git&#xff1a;分布式版本控制系統概述主要特點 GitHub&#xff1a;基于Web的托管服務概述主要特點 Git和GitHub如何互補關系現代開發工作流 結論 Git與GitHub&#xff1a;理解兩者差異及其關系 Git&#xff1a;分布式版本控…

STM32全系大閱兵(1)

本文內容參考: STM32家族系列的區別_stm32各個系列區別-CSDN博客 STM32--STM32 微控制器詳解-CSDN博客

clickhouse刪除一條數據

在當今數據驅動的世界中&#xff0c;ClickHouse作為一種高性能的列式數據庫管理系統&#xff0c;廣泛應用于需要快速分析大量數據的場景。也許對于初學者來說&#xff0c;掌握如何有效地管理數據&#xff0c;包括添加、更新和刪除數據&#xff0c;是使用ClickHouse進行數據分析…

std::vector的模擬實現

目錄 構造函數 無參構造 用n個val來初始化的拷貝構造 拷貝構造 用迭代器初始化 析構函數 reserve resize pushback pop_back 迭代器及解引用 迭代器的實現 解引用[ ] insert erase 賦值拷貝 補充 vector底層也是順序表&#xff0c;但是vector可以儲存不同的類…

藍橋杯刷題周計劃(第二周)

目錄 前言題目一題目代碼題解分析 題目二題目代碼題解分析 題目三題目代碼題解分析 題目四題目代碼題解分析 題目五題目代碼題解分析 題目六題目代碼題解分析 題目七題目代碼題解分析 題目八題目題解分析 題目九題目代碼題解分析 題目十題目代碼題解分析 題目十一題目代碼題解分…

clion+arm-cm3+MSYS-mingw +jlink配置用于嵌入式開發

0.前言 正文可以跳過這段 初識clion&#xff0c;應該是2015年首次發布的時候&#xff0c; 那會還是大三&#xff0c;被一則推介廣告吸引到&#xff0c;當時還在用vs studio&#xff0c;但是就喜歡鼓搗新工具&#xff0c;然后下載安裝試用了clion&#xff0c;但是當時對cmake規…

藍橋杯備考:離散化詳解

首先&#xff0c;為什么要有離散化呢&#xff1f; 比如這道題&#xff0c;我們應該開一個差分數組&#xff0c;但是a&#xff0c;b之間的間隔可是太大了&#xff0c;難道我們要開一個2的三十二次方大小的數組嗎&#xff1f;我們也是開不了這么大的數組的 我們就需要把這些數離…

初學者快速入門Python爬蟲 (無廢話版)

全篇大概 5000 字(含代碼)&#xff0c;建議閱讀時間 40min 一、Python爬蟲簡介 1.1 什么是網絡爬蟲&#xff1f; 定義&#xff1a; 網絡爬蟲&#xff08;Web Crawler&#xff09;是自動瀏覽互聯網并采集數據的程序&#xff0c;就像電子蜘蛛在網頁間"爬行"。 分類&…

Day05 實例:正向反向連接內外網環境防火墻出入站

一、正反向連接 0、先將防火墻關閉 Linux&#xff1a; sudo systemctl stop firewalld Windows&#xff1a;netsh advfirewall set allprofiles state off 1、正向連接 1.1 Linux連接Windows 00x1 開啟兩臺服務器 并且給Windows拖入nc.exe 00x2 Windows綁定自己5566端…

電力系統中各參數的詳細解釋【智能電表】

一、核心電力參數 電壓 (Voltage) 單位&#xff1a;伏特&#xff08;V&#xff09; 含義&#xff1a;電勢差&#xff0c;推動電流流動的動力 類型&#xff1a;線電壓&#xff08;三相系統&#xff09;、相電壓&#xff0c;如220V&#xff08;家用&#xff09;或380V&#xff…

【仿muduo庫one thread one loop式并發服務器實現】

文章目錄 一、項目介紹1-1、項目總體簡介1-2、項目開發環境1-3、項目核心技術1-4、項目開發流程1-5、項目如何使用 二、框架設計2-1、功能模塊劃分2-1-1、SERVER模塊2-1-2、協議模塊 2-2、項目藍圖2-2-1、整體圖2-2-2、模塊關系圖2-2-2-1、Connection 模塊關系圖2-2-2-2、Accep…

Ubuntu 下 nginx-1.24.0 源碼分析 - ngx_cycle_modules

聲明在 src/core/ngx_module.h ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle);實現在 src/core/ngx_module.c ngx_int_t ngx_cycle_modules(ngx_cycle_t *cycle) {/** create a list of modules to be used for this cycle,* copy static modules to it*/cycle->modul…