Struts基礎(一)

来源:https://www.cnblogs.com/liyushan/archive/2019/08/14/11355229.html
-Advertisement-
Play Games

1、Struts開發基礎 1.1 MVC的基本概念 mvc將一個應用系統的輸入、處理和輸出流程按照Model(模型)、View(視圖)和Controller(控制器)三部分進行分離,劃分成模型層、視圖層和控制層。三層之間以最少的耦合來協同工作,從而提高了應用 系統的可擴展性和可維護性。 MVC思想的 ...


1、Struts開發基礎

1.1  MVC的基本概念

  mvc將一個應用系統的輸入、處理和輸出流程按照Model(模型)、View(視圖)和Controller(控制器)三部分進行分離,劃分成模型層、視圖層和控制層。三層之間以最少的耦合來協同工作,從而提高了應用

系統的可擴展性和可維護性。

   MVC思想的核心就是分層。它將系統的各個組件進行分類,不同的組件扮演不同的角色,然後將系統中的組件分隔到不同的層中,這些組件將被嚴格限制在其所在的層內。各層之間則以鬆散耦合的方式組合在一起,從而保證良好的封裝性。MVC三層之間的關係如圖所示。

1. 模型層

  模型層代表的是數據和其對應的業務邏輯。它負責對數據進行處理和更新。通常,模型和現實世界對數據的處理過程類似,業務處理的過程對於視圖層和控制層來說是黑箱操作:模型層接受視圖層(通過控制層傳送到)的請求數據,並返回最終的處理結果,以更新視圖層。

2.視圖層

  視圖層實際上是模型層中各個模型的具體表現形式。它通過模型得到數據,然後再根據需要進行顯示。視圖層必須保持著與模型層的數據模型一致,即當模型層的數據發生變化時,視圖層必須隨之變化。

3.控制層

  控制層在MVC結構中連接模型層和視圖層,起到了紐帶的作用。它將視圖層的交互信息進行過濾等處理後,再傳送到模型層相應的邏輯業務處理程式進行處理。

  在Web應用中,視圖層首先向控制層發送信息,控制層接收到請求後,再把請求信息傳遞給模型層,告知模型應該做什麼處理,接著,模型接受請求數據,並產生最終的處理結果。模型層對應的動作包括:業務處理和模型狀態的改變,最後根據模型層產生的結果,控制層將數據反饋給用戶,併在瀏覽器中顯示。

  總的來說,MVC有如下特點:

  • 低耦合性。MVC架構通過分層,降低了層與層之間的耦合,提高了程式的可擴展性,有助於程式員靈活的進行編碼。
  • 一個模型可以對應多個視圖。按照MVC的設計模式,一個模型對應多個視圖,可以提高代碼的可維護性。即使模型發生改變,也方便維護。
  • 模型返回的數據與顯示邏輯分離。模型數據可以應用任何的顯示技術,各層只負責自己的任務,而不用去管其他層的任務。
  • 有利於工程化管理。MVC將不同的模型和不同的視圖組合在一起進行管理,層與層之間分離,每一層都有各自的特色。由於代碼可復用,因此降低了軟體開發周期。

1.2 Struts的工作原理

1.Struts概述

  Struts1是真正意義上的MVC模式,,但Struts1在性能高效、松耦低侵入等方面存在著不足之處。所以Struts2出現彌補了Struts1這方面的缺陷和不足,並且還提供了更加靈活與強大的功能。

  Struts2並不是Struts1的升級版,而是一個全新的框架。它將Struts技術與WebWork技術完美地結合起來,所以功能更加靈活。

2.Struts2工作流程

  Struts2是一個全新的開發框架,如圖所示為Struts2的體繫結構圖。

  • 橙色是Servlet Filters,過濾器鏈,所有的請求都要經過Filter鏈的處理。
  • 淺藍色是Struts Core,Struts2的核心部分,Struts2中已經做好的功能,在實際開發中不需要動它們。
  • 淺綠色是Interceptors,Struts2的攔截器。Struts2提供了很多預設的攔截器,可以完成日常開發的絕大部分工作;當然,也可以自定義攔截器,用來實現具體業務需要的功能。
  • 淺黃色是User Created,由開發人員創建的,包括struts.xml、Action、Template,是每個使用Struts2來進行開發的人員都必須會的。 

