av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

解析Struts原理與安裝和基本配置

一、 Struts原理

創(chuàng)新互聯(lián)公司服務(wù)項(xiàng)目包括南和網(wǎng)站建設(shè)、南和網(wǎng)站制作、南和網(wǎng)頁(yè)制作以及南和網(wǎng)絡(luò)營(yíng)銷策劃等。多年來(lái),我們專注于互聯(lián)網(wǎng)行業(yè),利用自身積累的技術(shù)優(yōu)勢(shì)、行業(yè)經(jīng)驗(yàn)、深度合作伙伴關(guān)系等,向廣大中小型企業(yè)、政府機(jī)構(gòu)等提供互聯(lián)網(wǎng)行業(yè)的解決方案,南和網(wǎng)站推廣取得了明顯的社會(huì)效益與經(jīng)濟(jì)效益。目前,我們服務(wù)的客戶以成都為中心已經(jīng)輻射到南和省份的部分城市,未來(lái)相信會(huì)繼續(xù)擴(kuò)大服務(wù)區(qū)域并繼續(xù)獲得客戶的支持與信任!

框架(Framework)是可重用的,半完成的應(yīng)用程序,可以用來(lái)產(chǎn)生專門(mén)的定制程序。

您只要細(xì)心地研究真實(shí)的應(yīng)用程序,就會(huì)發(fā)現(xiàn)程序大致上由兩類性質(zhì)不同的組件組成,一類與程序要處理的具體事務(wù)密切相關(guān),我們不妨把它們叫做業(yè)務(wù)組件;另一類是應(yīng)用服務(wù)。比如說(shuō):一個(gè)稅務(wù)征管系統(tǒng)和一個(gè)圖書(shū)管理系統(tǒng)會(huì)在處理它們的業(yè)務(wù)方面存在很大的差異,這些直接處理業(yè)務(wù)的組件由于業(yè)務(wù)性質(zhì)的不同不大可能在不同的系統(tǒng)中重用,而另一些組件如決定程序流向的控制、輸入的校驗(yàn)、錯(cuò)誤處理及標(biāo)簽庫(kù)等這些只與程序相關(guān)的組件在不同的系統(tǒng)中可以很好地得到重用。人們自然會(huì)想要是把這些在不同應(yīng)用程序中有共性的一些東西抽取出來(lái),做成一個(gè)半成品程序,這樣的半成品就是所謂的程序框架,再做一個(gè)新的東西時(shí)就不必白手起家,而是可以在這個(gè)基礎(chǔ)上開(kāi)始搭建。實(shí)際上,有些大型軟件企業(yè)選擇自己搭建這樣的框架。但大多數(shù)中小型軟件企業(yè)或者其他組織,沒(méi)有條件自己建立框架。

Struts作為一個(gè)開(kāi)放原代碼的應(yīng)用框架,在最近幾年得到了飛速的發(fā)展,在JSP Web應(yīng)用開(kāi)發(fā)中應(yīng)用得非常廣泛,有的文獻(xiàn)上說(shuō)它已經(jīng)成為JSP Web應(yīng)用框架的事實(shí)上的標(biāo)準(zhǔn)。那么,究竟什么是Struts呢?

要回答這個(gè)問(wèn)題還得從JSP Web應(yīng)用的兩種基本的結(jié)構(gòu)模式:Model 1和Model 2說(shuō)起,為了給讀者一些實(shí)實(shí)在在的幫助,并力圖讓學(xué)習(xí)曲線變得平坦一些,我想采用實(shí)例驅(qū)動(dòng)的方法來(lái)逐步深入地回答有關(guān)問(wèn)題,因?yàn)?,學(xué)一門(mén)技術(shù)的最好方法莫過(guò)于在實(shí)踐中學(xué)習(xí)、在實(shí)踐中體會(huì),逐步加深對(duì)其精神實(shí)質(zhì)的理解和把握,而不是一上來(lái)就引入一大堆新概念讓大家覺(jué)得無(wú)所適從,或者死記硬背一大堆概念而面對(duì)一個(gè)真正的實(shí)際需求束手無(wú)策。正如,一個(gè)人即使在書(shū)本上學(xué)成了游泳博士,只要他不下水,我想他也是不大可能真正會(huì)游泳的。

  Model 1結(jié)構(gòu)如圖1所示:

