国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書(shū)等14項(xiàng)超值服

開(kāi)通VIP
Struts用戶(hù)手冊(cè)翻譯(1)
作者:未知 來(lái)源:月光軟件站 加入時(shí)間:2005-5-13 月光軟件站
1.1 回到過(guò)去?。⊿truts的簡(jiǎn)史)
當(dāng)Java Servlet出現(xiàn)后,許多程序員很快意識(shí)到它是一個(gè)非常好的東西。它比標(biāo)準(zhǔn)的CGI更快更強(qiáng)大,而且簡(jiǎn)潔并能無(wú)限擴(kuò)展。但是使用無(wú)盡的println()語(yǔ)句把HTML送到瀏覽器上真是又累有容易出問(wèn)題,于是JSP出現(xiàn)了,JSP使得能在“外面”寫(xiě)Servlet。于是,程序員們能將Java代碼和HTML簡(jiǎn)單的混合起來(lái),而且具有Servlet的所有優(yōu)點(diǎn)!The sky was the limit!
很快,Java網(wǎng)頁(yè)應(yīng)用成為了以JSP為中心的開(kāi)發(fā)。這本身并不是一件壞事情,但是這對(duì)解決流程控制問(wèn)題和其他一些網(wǎng)頁(yè)應(yīng)用特有的問(wèn)題卻幫助甚微。
于是,很清楚的,我們需要另一種模型了。
許多聰明的程序員意識(shí)到可以把JSP和Servlet結(jié)合到一起來(lái)發(fā)布網(wǎng)頁(yè)應(yīng)用。Servlet可以用來(lái)處理控制和流程的問(wèn)題,JSP可以集中處理令人心煩的HTML。于是,把JSP和Servlet結(jié)合起來(lái)成為了大家都知道的Model 2(可能是因?yàn)閱为?dú)使用JSP時(shí)稱(chēng)為Model 1)。
當(dāng)然,這里并沒(méi)有什么新的東西,并且JSP的Model 2很快就被指出是遵循從古老的Smarttalk MVC framework中抽象出來(lái)的傳統(tǒng)的模型-視圖-控制的設(shè)計(jì)方式。Java網(wǎng)頁(yè)開(kāi)發(fā)者現(xiàn)在趨向于認(rèn)為Model 2和MVC的概念是互通的。在本手冊(cè)中,我們使用MVC的范例去描述Struts的體系架構(gòu),這被命名為Model 2/MVC設(shè)計(jì)是最合適的了。
Struts項(xiàng)目最早是由Craig R. McClanahan于2000年五月發(fā)布的。它為Java社會(huì)提供了一個(gè)標(biāo)準(zhǔn)的MVC框架。在2001年七月,Struts 1.0發(fā)布,同時(shí)IOHO。Java Model 2的開(kāi)發(fā)從來(lái)不會(huì)十分相似的。
1.2 MVC設(shè)計(jì)方式
在MVC設(shè)計(jì)方式中,應(yīng)用程序的流程是被中心控制器調(diào)度的??刂破鲗⒄?qǐng)求(HTTP的請(qǐng)求)轉(zhuǎn)到相應(yīng)的處理去。處理是與模型結(jié)合的,每個(gè)處理都象一個(gè)請(qǐng)求和模型之間的適配器。模型代表了,或者說(shuō)封裝了應(yīng)用程序的邏輯或者狀態(tài)??刂破骺刂屏鞒踢M(jìn)行到相應(yīng)的視圖??刂埔话阃ㄟ^(guò)查詢(xún)一系列的對(duì)應(yīng)(一般是從數(shù)據(jù)庫(kù)或者配置文件中)來(lái)決定流程的。這在視圖與模型之間提供了一種松散的聯(lián)系,使得應(yīng)用程序能非常容易的開(kāi)發(fā)和維護(hù)。
1.2.1 模型:系統(tǒng)狀態(tài)和系統(tǒng)邏輯的JavaBeans
基于MVC的模型通??杀粍澐譃閮蓚€(gè)子系統(tǒng)--系統(tǒng)的內(nèi)部狀態(tài)和能改變此狀態(tài)的行為。類(lèi)比于語(yǔ)法,我們可以想象狀態(tài)信息是名詞,行為是動(dòng)詞。
許多應(yīng)用程序使用一系列的JavaBean來(lái)代表系統(tǒng)的狀態(tài),這些bean的屬性代表系統(tǒng)狀態(tài)的詳細(xì)信息。根據(jù)系統(tǒng)的復(fù)雜度,這些bean可以是自我包容的(即它們知道如何保持自己的狀態(tài)),或者知道怎樣從別的組件,例如數(shù)據(jù)庫(kù),搜索引擎,實(shí)體EJB,LDAP服務(wù)或者其他什么那里得到系統(tǒng)的狀態(tài)。
大型應(yīng)用通常將一系列可能的操作作為bean的方法,并調(diào)用他們來(lái)維護(hù)狀態(tài)信息。例如一個(gè)購(gòu)物車(chē)的bean,為每個(gè)當(dāng)前的用戶(hù)存儲(chǔ)了會(huì)話(huà)信息,這些會(huì)話(huà)信息中包含了用戶(hù)選中購(gòu)買(mǎi)的東西的信息。這個(gè)bean應(yīng)該有個(gè)checkOut()的方法,這個(gè)方法驗(yàn)證用戶(hù)的信用卡,將用戶(hù)的訂單送到倉(cāng)庫(kù)以便包裝和運(yùn)輸。還有一些系統(tǒng)將可能的操作分開(kāi)表示,例如作為一個(gè)會(huì)話(huà)EJB。
另一方面,在小規(guī)模的應(yīng)用中,操作將會(huì)被內(nèi)嵌到Action類(lèi)中,這些Action類(lèi)是Struts控制層的一部分。當(dāng)邏輯非常簡(jiǎn)單或者不需要邏輯在別的環(huán)境中重用時(shí),是非常適合這樣做的。
Struts框架體系對(duì)模型訪(fǎng)問(wèn)的支持是足夠靈活的,但是我們強(qiáng)烈建議你將邏輯(怎樣做)和Action類(lèi)扮演的角色(做什么)分開(kāi)來(lái)。
1.2.2 視圖:JSP和表現(xiàn)組件
基于Struts應(yīng)用的視圖通常使用JSP技術(shù)。JSP頁(yè)可以由被稱(chēng)為“模板”的靜態(tài)HTML(或XML)加上動(dòng)態(tài)內(nèi)容組成。這些動(dòng)態(tài)內(nèi)容是基于對(duì)特殊的標(biāo)記的翻譯。JSP環(huán)境包含一系列的標(biāo)準(zhǔn)標(biāo)記,例如<jsp:useBean>。除此之外,有J2EE提供了標(biāo)準(zhǔn)的方法去定義程序員自己的標(biāo)記,這些自定義的標(biāo)記被組織成為自定義標(biāo)記庫(kù)。Struts包含了一系列的自定義標(biāo)記庫(kù)可以用來(lái)建立多語(yǔ)言的用戶(hù)界面,并且和ActionForm bean完美結(jié)合。ActionForm得到并校驗(yàn)系統(tǒng)需要的任何信息。
1.2.3 控制器:ActionServlet和ActionMapping
控制器接收用戶(hù)的請(qǐng)求(通常來(lái)自瀏覽器),然后決定使用什么邏輯來(lái)處理,然后使用一個(gè)適合的視圖來(lái)作出反應(yīng)。在Struts中,控制器的主要部件是一個(gè)屬于ActionServlet類(lèi)的Servlet。這個(gè)Servlet通過(guò)定義一系列的ActionMapping來(lái)設(shè)置。一個(gè)ActionMapping定義了一個(gè)請(qǐng)求URI的路徑并提供了一個(gè)Action類(lèi)的完整名稱(chēng)。所有的Action都是org.apachestruts.action.Action的子類(lèi)。Action封裝了邏輯類(lèi)的調(diào)用,結(jié)果的解釋?zhuān)⒆罱K將程序控制交到一個(gè)合適的視圖組件去,以對(duì)請(qǐng)求作出反應(yīng)。
Struts在標(biāo)準(zhǔn)的ActionMapping類(lèi)的基礎(chǔ)上,也支持使用更多的屬性去對(duì)框架進(jìn)行操作。這使得你可以保存具體應(yīng)用中的特殊信息并仍然使用Struts的其他功能。另外,Struts可以讓你對(duì)邏輯定義“邏輯名稱(chēng)”,例如,一個(gè)Action的方法可以在不知道具體JSP位置的情況下,要求一個(gè)“主菜單”的內(nèi)容。這些特征可以有效的幫助你將控制邏輯(做什么)和視圖邏輯(怎樣表示)分離開(kāi)來(lái)。
1.3 Struts的流程控制
Struts框架提供了幾個(gè)組件去實(shí)現(xiàn)MVC中的控制部分,他們包括:控制Servlet,開(kāi)發(fā)者定義的請(qǐng)求處理,另外一些支持對(duì)象。
Struts的自定義標(biāo)記庫(kù)對(duì)MVC中的視圖部分提供了直接的支持。他們其中的一些可以訪(fǎng)問(wèn)控制部分的對(duì)象,其他一些在開(kāi)發(fā)的時(shí)候是非常好用的。其他標(biāo)記,包括JSTL,也可以在Struts中使用。其他的表現(xiàn)技術(shù),例如Velocity模板和XSLT也可以在Struts中使用。
MVC中的模型通常與具體的項(xiàng)目有關(guān)。Struts訪(fǎng)問(wèn)應(yīng)用的具體事務(wù)很方便,但是將具體的編程交給了其他的技術(shù),例如JDBC,EJB,Object Relational Bridge,或者Simpler等等。
讓我們來(lái)看看所有這些是怎樣結(jié)合在一起的。
當(dāng)初始化的時(shí)候,控制器讀取配置文件(struts-config.xml)并使用它去啟動(dòng)控制對(duì)象,這些對(duì)象形成了Struts的配置。Struts配置(和另外一些東西)定義了應(yīng)用中使用的ActionMapping[org.apache.struts.action.ActionMappings]。
Struts的控制器Servlet查詢(xún)ActionMapping,將HTTP請(qǐng)求轉(zhuǎn)到其他組件去。請(qǐng)求可能被轉(zhuǎn)到JSP或者開(kāi)發(fā)者編寫(xiě)的Action[org.apache.struts.action.Action]的子類(lèi)去。這些Mapping使控制器能將HTTP請(qǐng)求轉(zhuǎn)到應(yīng)用相關(guān)的Action去。
一個(gè)ActionMapping通常由以下一些屬性:
一個(gè)請(qǐng)求路徑(或者“URI”) 執(zhí)行這個(gè)請(qǐng)求的對(duì)象類(lèi)型(Action的子類(lèi)) 其他需要的屬性
Action的對(duì)象可以處理請(qǐng)求并向用戶(hù)(通常是瀏覽器)作出反應(yīng),或者將控制轉(zhuǎn)到其他地方去。例如,如果用戶(hù)登錄成功,login的action將會(huì)把請(qǐng)求轉(zhuǎn)到主菜單的頁(yè)面上去。
Action對(duì)象可以訪(fǎng)問(wèn)應(yīng)用的控制器Servlet和它的方法。當(dāng)將控制轉(zhuǎn)移時(shí),Action對(duì)象可以間接的將一個(gè)或多個(gè)共享的對(duì)象同時(shí)轉(zhuǎn)移,包括JavaBean,這只要將他們放在一個(gè)Servlet共享的標(biāo)準(zhǔn)context中即可。
例如,Action對(duì)象可以建立一個(gè)購(gòu)物車(chē)的bean,并增加商品到這個(gè)購(gòu)物車(chē)中,然后將這個(gè)bean放到會(huì)話(huà)中,最后將控制轉(zhuǎn)移到顯示購(gòu)物車(chē)?yán)锩娴膬?nèi)容的JSP頁(yè)面。因?yàn)槊總€(gè)用戶(hù)都有自己的會(huì)話(huà),所以他們都有自己的購(gòu)物車(chē)。
在一個(gè)Struts應(yīng)用中,絕大部分的邏輯可以使用JavaBean來(lái)編寫(xiě)。一個(gè)Action可以在不知道JavaBean怎樣工作的情況下,調(diào)用JavaBean的屬性。這就封裝了邏輯,使得Action可以把精力集中在錯(cuò)誤處理和流程控制上去。
JavaBean也可以用來(lái)管理輸入的表單。網(wǎng)頁(yè)應(yīng)用的一個(gè)關(guān)鍵問(wèn)題就是得到并校驗(yàn)用戶(hù)的錄入信息。使用Struts,你可以通過(guò)繼承ActionForm定義自己的輸入Bean類(lèi)。ActionForm類(lèi)使得存儲(chǔ)和校驗(yàn)應(yīng)用中的輸入表單變得很容易。ActionForm的bean可以被自動(dòng)的按照同一種標(biāo)準(zhǔn)和共享的上下文來(lái)存儲(chǔ),這樣它就可以被其他對(duì)象,例如Action對(duì)象或者其他JSP訪(fǎng)問(wèn)。
Form bean可以被JSP用來(lái)收集用戶(hù)錄入的數(shù)據(jù),一個(gè)Action對(duì)象來(lái)校驗(yàn)這些數(shù)據(jù),然后再用JSP重現(xiàn)這個(gè)form的內(nèi)容。在校驗(yàn)錯(cuò)誤時(shí),Struts使用一種共享的機(jī)制來(lái)拋出和顯示錯(cuò)誤信息。
Struts配置的另外一個(gè)元素是ActionFormBean。這是一個(gè)描述對(duì)象的集合,被用來(lái)在運(yùn)行時(shí)建立ActionForm的實(shí)例。當(dāng)一個(gè)mapping需要一個(gè)ActionForm時(shí),servlet使用名字尋找這些描述對(duì)象并使用它去建立一個(gè)指定類(lèi)型的ActionForm的實(shí)例。
這是使用ActionForm的請(qǐng)求的一個(gè)事件順序:
控制器servlet得到或者建立ActionForm bean的實(shí)例 控制器servlet將這個(gè)bean送到Action對(duì)象 如果請(qǐng)求是提交數(shù)據(jù),則Action對(duì)象校驗(yàn)數(shù)據(jù)。必要時(shí),數(shù)據(jù)可以和一些信息被送回到錄入表單并顯示在頁(yè)面上。否則,數(shù)據(jù)將會(huì)被傳送到邏輯中去。 如果請(qǐng)求是建立一個(gè)輸入頁(yè)面,Action對(duì)象則將輸入頁(yè)面需要的數(shù)據(jù)填入bean中。
Struts框架包括了可以自動(dòng)填充JavaBean域的自定義標(biāo)記。JSP需要知道的只是域的名字和將表單提交到哪里去。其他Struts標(biāo)記能將Action或者ActionForm的信息自動(dòng)的顯示出來(lái),這只需要與頁(yè)面標(biāo)記簡(jiǎn)單的結(jié)合。這些信息是多語(yǔ)言的并能根據(jù)用戶(hù)所在的地區(qū)自動(dòng)的選擇合適的語(yǔ)言。
Struts框架和它的自定義標(biāo)記庫(kù)是在Java平臺(tái)下結(jié)合起來(lái)支持多語(yǔ)言功能的。所有的域名稱(chēng)和信息可以從一個(gè)消息資源中得到。需要對(duì)其他語(yǔ)言進(jìn)行支持,只需要簡(jiǎn)單的增加一個(gè)資源綁定即可。
除了多語(yǔ)言化,另外一個(gè)消息資源的好處就是保持了表單名字的一致性。并且可以在一個(gè)地方就能修改所有標(biāo)簽和信息文字。
對(duì)于最簡(jiǎn)單的應(yīng)用,Action對(duì)象通常就包括了請(qǐng)求所需要的邏輯。然而,在很多情況下,Action對(duì)象應(yīng)該調(diào)用另外一個(gè)對(duì)象(通常是JavaBean)去執(zhí)行邏輯。這使得Action只集中處理錯(cuò)誤和控制流程,而不用管具體的邏輯流程。為了能在另外的平臺(tái)上重用,邏輯JavaBean不應(yīng)該調(diào)用任何網(wǎng)頁(yè)應(yīng)用的對(duì)象。Action對(duì)象應(yīng)該從HTTP請(qǐng)求中將需要的信息翻譯出來(lái)并通過(guò)標(biāo)準(zhǔn)的Java變量傳送到邏輯bean中去。
例如,對(duì)于一個(gè)數(shù)據(jù)庫(kù)應(yīng)用:
邏輯bean連接并查詢(xún)數(shù)據(jù)庫(kù) 邏輯bean把結(jié)果返回到Action對(duì)象 Action對(duì)象把結(jié)果存在請(qǐng)求的form bean中 JSP在HTML中顯示這些數(shù)據(jù)
無(wú)論是Action或者JSP都不需要知道這些數(shù)據(jù)是從哪里來(lái)的,它們只需要知道怎樣包裝和顯示他們。
 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶(hù)發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
mayong--淺析struts 體系結(jié)構(gòu)與工作原理
第一個(gè)Struts 應(yīng)用:helloapp
Struts在Tomcat中的安裝配置及工作流程
java面試-ssh-1
Struts初步認(rèn)識(shí)
MVC構(gòu)架(4)
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服