作者:yarshray
關(guān)鍵字: Java J2EE MVC JSP Servlet MVC Struts 內(nèi)容簡介: MVC設(shè)計(jì)模式成為了目前十分流行的一種設(shè)計(jì)方法.它是一種軟件的設(shè)計(jì)方法模式.并且被大量的開發(fā)和實(shí)踐所證明.因此本文通過介紹Struts框架這種已經(jīng)實(shí)現(xiàn)了MVC模式的軟件構(gòu)件框架了討論該模式的優(yōu)勢和如何投入到軟件開發(fā)中去. 本文內(nèi)容注重理論和實(shí)踐相結(jié)合,比較系統(tǒng)的從多層設(shè)計(jì)方式到分布式軟件開發(fā)中所用到的技術(shù),從而切入目前Sun公司退出的J2EE框架模型,然后更加該框架討論了與之相關(guān)的技術(shù),包括JSP,Servlet,用戶定義標(biāo)簽等相關(guān)主題,然后討論其優(yōu)勢和缺陷,最后引出文章的主題,Struts框架,該框架通過實(shí)現(xiàn)MVC設(shè)計(jì)模式從而改變了以往的設(shè)計(jì)方法,使得開發(fā)一套基于J2EE框架的應(yīng)用程序十分具有廣泛的適應(yīng)性和極高的效率.
名人名言:
──牛頓
──泰勒 引言: 現(xiàn)階段軟件開發(fā)已經(jīng)進(jìn)入了面向?qū)ο?/SPAN>,組件化,分布應(yīng)用的階段.Sun 公司推出的Java2 Enterprise Edition(J2EE)平臺已經(jīng)日趨成熟.并得到了廣泛的應(yīng)用.J2EE中所定義的Web容器中的WEB組件也成為了目前開發(fā)WEB應(yīng)用主要工具和手段.JavaServer Page (JSP)技術(shù),幾乎是每一個JAVA WEB應(yīng)用開發(fā)的必須開發(fā)組件. 目前的Web容器也是繁花似錦,一些免費(fèi)的開源的組織也加入到這項(xiàng)運(yùn)動中來了.如Apache軟件組織提供的Tomcat就是一個非常優(yōu)秀的Web容器,這也推動了Java的Web應(yīng)用的發(fā)展.隨著Java的Web技術(shù)的成熟和市場的巨大需求.越來越多的開發(fā)人員都開始使用一些已經(jīng)被開發(fā)所認(rèn)同的開發(fā)框架了.而現(xiàn)在軟件開發(fā)的思想觀念已經(jīng)不是”我們是否要使用軟件框架” 而是說 ”使用什么軟件開發(fā)框架”. 因此,選用優(yōu)秀的開發(fā)框架是作為一個軟件開發(fā)人員所必須的.Jakarta-Struts是由Apache軟件組織提供的一套開發(fā)源代碼的項(xiàng)目,它實(shí)現(xiàn)了模型---視圖---控制器(Model---View---Controller) MVC 設(shè)計(jì)模式.其廣泛的適應(yīng)性和高度的擴(kuò)展能力加上對生產(chǎn)效率的極大提高成為了目前Java的Web開發(fā)所逐步認(rèn)可的標(biāo)準(zhǔn). 當(dāng)然,作為我們這些開發(fā)人員也同樣是一種挑戰(zhàn),我必須要理解這些新的觀念和認(rèn)識并接受這一開發(fā)模式的帶來的優(yōu)勢,這需要我們對理論的理解和大量的開發(fā)實(shí)踐.
Java WEB應(yīng)用程序介紹 Java Web應(yīng)用就是通過在Web容器上開發(fā)和部署Java的Web組件來構(gòu)建應(yīng)用的工作.其包括的技術(shù)主要是Java Server Page 和 Servlet 技術(shù).此外開發(fā)一個完整的Java的Web應(yīng)用還包括以下一些技術(shù): l JavaBean組件技術(shù) l EJB組件技術(shù) l 用戶自定義標(biāo)記庫 l XML標(biāo)簽語言 l J2EE相關(guān)容器
圖 1 Java Web 應(yīng)用的技術(shù)結(jié)構(gòu)
Servlet控制器組件技術(shù) Servlet在一個典型的Web應(yīng)用中擔(dān)任的重要角色就是Servlet非常適合做Web頁面之間的消息轉(zhuǎn)發(fā)器.因?yàn)?/SPAN>Servlet是一個被Web容器動態(tài)加載的組件模塊,它并不十分適合做用戶的界面表示,而當(dāng)Web用戶發(fā)出請求的時候Servlet組件可以通過Servlet容器來捕獲這個請求消息,這樣它可以調(diào)用模型組件來出來這個消息. 圖 2 Servlet 的處理流程 當(dāng)客戶程序(如: 瀏覽器)首先向Servlet容器發(fā)出Web請求,服務(wù)器接受到請求以后會調(diào)用相應(yīng)的Servlet組件來執(zhí)行相應(yīng)的程序來完成這個請求,然后Servlet組件吧處理結(jié)果交給Servlet容器,再由Servlet容器把請求回復(fù)給客戶程序.這也是一個典型的web應(yīng)用的執(zhí)行過程.Java的Servlet技術(shù)提供了一組用戶的編程接口為開發(fā)人員定義了相關(guān)的類. Servlet Api中以下幾個比較重點(diǎn)的類決定了Servlet的處理流程: l HttpServlet :該類提供了用戶擴(kuò)展的能力,用戶通過繼承該類編寫Servlet組件.主要填寫Http方法(如: doPost doGet)完成服務(wù). l HttpServletRequest: 該類提供了接受用戶請求數(shù)據(jù)的能力,該類通常是由Web容器在一次客戶請求服務(wù)中創(chuàng)建的.Servlet可以通過該對象訪問到請求時用戶的請求數(shù)據(jù). l HttpServletResponse: 該類用于生成執(zhí)行后的相應(yīng)結(jié)果.該類也是由Web容器在服務(wù)中創(chuàng)建的. l HttpSession: 該了同類處理客戶的會話跟蹤. l ServletContext: Servlet容器為每個Web 應(yīng)用模塊都提供了一個環(huán)境來保持該應(yīng)用模塊的狀態(tài).這組狀態(tài)是該模塊中所有Web組件可以訪問到的共享信息. 以上對Servlet組件有了一個大體的介紹,如果要深入了解有關(guān)Servlet的技術(shù)可以訪問站點(diǎn): http://www. .那里會有詳細(xì)的介紹.
JSP組件技術(shù) JSP組件技術(shù)是對傳統(tǒng)靜態(tài)Web頁面(HTML)的擴(kuò)展,使得傳統(tǒng)的靜態(tài)頁面可以加入Java的程序代碼,以提供程序編輯產(chǎn)生頁面的效果.并且該組件技術(shù)也運(yùn)行的J2EE Web容器上的組件技術(shù). JSP的本質(zhì)實(shí)際就是Servlet組件技術(shù),只是JSP技術(shù)更利于用來做用戶的表示界面. 圖3 Web容器初次執(zhí)行瀏覽器請求處理JSP的過程 JSP頁面在初次接受到用戶的請求的時候,首先Web容器會翻譯JSP腳本文件,然后生成Servlet源代碼,在把Servlet源代碼編譯成java的ByteCode 生成Class文件.然后同Servlet的執(zhí)行過程一樣處理頁面流程. 如果讀者想更進(jìn)一步了解Jsp技術(shù),可以http://java./products/jsp/ 該站點(diǎn)可以獲得更多幫助.
JavaBean組件在Web應(yīng)用程序的作用 JavaBean 是一種符合特定規(guī)范的Java類.在JavaBean中定義了以系列屬性和方法.我們通??梢园褬I(yè)務(wù)對模型和業(yè)務(wù)流程模型封裝在JavaBean中,簡單的說JavaBean很適合在Web應(yīng)用中充當(dāng)模型組件的角色. JSP標(biāo)準(zhǔn)標(biāo)簽中已經(jīng)定義了一組對JavaBean支持的標(biāo)簽.并定義了JavaBean對象在執(zhí)行過程中的生命周期.包括 page ,request,session 和 application 四種范圍.并提供了對JavaBean訪問時的屬性支持. 如果要詳細(xì)了解有關(guān)JavaBean,讀者可以參考 http://java./products/javabeans 站點(diǎn)提供了非常詳細(xì)的介紹.
用戶定義標(biāo)簽 JSP中的用戶定義標(biāo)簽為開發(fā)者提供了很好界面和功能擴(kuò)展能力.它支持用戶可以在JSP頁面中定義相應(yīng)的業(yè)務(wù)標(biāo)記.通常這些標(biāo)記繼承自TagSupport類.并通過重寫TagSupport類的相關(guān)方法來擴(kuò)展功能. 在Struts中,Struts框架定義了一組用戶標(biāo)簽.其主要包括: l Bean標(biāo)簽,用來支持JavaBean的訪問 l HTML標(biāo)簽 用來支持HTML界面元素的創(chuàng)建和訪問 l Logic標(biāo)簽 用來支持邏輯執(zhí)行 l Neted標(biāo)簽和Tiles標(biāo)簽 用來支持界面表示
EJB組件技術(shù) Enterprise Java Bean 簡稱 EJB 是一套基于標(biāo)準(zhǔn)的分布式對象組件技術(shù).它是CORBA和 RMI的服務(wù)器端Java組件.EJB技術(shù)和JavaBean技術(shù)一樣在企業(yè)開發(fā)中處理業(yè)務(wù)邏輯.他們的區(qū)別在于EJB組件是分布式的必須運(yùn)行EJB容器中.而JavaBean組件是運(yùn)行在調(diào)用方內(nèi)存的組件. EJB定義了基本用來處理業(yè)務(wù)流程邏輯的會話Bean和用來維護(hù)業(yè)務(wù)持久狀態(tài)的實(shí)體Bean.以及處理基于消息驅(qū)動的消息Bean. EJB組件所以運(yùn)行的EJB容器,為EJB組件維護(hù)了安全性,事務(wù)性,持久性,并行性,等多種服務(wù).并提供了開發(fā),部署,運(yùn)行等環(huán)境的支持. 讀者可以訪問 http://java./products/ejb/index.html 中深入學(xué)習(xí)這些技術(shù).
XML標(biāo)記語言 XML標(biāo)記語言可以用來定義用戶自己的標(biāo)記.XML在WEB服務(wù)中使用的非常廣泛.如SOAP協(xié)議就是由XML定義的.XML可以定義非常通用化并利于被應(yīng)用程序處理的信息結(jié)構(gòu). 在Struts框架中XML起到了黏合劑的作用,可以用來配置Struts框架中的各組件的組成框架. 讀者可以通過訪問 http://www./xml/default.asp 獲得更多的學(xué)習(xí)資料.
J2EE相關(guān)容器 現(xiàn)階段任何一個分布開發(fā)都離不開服務(wù)器.對于Web開發(fā)則時Web服務(wù)器,Web服務(wù)器通常用來處理Http請求和回復(fù)工作,并提供了安全性,事務(wù)性,多任務(wù)并行性.現(xiàn)代Web容器還提供了可編程的用戶接口.而分布式開發(fā)中應(yīng)用程序的邏輯部分通常放在應(yīng)用程序的中間件服務(wù)器上.EJB容器就是這樣一個中間件服務(wù)器.該服務(wù)器提供了對EJB組件的運(yùn)行環(huán)境的支持.并提供對RMI—IIOP等遠(yuǎn)程對象調(diào)用協(xié)議的支持,使得開發(fā)EJB組件這里中間件比較容易.使得開發(fā)人員更多的關(guān)心的是業(yè)務(wù)邏輯問題. 目前比較流行的開源的Web服務(wù)器主要是Apache軟件組織的Tomcat服務(wù)器.Tomcat不僅是一個優(yōu)秀的Web服務(wù)器更是一個十分便捷的Servlet/JSP容器.而開源的EJB容器比較有代表的當(dāng)數(shù)JBoss 它是由JBoss軟件組織開發(fā)的,其性能穩(wěn)定可靠,并有著非常高效的執(zhí)行速度.
MVC設(shè)計(jì)模式概述 一般而言,一個計(jì)算機(jī)程序包括其輸入,處理,和輸出.而MVC設(shè)計(jì)模式把輸入,處理和輸出部分獨(dú)立成為了獨(dú)立的程序部分.并在系統(tǒng)運(yùn)行時將其結(jié)合,這樣使得開發(fā)的耦合度很低.而. 圖 4 MVC設(shè)計(jì)模型 視圖,在軟件中通常是用戶交互的界面.它用來表示數(shù)據(jù)和提交用戶對軟件的請求. 模型,用來處理軟件的要涉及的業(yè)務(wù)范圍,主要是業(yè)務(wù)數(shù)據(jù)模型和業(yè)務(wù)邏輯模型. 控制器,用來接受用戶的請求并調(diào)用模型中的處理過程,然后選擇相應(yīng)的視圖.
Java的Web應(yīng)用中MVC的設(shè)計(jì)模式運(yùn)用十分多.JSP Model2 體系結(jié)構(gòu)就是結(jié)合了JSP,Servlet和JavaBean技術(shù)的MVC模式的實(shí)現(xiàn). 圖 5 JSP Model2 模型
Struts框架概述 隨著軟件開發(fā)日漸成熟,軟件工程師們也變得逐漸成熟起來,我們開始首先設(shè)計(jì)軟件框架結(jié)構(gòu),這樣在開發(fā)階段我們才會井然有序的進(jìn)行.而對于現(xiàn)代軟件開發(fā)對軟件的開發(fā)周期要求越來越迅速,所以如果要自己開發(fā)一套框架已經(jīng)不太現(xiàn)實(shí)了.所以我們必須要選擇已經(jīng)成熟的軟件框架了. 而Struts對于Java的Web開發(fā)而言就是一個不錯的選擇.Struts框架實(shí)質(zhì)就是JSP Model2模型的實(shí)現(xiàn).
圖 6 Struts 實(shí)現(xiàn)的MVC框架 1.視圖 視圖是通過一組JSP程序?qū)崿F(xiàn)的.這些JSP程序中不能包含業(yè)務(wù)邏輯,也不能包括模型的信息.模型的信息是通過控制器傳遞的.在Struts中ActionForm 也被看成是視圖的一部分.它其他更新視圖,以及視圖查詢模型狀態(tài)的橋梁. 2.模型 模型是程序的狀態(tài)表示,其狀態(tài)包括,消息中傳遞的狀態(tài),以及共享狀態(tài)或一次回話中的狀態(tài),以及持久狀態(tài).而操作這些狀態(tài)的流程也同樣包括在模型中.這些模型也就是業(yè)務(wù)的總體運(yùn)作流程和數(shù)據(jù). 3.控制器 控制器部分由ActionServlet和Action來實(shí)現(xiàn).ActionServlet也就是Struts框架用來和Web容器交互的接口.該類是Struts框架的核心組件.ActionServlet繼承了HttpServlet類.它在MVC模型中扮演中央控制器的角色.當(dāng)Web容器一接收到客戶請求就會交割ActionServlet該類更加struts-config.xml文件的配置信息選擇合適Action來處理請求.并傳遞請求過程中的數(shù)據(jù),這些數(shù)據(jù)是通過ActionForm傳遞的.Action本身也并不包含業(yè)務(wù)邏輯的處理代碼.它只是負(fù)責(zé)調(diào)用業(yè)務(wù)的處理代碼的. 調(diào)用這些代碼的方法在execute()方法中.該方法在調(diào)用業(yè)務(wù)處理以后會放回一個ActionForward對象來選擇對應(yīng)的視圖.一般而言我們的Action必須直接或間接的繼承該類.然后重寫excecute()方法以完成我們自己的處理消息. 4.Struts的配置文件 struts-config.xml 該文件實(shí)質(zhì)是一個控制器和視圖的黏合劑,控制器之所以能夠選擇對應(yīng)的視圖,以及視圖能夠通過對應(yīng)的控制器查詢到模型中的數(shù)據(jù)都是依賴該文件.該文件是一個XML文件.在該配置文件中每Action都對應(yīng)一個<Action>標(biāo)簽用來映射Action類的信息.
從軟件的需求分析與設(shè)計(jì)談起
實(shí)現(xiàn)一個完整的基于Struts的WEB應(yīng)用
總結(jié): Java的Web應(yīng)用中使用到的技術(shù)非常多,也相對比較復(fù)雜.因此開發(fā)中開發(fā)人員所負(fù)責(zé)的技術(shù)方面也會相對較多,所以我們必須考慮到個人的特長對開發(fā)工作進(jìn)行合理分配,這就需要我們在軟件的設(shè)計(jì)階段考慮清楚.而MVC這種設(shè)計(jì)模式能夠很好的把業(yè)務(wù)數(shù)據(jù)模型和業(yè)務(wù)處理模型獨(dú)立出來,這樣開發(fā)出獨(dú)立的系統(tǒng)組件,以便于在開發(fā)視圖階段能夠很好的保持?jǐn)?shù)據(jù)的一致性.而在處理視圖和模型之間的關(guān)系時控制器成為了兩者的紐帶,這樣使得軟件項(xiàng)目可以成為一個系統(tǒng)化的工程. 而Struts框架在Java的Web應(yīng)用中就起到了這個作用.這樣使得開發(fā)階段能夠很好的利用該框架完成開發(fā)項(xiàng)目,我們可以選擇合適的模型組件如我們可以使用JavaBean技術(shù)來完成業(yè)務(wù)模型和數(shù)據(jù)模型的接口,而數(shù)據(jù)庫則可以充當(dāng)數(shù)據(jù)模型來保持業(yè)務(wù)階段的持久狀態(tài).JSP和Struts為我們提供的一組標(biāo)簽這可以完成頁面的表示和頁面的邏輯等功能使得我們有了豐富的視圖功能.并且Struts提供了ActionForm為視圖可以和事件進(jìn)行數(shù)據(jù)交換接口提供了良好的通道使得在處理Action事件時候可以通過ActionForm從視圖中取得數(shù)據(jù).而兩者之間的橋梁就是Struts-config.xml文件該XML文件可以配置兩者之間的聯(lián)系.這使得接口之間有著極高的靈活性和伸縮性.而在Action中我們有可以調(diào)用和包含模型組件的功能.這樣使得開發(fā)非常具有效率和可擴(kuò)展能力. Struts框架事實(shí)上已經(jīng)被很多軟件項(xiàng)目所應(yīng)用,所以足見其適用性時非??煽康?/SPAN>.這里也希望通過該問的介紹能夠使得讀者對Struts框架有一個足夠的了解.
參考資料: <<精通Struts基于MVC的Java Web 設(shè)計(jì)與開發(fā)>> 作者: 孫衛(wèi)琴 <<JSP 2.0 技術(shù)參考手冊>> 作者: 林上杰 林康司 <<J2EE 技術(shù)內(nèi)幕>> 作者: (美)Joseph J.Bambara Paul R.Allen等 譯者: 劉堃 等 |
|