mode1 1 是一個(gè)以JSP文件為中心的模式,在這種模式中JSP頁(yè)面不僅負(fù)責(zé)表現(xiàn)邏輯,也負(fù)責(zé)控制邏輯。專業(yè)書(shū)籍上稱之為邏輯耦合在頁(yè)面中,這種處理方式,對(duì)一些規(guī)模很小的項(xiàng)目如:一個(gè)簡(jiǎn)單的留言簿,也沒(méi)什么太大的壞處,實(shí)際上,人們開(kāi)始接觸一些對(duì)自己來(lái)說(shuō)是新的東西的時(shí)候,比如,用JSP訪問(wèn)數(shù)據(jù)庫(kù)時(shí),往往喜歡別人能提供一個(gè)包含這一切的單個(gè)JSP頁(yè)面,因?yàn)檫@樣在一個(gè)頁(yè)面上他就可以把握全局,便于理解。但是,用Model 1模式開(kāi)發(fā)大型時(shí),程序流向由一些互相能夠感知的頁(yè)面決定,當(dāng)頁(yè)面很多時(shí)要清楚地把握其流向?qū)⑹呛軓?fù)雜的事情,當(dāng)您修改一頁(yè)時(shí)可能會(huì)影響相關(guān)的很多頁(yè)面,大有牽一發(fā)而動(dòng)全身的感覺(jué),使得程序的修改與維護(hù)變得異常困難;還有一個(gè)問(wèn)題就是程序邏輯開(kāi)發(fā)與頁(yè)面設(shè)計(jì)糾纏在一起,既不便于分工合作也不利于代碼的重用,這樣的程序其健壯性和可伸縮性都不好。

Grady Booch等人在UML用戶指南一書(shū)中,強(qiáng)調(diào)建模的重要性時(shí),打了一個(gè)制作狗窩、私人住宅、和大廈的形象比喻來(lái)說(shuō)明人們處理不同規(guī)模的事物時(shí)應(yīng)該采用的合理方法一樣,人們對(duì)不同規(guī)模的應(yīng)用程序也應(yīng)該采用不同的模式。

為了克服Model 1的缺陷,人們引入了Model 2,如圖2所示:

 

它引入了\"控制器\"這個(gè)概念,控制器一般由servlet來(lái)?yè)?dān)任,客戶端的請(qǐng)求不再直接送給一個(gè)處理業(yè)務(wù)邏輯的JSP頁(yè)面,而是送給這個(gè)控制器,再由控制器根據(jù)具體的請(qǐng)求調(diào)用不同的事務(wù)邏輯,并將處理結(jié)果返回到合適的頁(yè)面。因此,這個(gè)servlet控制器為應(yīng)用程序提供了一個(gè)進(jìn)行前-后端處理的中樞。一方面為輸入數(shù)據(jù)的驗(yàn)證、身份認(rèn)證、日志及實(shí)現(xiàn)國(guó)際化編程提供了一個(gè)合適的切入點(diǎn);另一方面也提供了將業(yè)務(wù)邏輯從JSP文件剝離的可能。業(yè)務(wù)邏輯從JSP頁(yè)面分離后,JSP文件蛻變成一個(gè)單純完成顯示任務(wù)的東西,這就是常說(shuō)的View。而獨(dú)立出來(lái)的事務(wù)邏輯變成人們常說(shuō)的Model,再加上控制器 Control本身,就構(gòu)成了MVC模式。實(shí)踐證明,MVC模式為大型程序的開(kāi)發(fā)及維護(hù)提供了巨大的便利。

