日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Struts由入門到精通(第二章)-Struts的原理

系統 1706 0

2.2 Struts 的原理

2.2.1 Struts 的起源

Struts 最早是作為 Apache Jakarta 項目的組成部分問世運做。項目的創立者希望通過對該項目的研究,改進和提高 Java Server Pages (JSPs) 、 Servlet 、標簽庫以及面向對象的技術水準。當前最高發行版本為 Struts1.0.2 ,可以到 http://jakata.apache.org/Struts 下載。

Struts 這個名字來源于在建筑和舊式飛機中使用的支持金屬架。它的目的是為了幫助你減少在運用 MVC 設計模型來開發 Web 應用的時間。你仍然需要學習和應用該架構,不過它將可以完成其中一些繁重的工作。如果想混合使用 Servlets JSP 的優點來建立可擴展的應用, Struts 是一個不錯的選擇。

?

2.2.2 Struts 工作原理

MVC Model-View-Controller 的縮寫,是一種常用的設計模式。 MVC 減弱了業務邏輯接口和數據接口之間的耦合,以及讓視圖層更富于變化。 MVC 的工作原理 , 如下圖 1 所示:

Struts MVC 的一種實現,它將 Servlet JSP 標記(屬于 J2EE 規范)用作實現的一部分。 Struts 繼承了 MVC 的各項特性,并根據 J2EE 的特點,做了相應的變化與擴展。

Struts 是一組相互協作的類、 servlet JSP 標記,它們組成一個可重用的 MVC 2 設計。這個定義表示 Struts 是一個框架,而不是一個庫,但 Struts 也包含了豐富的標記庫和獨立于該框架工作的實用程序類。圖 5 顯示了 Struts 的一個概覽。

Struts由入門到精通(第二章)-Struts的原理

Struts 概覽的描述:

1 Client browser (客戶瀏覽器)
來自客戶瀏覽器的每個 HTTP 請求創建一個事件。 Web 容器將用一個 HTTP 響應作出響應。

2 Controller (控制器)
控制器接收來自瀏覽器的請求,并決定將這個請求發往何處。就 Struts 而言,控制器是以 servlet 實現的一個命令設計模式。 struts-config.xml 文件配置控制器。
業務邏輯
業務邏輯更新模型的狀態,并幫助控制應用程序的流程。就 Struts 而言,這是通過作為實際業務邏輯 包裝的 Action 類完成的。
3 Model (模型)的狀態
模型表示應用程序的狀態。業務對象更新應用程序的狀態。 ActionForm bean 在會話級或請求級表示模型的狀態,而不是在持久級。 JSP 文件使用 JSP 標記讀取來自 ActionForm bean 的信息。

4 View (視圖)
視圖就是一個 JSP 文件。其中沒有流程邏輯,沒有業務邏輯,也沒有模型信息 -- 只有標記。標記是使 Struts 有別于其他框架(如 Velocity )的因素之一。

?

2.2.3 詳細分析 Struts
6 顯示的是 org.apache.struts.action 包的一個最簡 UML 圖。圖 6 顯示了 ActionServlet (Controller) 、 ActionForm (Form State) Action (Model Wrapper) 之間的最簡關系。

?

?

?

ActionServlet
您還記得函數映射的日子嗎?在那時,您會將某些輸入事件映射到一個函數指針上。如果您對此比較熟悉,您會將配置信息放入一個文件,并在運行時加載這個文件。函數指針數組曾經是用 C 語言進行結構化編程的很好方法。

?

現在好多了,我們有了 Java 技術、 XML J2EE ,等等。 Struts 的控制器是將事件(事件通常是 HTTP post )映射到類的一個 servlet 。正如您所料 -- 控制器使用配置文件以使您不必對這些值進行硬編碼。時代變了,但方法依舊。

?

ActionServlet 是該 MVC 實現的 Command 部分,它是這一框架的核心。 ActionServlet (Command) 創建并使用 Action ActionForm ActionForward 。如前所述, struts-config.xml 文件配置該 Command 。在創建 Web 項目時,您將擴展 Action ActionForm 來解決特定的問題。文件 struts-config.xml 指示 ActionServlet 如何使用這些擴展的類。這種方法有幾個優點:

?

應用程序的整個邏輯流程都存儲在一個分層的文本文件中。這使得人們更容易查看和理解它,尤其是對于大型應用程序而言。

網頁設計人員不必費力地閱讀 Java 代碼來理解應用程序的流程。

Java 開發人員也不必在更改流程以后重新編譯代碼。

?

可以通過擴展 ActionServlet 來添加 Command 功能。

?

ActionForm

ActionForm 維護 Web 應用程序的會話狀態。 ActionForm 是一個抽象類,必須為每個輸入表單模型創建該類的子類。當我說輸入表單模型時 , 是指 ActionForm 表示的是由 HTML 表單設置或更新的一般意義上的數據。例如,您可能有一個由 HTML 表單設置的 UserActionForm Struts 框架將執行以下操作:

