基於MVC模式的Struts框架概述

- 中國WEB開發者網絡 (http://www.webasp.net)
-- 技術教程 (http://www.webasp.net/article/)
--- 基於MVC模式的Struts框架概述 (http://www.webasp.net/article/23/22113.htm)
-- 作者:未知
-- 發佈日期: 2005-04-30

作者:yarshray


 


關鍵字: Java  J2EE  MVC  JSP  Servlet  MVC  Struts

內容簡介:



       MVC設計模式成為了目前十分流行的一種設計方法.它是一種軟件的設計方法模式.並且被大量的開發和實踐所證明.因此本文通過介紹Struts框架這種已經實現了MVC模式的軟件構件框架了討論該模式的優勢和如何投入到軟件開發中去.

       本文內容注重理論和實踐相結合,比較系統的從多層設計方式到分佈式軟件開發中所用到的技術,從而切入目前Sun公司退出的J2EE框架模型,然後更加該框架討論了與之相關的技術,包括JSP,Servlet,用戶定義標籤等相關主題,然後討論其優勢和缺陷,最後引出文章的主題,Struts框架,該框架通過實現MVC設計模式從而改變了以往的設計方法,使得開發一套基於J2EE框架的應用程序十分具有廣泛的適應性和極高的效率.


 


名人名言:
  如果我比笛卡爾看得遠些,那是因為我站在巨人們的肩上的緣故。


                                         ──牛頓


具有豐富知識和經驗的人,比只有一種知識和經驗的人更容易產生新的聯想和獨到的見解。


                                             ──泰勒

引言:



       現階段軟件開發已經進入了面向對像,組件化,分佈應用的階段.Sun 公司推出的Java2 Enterprise Edition(J2EE)平台已經日趨成熟.並得到了廣泛的應用.J2EE中所定義的Web容器中的WEB組件也成為了目前開發WEB應用主要工具和手段.JavaServer Page (JSP)技術,幾乎是每一個JAVA WEB應用開發的必須開發組件.

       目前的Web容器也是繁花似錦,一些免費的開源的組織也加入到這項運動中來了.如Apache軟件組織提供的Tomcat就是一個非常優秀的Web容器,這也推動了Java的Web應用的發展.隨著Java的Web技術的成熟和市場的巨大需求.越來越多的開發人員都開始使用一些已經被開發所認同的開發框架了.而現在軟件開發的思想觀念已經不是”我們是否要使用軟件框架” 而是說 ”使用什麼軟件開發框架”.

       因此,選用優秀的開發框架是作為一個軟件開發人員所必須的.Jakarta-Struts是由Apache軟件組織提供的一套開發源代碼的項目,它實現了模型---視圖---控制器(Model---View---Controller) MVC 設計模式.其廣泛的適應性和高度的擴展能力加上對生產效率的極大提高成為了目前Java的Web開發所逐步認可的標準.

       當然,作為我們這些開發人員也同樣是一種挑戰,我必須要理解這些新的觀念和認識並接受這一開發模式的帶來的優勢,這需要我們對理論的理解和大量的開發實踐.


 


Java WEB應用程序介紹



       Java Web應用就是通過在Web容器上開發和部署Java的Web組件來構建應用的工作.其包括的技術主要是Java Server Page 和 Servlet 技術.此外開發一個完整的Java的Web應用還包括以下一些技術:

l         JavaBean組件技術

l         EJB組件技術

l         用戶自定義標記庫

l         XML標籤語言

l         J2EE相關容器


 










圖 1 Java Web 應用的技術結構


 


Servlet控制器組件技術



       Servlet在一個典型的Web應用中擔任的重要角色就是Servlet非常適合做Web頁面之間的消息轉發器.因為Servlet是一個被Web容器動態加載的組件模塊,它並不十分適合做用戶的界面表示,而當Web用戶發出請求的時候Servlet組件可以通過Servlet容器來捕獲這個請求消息,這樣它可以調用模型組件來出來這個消息.

      

圖 2 Servlet 的處理流程

       當客戶程序(如: 瀏覽器)首先向Servlet容器發出Web請求,服務器接受到請求以後會調用相應的Servlet組件來執行相應的程序來完成這個請求,然後Servlet組件吧處理結果交給Servlet容器,再由Servlet容器把請求回復給客戶程序.這也是一個典型的web應用的執行過程.Java的Servlet技術提供了一組用戶的編程接口為開發人員定義了相關的類.

Servlet Api中以下幾個比較重點的類決定了Servlet的處理流程:

l         HttpServlet :該類提供了用戶擴展的能力,用戶通過繼承該類編寫Servlet組件.主要填寫Http方法(如: doPost doGet)完成服務.

l         HttpServletRequest: 該類提供了接受用戶請求數據的能力,該類通常是由Web容器在一次客戶請求服務中創建的.Servlet可以通過該對像訪問到請求時用戶的請求數據.

l         HttpServletResponse: 該類用於生成執行後的相應結果.該類也是由Web容器在服務中創建的.

l         HttpSession: 該了同類處理客戶的會話跟蹤.

l         ServletContext: Servlet容器為每個Web 應用模塊都提供了一個環境來保持該應用模塊的狀態.這組狀態是該模塊中所有Web組件可以訪問到的共享信息.

以上對Servlet組件有了一個大體的介紹,如果要深入瞭解有關Servlet的技術可以訪問站點: http://www.servlet.com .那裡會有詳細的介紹.




 


JSP組件技術



       JSP組件技術是對傳統靜態Web頁面(HTML)的擴展,使得傳統的靜態頁面可以加入Java的程序代碼,以提供程序編輯產生頁面的效果.並且該組件技術也運行的J2EE Web容器上的組件技術.

       JSP的本質實際就是Servlet組件技術,只是JSP技術更利於用來做用戶的表示界面.

      

圖3 Web容器初次執行瀏覽器請求處理JSP的過程

       JSP頁面在初次接受到用戶的請求的時候,首先Web容器會翻譯JSP腳本文件,然後生成Servlet源代碼,在把Servlet源代碼編譯成java的ByteCode 生成Class文件.然後同Servlet的執行過程一樣處理頁面流程.

       如果讀者想更進一步瞭解Jsp技術,可以http://java.sun.com/products/jsp/ 該站點可以獲得更多幫助.


 


JavaBean組件在Web應用程序的作用



       JavaBean 是一種符合特定規範的Java類.在JavaBean中定義了以系列屬性和方法.我們通常可以把業務對模型和業務流程模型封裝在JavaBean中,簡單的說JavaBean很適合在Web應用中充當模型組件的角色.

       JSP標準標籤中已經定義了一組對JavaBean支持的標籤.並定義了JavaBean對像在執行過程中的生命週期.包括 page ,request,session 和 application 四種範圍.並提供了對JavaBean訪問時的屬性支持.

       如果要詳細瞭解有關JavaBean,讀者可以參考 http://java.sun.com/products/javabeans 站點提供了非常詳細的介紹.


 


用戶定義標籤



       JSP中的用戶定義標籤為開發者提供了很好界面和功能擴展能力.它支持用戶可以在JSP頁面中定義相應的業務標記.通常這些標記繼承自TagSupport類.並通過重寫TagSupport類的相關方法來擴展功能.

       在Struts中,Struts框架定義了一組用戶標籤.其主要包括:

l         Bean標籤,用來支持JavaBean的訪問

l         HTML標籤 用來支持HTML界面元素的創建和訪問

l         Logic標籤 用來支持邏輯執行

l         Neted標籤和Tiles標籤 用來支持界面表示




 


EJB組件技術



       Enterprise Java Bean 簡稱 EJB 是一套基於標準的分佈式對像組件技術.它是CORBA和 RMI的服務器端Java組件.EJB技術和JavaBean技術一樣在企業開發中處理業務邏輯.他們的區別在於EJB組件是分佈式的必須運行EJB容器中.而JavaBean組件是運行在調用方內存的組件.

       EJB定義了基本用來處理業務流程邏輯的會話Bean和用來維護業務持久狀態的實體Bean.以及處理基於消息驅動的消息Bean.

       EJB組件所以運行的EJB容器,為EJB組件維護了安全性,事務性,持久性,並行性,等多種服務.並提供了開發,部署,運行等環境的支持.

       讀者可以訪問 http://java.sun.com/products/ejb/index.html 中深入學習這些技術.




 


XML標記語言



       XML標記語言可以用來定義用戶自己的標記.XML在WEB服務中使用的非常廣泛.如SOAP協議就是由XML定義的.XML可以定義非常通用化並利於被應用程序處理的信息結構.

       在Struts框架中XML起到了黏合劑的作用,可以用來配置Struts框架中的各組件的組成框架.

       讀者可以通過訪問 http://www.w3schools.com/xml/default.asp  獲得更多的學習資料.


 


J2EE相關容器



       現階段任何一個分佈開發都離不開服務器.對於Web開發則時Web服務器,Web服務器通常用來處理Http請求和回復工作,並提供了安全性,事務性,多任務並行性.現代Web容器還提供了可編程的用戶接口.而分佈式開發中應用程序的邏輯部分通常放在應用程序的中間件服務器上.EJB容器就是這樣一個中間件服務器.該服務器提供了對EJB組件的運行環境的支持.並提供對RMI—IIOP等遠程對像調用協議的支持,使得開發EJB組件這裡中間件比較容易.使得開發人員更多的關心的是業務邏輯問題.

       目前比較流行的開源的Web服務器主要是Apache軟件組織的Tomcat服務器.Tomcat不僅是一個優秀的Web服務器更是一個十分便捷的Servlet/JSP容器.而開源的EJB容器比較有代表的當數JBoss 它是由JBoss軟件組織開發的,其性能穩定可靠,並有著非常高效的執行速度.



      



MVC設計模式概述



       一般而言,一個計算機程序包括其輸入,處理,和輸出.而MVC設計模式把輸入,處理和輸出部分獨立成為了獨立的程序部分.並在系統運行時將其結合,這樣使得開發的耦合度很低.而.

      

圖 4 MVC設計模型

視圖,在軟件中通常是用戶交互的界面.它用來表示數據和提交用戶對軟件的請求.

模型,用來處理軟件的要涉及的業務範圍,主要是業務數據模型和業務邏輯模型.

控制器,用來接受用戶的請求並調用模型中的處理過程,然後選擇相應的視圖.


 


Java的Web應用中MVC的設計模式運用十分多.JSP Model2 體系結構就是結合了JSP,Servlet和JavaBean技術的MVC模式的實現.

      

圖 5 JSP Model2 模型


 


Struts框架概述



       隨著軟件開發日漸成熟,軟件工程師們也變得逐漸成熟起來,我們開始首先設計軟件框架結構,這樣在開發階段我們才會井然有序的進行.而對於現代軟件開發對軟件的開發週期要求越來越迅速,所以如果要自己開發一套框架已經不太現實了.所以我們必須要選擇已經成熟的軟件框架了.

       而Struts對於Java的Web開發而言就是一個不錯的選擇.Struts框架實質就是JSP Model2模型的實現.





圖 6 Struts 實現的MVC框架

1.視圖

       視圖是通過一組JSP程序實現的.這些JSP程序中不能包含業務邏輯,也不能包括模型的信息.模型的信息是通過控制器傳遞的.在Struts中ActionForm 也被看成是視圖的一部分.它其他更新視圖,以及視圖查詢模形狀態的橋樑.

2.模型

       模型是程序的狀態表示,其狀態包括,消息中傳遞的狀態,以及共享狀態或一次回話中的狀態,以及持久狀態.而操作這些狀態的流程也同樣包括在模型中.這些模型也就是業務的總體運作流程和數據.



3.控制器

       控制器部分由ActionServlet和Action來實現.ActionServlet也就是Struts框架用來和Web容器交互的接口.該類是Struts框架的核心組件.ActionServlet繼承了HttpServlet類.它在MVC模型中扮演中央控制器的角色.當Web容器一接收到客戶請求就會交割ActionServlet該類更加struts-config.xml文件的配置信息選擇合適Action來處理請求.並傳遞請求過程中的數據,這些數據是通過ActionForm傳遞的.Action本身也並不包含業務邏輯的處理代碼.它只是負責調用業務的處理代碼的.

       調用這些代碼的方法在execute()方法中.該方法在調用業務處理以後會放回一個ActionForward對像來選擇對應的視圖.一般而言我們的Action必須直接或間接的繼承該類.然後重寫excecute()方法以完成我們自己的處理消息.



4.Struts的配置文件 struts-config.xml

       該文件實質是一個控制器和視圖的黏合劑,控制器之所以能夠選擇對應的視圖,以及視圖能夠通過對應的控制器查詢到模型中的數據都是依賴該文件.該文件是一個XML文件.在該配置文件中每Action都對應一個<Action>標籤用來映射Action類的信息.


 


從軟件的需求分析與設計談起



      



實現一個完整的基於Struts的WEB應用



      



總結:

       Java的Web應用中使用到的技術非常多,也相對比較複雜.因此開發中開發人員所負責的技術方面也會相對較多,所以我們必須考慮到個人的特長對開發工作進行合理分配,這就需要我們在軟件的設計階段考慮清楚.而MVC這種設計模式能夠很好的把業務數據模型和業務處理模型獨立出來,這樣開發出獨立的系統組件,以便於在開發視圖階段能夠很好的保持數據的一致性.而在處理視圖和模型之間的關係時控制器成為了兩者的紐帶,這樣使得軟件項目可以成為一個系統化的工程.

       而Struts框架在Java的Web應用中就起到了這個作用.這樣使得開發階段能夠很好的利用該框架完成開發項目,我們可以選擇合適的模型組件如我們可以使用JavaBean技術來完成業務模型和數據模型的接口,而數據庫則可以充當數據模型來保持業務階段的持久狀態.JSP和Struts為我們提供的一組標籤這可以完成頁面的表示和頁面的邏輯等功能使得我們有了豐富的視圖功能.並且Struts提供了ActionForm為視圖可以和事件進行數據交換接口提供了良好的通道使得在處理Action事件時候可以通過ActionForm從視圖中取得數據.而兩者之間的橋樑就是Struts-config.xml文件該XML文件可以配置兩者之間的聯繫.這使得接口之間有著極高的靈活性和伸縮性.而在Action中我們有可以調用和包含模型組件的功能.這樣使得開發非常具有效率和可擴展能力.

       Struts框架事實上已經被很多軟件項目所應用,所以足見其適用性時非常可靠的.這裡也希望通過該問的介紹能夠使得讀者對Struts框架有一個足夠的瞭解.


 


參考資料:



       <<精通Struts基於MVC的Java Web 設計與開發>>     作者: 孫衛琴

<<JSP 2.0 技術參考手冊>>                                                 作者: 林上傑 林康司

<<J2EE 技術內幕>>                                                    作者: (美)Joseph J.Bambara Paul R.Allen等  譯者: 劉i 等



webasp.net