亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

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

系統(tǒng) 1566 0

2.2 Struts 的原理

2.2.1 Struts 的起源

Struts 最早是作為 Apache Jakarta 項(xiàng)目的組成部分問世運(yùn)做。項(xiàng)目的創(chuàng)立者希望通過對(duì)該項(xiàng)目的研究,改進(jìn)和提高 Java Server Pages (JSPs) Servlet 、標(biāo)簽庫(kù)以及面向?qū)ο蟮募夹g(shù)水準(zhǔn)。當(dāng)前最高發(fā)行版本為 Struts1.0.2 ,可以到 http://jakata.apache.org/Struts 下載。

Struts 這個(gè)名字來源于在建筑和舊式飛機(jī)中使用的支持金屬架。它的目的是為了幫助你減少在運(yùn)用 MVC 設(shè)計(jì)模型來開發(fā) Web 應(yīng)用的時(shí)間。你仍然需要學(xué)習(xí)和應(yīng)用該架構(gòu),不過它將可以完成其中一些繁重的工作。如果想混合使用 Servlets JSP 的優(yōu)點(diǎn)來建立可擴(kuò)展的應(yīng)用, Struts 是一個(gè)不錯(cuò)的選擇。

?

2.2.2 Struts 工作原理

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

Struts MVC 的一種實(shí)現(xiàn),它將 Servlet JSP 標(biāo)記(屬于 J2EE 規(guī)范)用作實(shí)現(xiàn)的一部分。 Struts 繼承了 MVC 的各項(xiàng)特性,并根據(jù) J2EE 的特點(diǎn),做了相應(yīng)的變化與擴(kuò)展。

Struts 是一組相互協(xié)作的類、 servlet JSP 標(biāo)記,它們組成一個(gè)可重用的 MVC 2 設(shè)計(jì)。這個(gè)定義表示 Struts 是一個(gè)框架,而不是一個(gè)庫(kù),但 Struts 也包含了豐富的標(biāo)記庫(kù)和獨(dú)立于該框架工作的實(shí)用程序類。圖 5 顯示了 Struts 的一個(gè)概覽。

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

Struts 概覽的描述:

1 Client browser (客戶瀏覽器)
來自客戶瀏覽器的每個(gè) HTTP 請(qǐng)求創(chuàng)建一個(gè)事件。 Web 容器將用一個(gè) HTTP 響應(yīng)作出響應(yīng)。

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

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

?

2.2.3 詳細(xì)分析 Struts
6 顯示的是 org.apache.struts.action 包的一個(gè)最簡(jiǎn) UML 圖。圖 6 顯示了 ActionServlet (Controller) ActionForm (Form State) Action (Model Wrapper) 之間的最簡(jiǎn)關(guān)系。

?

?

?

ActionServlet
您還記得函數(shù)映射的日子嗎?在那時(shí),您會(huì)將某些輸入事件映射到一個(gè)函數(shù)指針上。如果您對(duì)此比較熟悉,您會(huì)將配置信息放入一個(gè)文件,并在運(yùn)行時(shí)加載這個(gè)文件。函數(shù)指針數(shù)組曾經(jīng)是用 C 語(yǔ)言進(jìn)行結(jié)構(gòu)化編程的很好方法。

?

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

?

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

?

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

網(wǎng)頁(yè)設(shè)計(jì)人員不必費(fèi)力地閱讀 Java 代碼來理解應(yīng)用程序的流程。

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

?

可以通過擴(kuò)展 ActionServlet 來添加 Command 功能。

?

ActionForm

ActionForm 維護(hù) Web 應(yīng)用程序的會(huì)話狀態(tài)。 ActionForm 是一個(gè)抽象類,必須為每個(gè)輸入表單模型創(chuàng)建該類的子類。當(dāng)我說輸入表單模型時(shí) , 是指 ActionForm 表示的是由 HTML 表單設(shè)置或更新的一般意義上的數(shù)據(jù)。例如,您可能有一個(gè)由 HTML 表單設(shè)置的 UserActionForm Struts 框架將執(zhí)行以下操作:

?

檢查 UserActionForm 是否存在;如果不存在,它將創(chuàng)建該類的一個(gè)實(shí)例。

Struts 將使用 HttpServletRequest 中相應(yīng)的域設(shè)置 UserActionForm 的狀態(tài)。沒有太多討厭的 request.getParameter() 調(diào)用。例如, Struts 框架將從請(qǐng)求流中提取 fname ,并調(diào)用 UserActionForm.setFname()

Struts 框架在將 UserActionForm 傳遞給業(yè)務(wù)包裝 UserAction 之前將更新它的狀態(tài)。