?

檢查 UserActionForm 是否存在;如果不存在,它將創建該類的一個實例。

Struts 將使用 HttpServletRequest 中相應的域設置 UserActionForm 的狀態。沒有太多討厭的 request.getParameter() 調用。例如, Struts 框架將從請求流中提取 fname ,并調用 UserActionForm.setFname() 。

Struts 框架在將 UserActionForm 傳遞給業務包裝 UserAction 之前將更新它的狀態。

在將它傳遞給 Action 類之前, Struts 還會對 UserActionForm 調用 validation() 方法進行表單狀態驗證。注:這并不總是明智之舉。別的網頁或業務可能使用 UserActionForm ,在這些地方,驗證可能有所不同。在 UserAction 類中進行狀態驗證可能更好。

可在會話級維護 UserActionForm 。

?

注:

?

struts-config.xml 文件控制 HTML 表單請求與 ActionForm 之間的映射關系。

可將多個請求映射到 UserActionForm 。

UserActionForm 可跨多頁進行映射,以執行諸如向導之類的操作。

?

Action
Action
類是業務邏輯的一個包裝。 Action 類的用途是將 HttpServletRequest 轉換為業務邏輯。要使用 Action ,請創建它的子類并覆蓋 process() 方法。

?

ActionServlet (Command) 使用 perform() 方法將參數化的類傳遞給 ActionForm 。仍然沒有太多討厭的 request.getParameter() 調用。當事件進展到這一步時,輸入表單數據(或 HTML 表單數據)已被從請求流中提取出來并轉移到 ActionForm 類中。

?

注:擴展 Action 類時請注意簡潔。 Action 類應該控制應用程序的流程,而不應該控制應用程序的邏輯。通過將業務邏輯放在單獨的包或 EJB 中,我們就可以提供更大的靈活性和可重用性。

?

考慮 Action 類的另一種方式是 Adapter 設計模式。 Action 的用途是 將類的接口轉換為客戶機所需的另一個接口。 Adapter 使類能夠協同工作,如果沒有 Adapter ,則這些類會因為不兼容的接口而無法協同工作。 (摘自 Gof 所著的 Design Patterns - Elements of Reusable OO Software )。本例中的客戶機是 ActionServlet ,它對我們的具體業務類接口一無所知。因此, Struts 提供了它能夠理解的一個業務接口,即 Action 。通過擴展 Action ,我們使得我們的業務接口與 Struts 業務接口保持兼容。(一個有趣的發現是, Action 是類而不是接口)。 Action 開始為一個接口,后來卻變成了一個類。真是金無足赤。)

?

Error
UML
圖(圖 6 )還包括 ActionError ActionErrors ActionError 封裝了單個錯誤消息。 ActionErrors ActionError 類的容器, View 可以使用標記訪問這些類。 ActionError Struts 保持錯誤列表的方式。

?

7. Command (ActionServlet) Model (Action) 之間的關系的 UML
Struts由入門到精通(第二章)-Struts的原理


ActionMapping
輸入事件通常是在 HTTP 請求表單中發生的, servlet 容器將 HTTP 請求轉換為 HttpServletRequest ??刂破鞑榭摧斎胧录⒄埱蠓峙山o某個 Action 類。 struts-config.xml 確定 Controller 調用哪個 Action 類。 struts-config.xml 配置信息被轉換為一組 ActionMapping ,而后者又被放入 ActionMappings 容器中。(您可能尚未注意到這一點,以 s 結尾的類就是容器)

?

ActionMapping 包含有關特定事件如何映射到特定 Action 的信息。 ActionServlet (Command) 通過 perform() 方法將 ActionMapping 傳遞給 Action 類。這樣就使 Action 可訪問用于控制流程的信息。

?

ActionMappings
ActionMappings
ActionMapping 對象的一個集合。

?

? ?

?

?

核心: Struts 的核心是 ActionSevlet , ActionSevlet 的核心是 Struts-config.xml 。這在后面還會詳細討論。

Struts由入門到精通(第二章)-Struts的原理


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 大同市| 什邡市| 郴州市| 饶平县| 湘潭县| 三原县| 白河县| 天柱县| 留坝县| 堆龙德庆县| 察雅县| 清原| 罗甸县| 古蔺县| 霍林郭勒市| 将乐县| 清徐县| 永新县| 两当县| 武汉市| 当雄县| 义乌市| 富顺县| 乌兰察布市| 鹤庆县| 汽车| 蚌埠市| 永城市| 简阳市| 宾川县| 灵山县| 普安县| 陇西县| 西畴县| 都兰县| 仁寿县| 云梦县| 西宁市| 江口县| 闽清县| 长治市|