各自功能:

  • FilterDispatcher是整個Struts2的調度中心,根據ActionMapper的結果來決定是否處理請求,如果ActionMapper指出該URL應該被Struts2處理,那麼它將會執行Action處理,並停止過濾器鏈上還沒有執行的過濾器。
  • ActionMapper提供了HTTP請求與action執行之間的映射,簡單點說,ActionMapper會判斷這個請求是否應該被Struts2處理,如果需要Struts2處理,ActionMapper會返回一個對象來描述請求對應的ActionInvocation的信息。
  • ActionProxy是一個特別的中間層,位於Action和xwork之間,使得我們在將來有機會引入更多的實現方式,比如通過WebService來實現等。
  • ConfigurationManager是xwork配置的管理中心,通俗的講,可以把它看做struts.xml這個配置文件在記憶體中的對應。
  • struts.xml是Stuts2的應用配置文件,負責諸如URL與Action之間映射的配置、以及執行後頁面跳轉的Result配置等。
  • ActionInvocation:真正調用並執行Action,它擁有一個Action實例和這個Action所依賴的攔截器實例。ActionInvocation會執行這些攔截器、Action以及相應的Result。
  • Interceptor(攔截器):攔截器是一些無狀態的類,攔截器可以自動攔截Action,它們給開發者提供了在Action運行之前或Result運行之後來執行一些功能代碼的機會。類似於我們熟悉的javax.servlet.Filter。
  • Action:動作類是Struts2中的動作執行單元。用來處理用戶請求,並封裝業務所需要的數據。
  • Result:Result就是不同視圖類型的抽象封裝模型,不同的視圖類型會對應不同的Result實現,Struts2中支持多種視圖類型,比如Jsp,FreeMarker等。
  • Templates:各種視圖類型的頁面模板,比如JSP就是一種模板頁面技術。
  • Tag Subsystem:Struts2的標簽庫,它抽象了三種不同的視圖技術JSP、velocity、freemarker,可以在不同的視圖技術中,幾乎沒有差別的使用這些標簽。

Struts2處理請求步驟:

  1. 用戶發出一個HttpServletRequest請求。
  2. 該請求經過一系列的過濾器Filter來傳送。
  3. 調用FilterDispatcher。FilterDispatcher是控制器的核心,它通過詢問ActionMapper來確定該請求是否需要調用某個Action。如果需要調用某個Action,則FilterDispatcher就把請求轉交給ActionProxy處理。
  4. ActionProxy通過配置管理器Configuration Mannager詢問框架的配置文件Struts.xml,從而找到需要調用的Action類。
  5. ActionProxy創建一個ActionInvocation的實例,該實例使用命名模式來調用。在Action執行的前後,ActionInvocation實例根據配置文件載入與Action相關的所有攔截器Interceptor。
  6. 一旦Action執行完畢,ActionInvocation實例就根據Struts.xml文件中的配置找到相對應的返回結果。返回結果通常是一個JSP或者FreeMarker的模板。其中,FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或Http。

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • server服務端 bin下的文件 ftp_server.py conf下的文件 accounts.ini(這個可以在執行中創建) settings.py core下的文件 main.py server.py user_handle.py client客戶端 download文件是儲存下載的文件;u ...
  • 以使用靜態方法 啟動 Springboot 為例,啟動流程主要分為 SpringApplication 的創建和運行兩部分; 創建 1. 設置資源載入器,此處為空 2. 設置 Springboot 啟動類 3. 根據類路徑判斷 web 類型,預設為 SERVLET Spring MVC 4. 讀取每 ...
  • 續上一篇隨筆: https://www.cnblogs.com/kingstarer/p/8469016.html 《工作碰上的技術問題及處理經驗》(二) 我這人記憶力比較差,經常出現有些知識學了不久後就忘了,或者有些問題花了很多時間百度解決後,再過一段時間碰上時只有模糊印象,卻忘了具體解決方法。 ...
  • [TOC] STL提供了一組表示容器、迭代器、函數對象和演算法的模板。 + 容器是一個與數組類似的單元,可以存儲若幹個值。STL容器是同質的,即存儲的值的類型相同; + 演算法是完成特定任務(如對數組進行排序或在鏈表中查找特定值)的處方; + 迭代器能夠用來遍歷容器的對象,與能夠遍曆數組的指針類似,是廣 ...
  • 1.5.如何根據字典中值的大小,對字典中的項進行排序 第一種方法:列表解析 第二種使用sorted 1.6.如何統計序列中元素的頻度 1.7.如何快速找到多個字典中的公共鍵 1.8.如何讓字典保持有序 ...
  • 1.新建site-packages目錄,進入到site-packages目錄下; 2.在site-packages目錄下執行pip freeze >requirements.txt; 3.查看requirements.txt,可以看到當前機器的python所有依賴包已生成列表 ​ 4.在當前目錄下執 ...
  • ASCII (美)不支持中文, 用於pyhton2版本 gbk (國標) 英文用8位 中文16位 unicode (萬國碼) 英文16位 中文32位 utf 8 (可變長編碼)英文8位 歐洲文16位 亞洲24位 linux utf 8 mac utf 8 windows gbk ...
  • 第一種表示方式:\n 輸出: 通過字元串加字元串的方式,把name和alex加一起,加\n用來換行. 輸出結果 第二種:%s 輸出: a變數中的%s是占位用的,而print中的%是用來補位的,補位順序要和變數a中的一致,不能多,也不能少. 輸出: b中的%%為意譯,不是表示什麼功能而是僅僅表示一個% ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...