其實(shí),MVC開(kāi)始并不是為 Web應(yīng)用程序提出的模式,傳統(tǒng)的MVC要求M將其狀態(tài)變化通報(bào)給V,但由于Web瀏覽器工作在典型的拉模式而非推模式,很難做到這一點(diǎn)。因此有些人又將用于Web應(yīng)用的MVC稱之為MVC2。正如上面所提到的MVC是一種模式,當(dāng)然可以有各種不同的具體實(shí)現(xiàn),包括您自己就可以實(shí)現(xiàn)一個(gè)體現(xiàn)MVC思想的程序框架,Struts就是一種具體實(shí)現(xiàn)MVC2的程序框架。它的大致結(jié)構(gòu)如圖三所示

 

圖三基本勾勒出了一個(gè)基于Struts的應(yīng)用程序的結(jié)構(gòu),從左到右,分別是其表示層(view)、控制層(controller)、和模型層 (Model)。其表示層使用Struts標(biāo)簽庫(kù)構(gòu)建。來(lái)自客戶的所有需要通過(guò)框架的請(qǐng)求統(tǒng)一由叫ActionServlet的servlet接收(ActionServlet Struts已經(jīng)為我們寫(xiě)好了,只要您應(yīng)用沒(méi)有什么特別的要求,它基本上都能滿足您的要求),根據(jù)接收的請(qǐng)求參數(shù)和 Struts配置(struts-config.xml)中ActionMapping,將請(qǐng)求送給合適的Action去處理,解決由誰(shuí)做的問(wèn)題,它們共同構(gòu)成Struts的控制器。   Action則是Struts應(yīng)用中真正干活的組件,開(kāi)發(fā)人員一般都要在這里耗費(fèi)大量的時(shí)間,它解決的是做什么的問(wèn)題,它通過(guò)調(diào)用需要的業(yè)務(wù)組件(模型)來(lái)完成應(yīng)用的業(yè)務(wù),業(yè)務(wù)組件解決的是如何做的問(wèn)題,并將執(zhí)行的結(jié)果返回一個(gè)代表所需的描繪響應(yīng)的JSP(或Action)的 ActionForward對(duì)象給ActionServlet以將響應(yīng)呈現(xiàn)給客戶。

這里要特別說(shuō)明一下的是:就是Action這個(gè)類,上面已經(jīng)說(shuō)到了它是Struts中真正干活的地方,也是值得我們高度關(guān)注的地方??墒?,關(guān)于它到底是屬于控制層還是屬于模型層,存在兩種不同的意見(jiàn),一種認(rèn)為它屬于模型層,如:《JSP Web編程指南》;另一些則認(rèn)為它屬于控制層如:《Programming Jakarta Struts》、《Mastering Jakarta Struts》和《Struts Kick Start》等認(rèn)為它是控制器的一部分,還有其他一些書(shū)如《Struts in Action》也建議要避免將業(yè)務(wù)邏輯放在 Action類中,也就是說(shuō),圖3中Action后的括號(hào)中的內(nèi)容應(yīng)該從中移出,但實(shí)際中確有一些系統(tǒng)將比較簡(jiǎn)單的且不打算重用的業(yè)務(wù)邏輯放在 Action中,所以在圖中還是這樣表示。顯然,將業(yè)務(wù)對(duì)象從Action分離出來(lái)后有利于它的重用,同時(shí)也增強(qiáng)了應(yīng)用程序的健壯性和設(shè)計(jì)的靈活性。因此,它實(shí)際上可以看作是Controller與Model的適配器,如果硬要把它歸于那一部分,筆者更傾向于后一種看法,即它是Controller的一部分,換句話說(shuō),它不應(yīng)該包含過(guò)多的業(yè)務(wù)邏輯,而應(yīng)該只是簡(jiǎn)單地收集業(yè)務(wù)方法所需要的數(shù)據(jù)并傳遞給業(yè)務(wù)對(duì)象。實(shí)際上,它的主要職責(zé)是:校驗(yàn)前提條件或者聲明、調(diào)用需要的業(yè)務(wù)邏輯方法、檢測(cè)或處理其他錯(cuò)誤、路由控制到相關(guān)視圖。