在將它傳遞給 Action 類之前, Struts 還會(huì)對(duì) UserActionForm 調(diào)用 validation() 方法進(jìn)行表單狀態(tài)驗(yàn)證。注:這并不總是明智之舉。別的網(wǎng)頁(yè)或業(yè)務(wù)可能使用 UserActionForm ,在這些地方,驗(yàn)證可能有所不同。在 UserAction 類中進(jìn)行狀態(tài)驗(yàn)證可能更好。

可在會(huì)話級(jí)維護(hù) UserActionForm

?

注:

?

struts-config.xml 文件控制 HTML 表單請(qǐng)求與 ActionForm 之間的映射關(guān)系。

可將多個(gè)請(qǐng)求映射到 UserActionForm

UserActionForm 可跨多頁(yè)進(jìn)行映射,以執(zhí)行諸如向?qū)е惖牟僮鳌?

?

Action
Action
類是業(yè)務(wù)邏輯的一個(gè)包裝。 Action 類的用途是將 HttpServletRequest 轉(zhuǎn)換為業(yè)務(wù)邏輯。要使用 Action ,請(qǐng)創(chuàng)建它的子類并覆蓋 process() 方法。

?

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

?

注:擴(kuò)展 Action 類時(shí)請(qǐng)注意簡(jiǎn)潔。 Action 類應(yīng)該控制應(yīng)用程序的流程,而不應(yīng)該控制應(yīng)用程序的邏輯。通過將業(yè)務(wù)邏輯放在單獨(dú)的包或 EJB 中,我們就可以提供更大的靈活性和可重用性。

?

考慮 Action 類的另一種方式是 Adapter 設(shè)計(jì)模式。 Action 的用途是 將類的接口轉(zhuǎn)換為客戶機(jī)所需的另一個(gè)接口。 Adapter 使類能夠協(xié)同工作,如果沒有 Adapter ,則這些類會(huì)因?yàn)椴患嫒莸慕涌诙鵁o法協(xié)同工作。 (摘自 Gof 所著的 Design Patterns - Elements of Reusable OO Software )。本例中的客戶機(jī)是 ActionServlet ,它對(duì)我們的具體業(yè)務(wù)類接口一無所知。因此, Struts 提供了它能夠理解的一個(gè)業(yè)務(wù)接口,即 Action 。通過擴(kuò)展 Action ,我們使得我們的業(yè)務(wù)接口與 Struts 業(yè)務(wù)接口保持兼容。(一個(gè)有趣的發(fā)現(xiàn)是, Action 是類而不是接口)。 Action 開始為一個(gè)接口,后來卻變成了一個(gè)類。真是金無足赤。)

?

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

?

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


ActionMapping
輸入事件通常是在 HTTP 請(qǐng)求表單中發(fā)生的, servlet 容器將 HTTP 請(qǐng)求轉(zhuǎn)換為 HttpServletRequest 。控制器查看輸入事件并將請(qǐng)求分派給某個(gè) Action 類。 struts-config.xml 確定 Controller 調(diào)用哪個(gè) Action 類。 struts-config.xml 配置信息被轉(zhuǎn)換為一組 ActionMapping ,而后者又被放入 ActionMappings 容器中。(您可能尚未注意到這一點(diǎn),以 s 結(jié)尾的類就是容器)

?

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

?

ActionMappings
ActionMappings
ActionMapping 對(duì)象的一個(gè)集合。

?

? ?

?

?

核心: Struts 的核心是 ActionSevlet ActionSevlet 的核心是 Struts-config.xml 。這在后面還會(huì)詳細(xì)討論。

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


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

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

【本文對(duì)您有幫助就好】

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

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 日韩成人在线网站 | 欧美高清不卡 | 欧美极品福利视频在线播放 | 国产性色视频 | 天天干天天干天天干 | 情欲综合网 | 成人黄色在线 | 四虎在线免费播放 | 波多野结衣中文字幕一区二区三区 | 欧美午夜艳片欧美精品 | 女人精69xxxxx免费无毒 | 久久久精品成人免费看 | 久久麻豆精品 | 免费一级黄色片 | 中文字幕在线亚洲精品 | 久久亚洲综合 | 欧美一级永久免费毛片在线 | 国产一区二区三区免费在线观看 | 久久久久久天天夜夜天天 | 高清影院|精品秒播3 | 毛片网站在线 | 免费看羞羞视频的网站 | 奇米888四色在线精品 | 久久99精品综合国产首页 | 日韩精品中文字幕一区三区 | 天天曰天天操 | 亚洲综合日韩中文字幕v在线 | 日韩一区二区三区在线视频 | 草草影院第一页yycccom | 久久久青草青青国产亚洲免观 | 久久99热精品免费观看 | 久久国产免费观看 | 国产精品成人免费视频 | 综合欧美一区二区三区 | 久久网色 | julia紧身裙中文字幕在线看 | 午夜剧场在线观看 | 亚洲成aⅴ人片在线观 | 欧美乱一级在线观看 | 亚洲一区二区三区高清 不卡 | 男人都懂的网址 |