基於MVC模式的Struts架構概述

來源:互聯網
上載者:User

作者: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等  譯者: 劉堃 等




相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。