上面這樣簡(jiǎn)單的描述,初學(xué)者可能會(huì)感到有些難以接受,下面舉個(gè)比較具體的例子來(lái)進(jìn)一步幫助我們理解。如:假設(shè),我們做的是個(gè)電子商務(wù)程序,現(xiàn)在程序要完成的操作任務(wù)是提交定單并返回定單號(hào)給客戶,這就是關(guān)于做什么的問(wèn)題,應(yīng)該由Action類完成,但具體怎么獲得數(shù)據(jù)庫(kù)連接,插入定單數(shù)據(jù)到數(shù)據(jù)庫(kù)表中,又怎么從數(shù)據(jù)庫(kù)表中取得這個(gè)定單號(hào)(一般是自增數(shù)據(jù)列的數(shù)據(jù)),這一系列復(fù)雜的問(wèn)題,這都是解決怎么做的問(wèn)題,則應(yīng)該由一個(gè)(假設(shè)名為orderBo)業(yè)務(wù)對(duì)象即Model來(lái)完成。orderBo可能用一個(gè)返回整型值的名為submitOrder的方法來(lái)做這件事,Action則是先校驗(yàn)定單數(shù)據(jù)是否正確,以免常說(shuō)的垃圾進(jìn)垃圾出;如果正確則簡(jiǎn)單地調(diào)用orderBo的submitOrder方法來(lái)得到定單號(hào);它還要處理在調(diào)用過(guò)程中可能出現(xiàn)任何錯(cuò)誤;最后根據(jù)不同的情況返回不同的結(jié)果給客戶。

二、為什么要使用Struts框架

既然本文的開(kāi)始就說(shuō)了,自己可以建這種框架,為什么要使用Struts呢?我想下面列舉的這些理由是顯而易見(jiàn)的:首先,它是建立在MVC這種公認(rèn)的好的模式上的,Struts在M、V和C上都有涉及,但它主要是提供一個(gè)好的控制器和一套定制的標(biāo)簽庫(kù)上,也就是說(shuō)它的著力點(diǎn)在C和V上,因此,它天生就有MVC所帶來(lái)的一系列優(yōu)點(diǎn),如:結(jié)構(gòu)層次分明,高可重用性,增加了程序的健壯性和可伸縮性,便于開(kāi)發(fā)與設(shè)計(jì)分工,提供集中統(tǒng)一的權(quán)限控制、校驗(yàn)、國(guó)際化、日志等等;其次,它是個(gè)開(kāi)源項(xiàng)目得到了包括它的發(fā)明者Craig R.McClanahan在內(nèi)的一些程序大師和高手持續(xù)而細(xì)心的呵護(hù),并且經(jīng)受了實(shí)戰(zhàn)的檢驗(yàn),使其功能越來(lái)越強(qiáng)大,體系也日臻完善;最后,是它對(duì)其他技術(shù)和框架顯示出很好的融合性。如,現(xiàn)在,它已經(jīng)與tiles融為一體,可以展望,它很快就會(huì)與JSF等融會(huì)在一起。當(dāng)然,和其他任何技術(shù)一樣,它也不是十全十美的,如:它對(duì)類和一些屬性、參數(shù)的命名顯得有些隨意,給使用帶來(lái)一些不便;還有如Action類execute方法的只能接收一個(gè) ActionForm參數(shù)等。但瑕不掩瑜,這些沒(méi)有影響它被廣泛使用。

三、Struts的安裝與基本配置

我們主要針對(duì)Struts1.1版本進(jìn)行講解,這里假定讀者已經(jīng)配置好java運(yùn)行環(huán)境和相應(yīng)的Web容器,本文例子所使用的是j2sdk和Tomcat4.1.27。下面,將采用類似于step by step的方式介紹其基礎(chǔ)部分。
安裝Struts:到http://jakarta.apache.org/ 下載Struts的安裝文件,本文例子使用的是1.1版。

接下來(lái)您要進(jìn)行如下幾個(gè)步驟來(lái)完成安裝:

1、解壓下載的安裝文件到您的本地硬盤(pán)

2、生成一個(gè)新的Web應(yīng)用,假設(shè)我們生成的應(yīng)用程序的根目錄在/Webapps/mystruts目錄。在server.xml文件中為該應(yīng)用新建一個(gè)別名如/mystruts

3、從第1步解壓的文件中拷貝下列jar文件到/Webapps/mystruts/WEB-INF/lib目錄,主要文件有如下一些.

struts.jar、commons-beanutils.jar、commons-collections.jar、commons-dbcp.jar、commons-digester.jar、commons-logging.jar、commons-pool.jar、commons-services.jar、commons-validator.jar

4、創(chuàng)建一個(gè)web.xml文件,這是一個(gè)基于servlet的Web應(yīng)用程序都需要的部署描述文件,一個(gè)Struts Web應(yīng)用,在本質(zhì)上也是一個(gè)基于servlet的Web應(yīng)用,它也不能例外。

Struts有兩個(gè)組件要在該文件中進(jìn)行配置,它們是:ActionServlet和標(biāo)簽庫(kù)。下面是一個(gè)配置清單:

  
//EN\" \"http://java.sun.com/dtd/web-app_2_3.dtd\">

 
    action
    org.apache.struts.action.ActionServlet
   
      config
      /WEB-INF/struts-config.xml
   
   
      debug
      2
   
    2
 
 
    action
    *.do
 
 
    /WEB-INF/struts-bean.tld
    /WEB-INF/struts-bean.tld
 
 
    /WEB-INF/struts-html.tld
    /WEB-INF/struts-html.tld
 
 
    /WEB-INF/struts-logic.tld
    /WEB-INF/struts-logic.tld
 

上面我們?cè)趙eb.xml中完成了對(duì)servlet和標(biāo)簽庫(kù)的基本配置,而更多的框架組件要在struts-config.xml中進(jìn)行配置:

5、創(chuàng)建一個(gè)基本的struts-config.xml文件,并把它放在/Webapps/mystruts/WEB-INF/目錄中,該文件是基于 Struts應(yīng)用程序的配置描述文件,它將MVC結(jié)構(gòu)中的各組件結(jié)合在一起,開(kāi)發(fā)的過(guò)程中會(huì)不斷對(duì)它進(jìn)行充實(shí)和更改。在Struts1.0時(shí),一個(gè)應(yīng)用只能有一個(gè)這樣的文件,給分工開(kāi)發(fā)帶來(lái)了一些不便,在Struts1.1時(shí),可以有多個(gè)這樣的文件,將上述缺點(diǎn)克服了。需在該文件中配置的組件有:data -sources
global-execptions、form-beans、global-forwards、action-mappings、controller、message-resources
plug-in

配置清單如下:

     
//EN\" \"http://jakarta.apache.org/struts/dtds/struts-config_1_1.dtd\">

 

   

到此為止,我們已經(jīng)具備了完成一個(gè)最簡(jiǎn)單Struts應(yīng)用的所需的各種組件。前面已經(jīng)提到,在開(kāi)發(fā)過(guò)程中我們會(huì)不斷充實(shí)和修改上面兩個(gè)配置描述文件。下一篇博文將會(huì)繼續(xù)暢談:《解析Struts原理與實(shí)踐(2)》。后續(xù)階段將會(huì)介紹Struts與其他框架的關(guān)系及結(jié)合它們生成應(yīng)用程序的例子。


文章名稱:解析Struts原理與安裝和基本配置
鏈接分享:http://uogjgqi.cn/article/dhijsgs.html
掃二維碼與項(xiàng)目經(jīng)理溝通

我們?cè)谖⑿派?4小時(shí)期待你的聲音

解答本文疑問(wèn)/技術(shù)咨詢/運(yùn)營(yíng)咨詢/技術(shù)建議/互聯(lián)網(wǎng)交流