程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Struts用戶手冊翻譯(1)

Struts用戶手冊翻譯(1)

編輯:關於JAVA

1.1 回到過去!(Struts的簡史)

當Java Servlet出現後,許多程序員很快意識到它是一個非常好的東西。它比標准的CGI更快更強大,而且簡潔並能無限擴展。但是使用無盡的println()語句把Html送到浏覽器上真是又累有容易出問題,於是JSP出現了,JSP使得能在“外面”寫Servlet。於是,程序員們能將Java代碼和Html簡單的混合起來,而且具有Servlet的所有優點!The sky was the limit!

很快,Java網頁應用成為了以JSP為中心的開發。這本身並不是一件壞事情,但是這對解決流程控制問題和其他一些網頁應用特有的問題卻幫助甚微。

於是,很清楚的,我們需要另一種模型了。

許多聰明的程序員意識到可以把JSP和Servlet結合到一起來發布網頁應用。Servlet可以用來處理控制和流程的問題,JSP可以集中處理令人心煩的Html。於是,把JSP和Servlet結合起來成為了大家都知道的Model 2(可能是因為單獨使用JSP時稱為Model 1)。

當然,這裡並沒有什麼新的東西,並且JSP的Model 2很快就被指出是遵循從古老的Smarttalk MVC framework中抽象出來的傳統的模型-視圖-控制的設計方式。Java網頁開發者現在趨向於認為Model 2和MVC的概念是互通的。在本手冊中,我們使用MVC的范例去描述Struts的體系架構,這被命名為Model 2/MVC設計是最合適的了。

Struts項目最早是由Craig R. McClanahan於2000年五月發布的。它為Java社會提供了一個標准的MVC框架。在2001年七月,Struts 1.0發布,同時IOHO。Java Model 2的開發從來不會十分相似的。

1.2 MVC設計方式

在MVC設計方式中,應用程序的流程是被中心控制器調度的。控制器將請求(HTTP的請求)轉到相應的處理去。處理是與模型結合的,每個處理都象一個請求和模型之間的適配器。模型代表了,或者說封裝了應用程序的邏輯或者狀態。控制器控制流程進行到相應的視圖。控制一般通過查詢一系列的對應(一般是從數據庫或者配置文件中)來決定流程的。這在視圖與模型之間提供了一種松散的聯系,使得應用程序能非常容易的開發和維護。

1.2.1 模型:系統狀態和系統邏輯的JavaBeans

基於MVC的模型通常可被劃分為兩個子系統--系統的內部狀態和能改變此狀態的行為。類比於語法,我們可以想象狀態信息是名詞,行為是動詞。

許多應用程序使用一系列的JavaBean來代表系統的狀態,這些bean的屬性代表系統狀態的詳細信息。根據系統的復雜度,這些bean可以是自我包容的(即它們知道如何保持自己的狀態),或者知道怎樣從別的組件,例如數據庫,搜索引擎,實體EJB,LDAP服務或者其他什麼那裡得到系統的狀態。

大型應用通常將一系列可能的操作作為bean的方法,並調用他們來維護狀態信息。例如一個購物車的bean,為每個當前的用戶存儲了會話信息,這些會話信息中包含了用戶選中購買的東西的信息。這個bean應該有個checkOut()的方法,這個方法驗證用戶的信用卡,將用戶的訂單送到倉庫以便包裝和運輸。還有一些系統將可能的操作分開表示,例如作為一個會話EJB。

另一方面,在小規模的應用中,操作將會被內嵌到Action類中,這些Action類是Struts控制層的一部分。當邏輯非常簡單或者不需要邏輯在別的環境中重用時,是非常適合這樣做的。

Struts框架體系對模型訪問的支持是足夠靈活的,但是我們強烈建議你將邏輯(怎樣做)和Action類扮演的角色(做什麼)分開來。

1.2.2 視圖:JSP和表現組件

基於Struts應用的視圖通常使用JSP技術。JSP頁可以由被稱為“模板”的靜態Html(或XML)加上動態內容組成。這些動態內容是基於對特殊的標記的翻譯。JSP環境包含一系列的標准標記,例如。除此之外,有J2EE提供了標准的方法去定義程序員自己的標記,這些自定義的標記被組織成為自定義標記庫。Struts包含了一系列的自定義標記庫可以用來建立多語言的用戶界面,並且和ActionForm bean完美結合。ActionForm得到並校驗系統需要的任何信息。

1.2.3 控制器:ActionServlet和ActionMapping

控制器接收用戶的請求(通常來自浏覽器),然後決定使用什麼邏輯來處理,然後使用一個適合的視圖來作出反應。在Struts中,控制器的主要部件是一個屬於ActionServlet類的Servlet。這個Servlet通過定義一系列的ActionMapping來設置。一個ActionMapping定義了一個請求URI的路徑並提供了一個Action類的完整名稱。所有的Action都是org.apachestruts.action.Action的子類。Action封裝了邏輯類的調用,結果的解釋,並最終將程序控制交到一個合適的視圖組件去,以對請求作出反應。

Struts在標准的ActionMapping類的基礎上,也支持使用更多的屬性去對框架進行操作。這使得你可以保存具體應用中的特殊信息並仍然使用Struts的其他功能。另外,Struts可以讓你對邏輯定義“邏輯名稱”,例如,一個Action的方法可以在不知道具體JSP位置的情況下,要求一個“主菜單”的內容。這些特征可以有效的幫助你將控制邏輯(做什麼)和視圖邏輯(怎樣表示)分離開來。

1.3 Struts的流程控制

Struts框架提供了幾個組件去實現MVC中的控制部分,他們包括:控制Servlet,開發者定義的請求處理,另外一些支持對象。

Struts的自定義標記庫對MVC中的視圖部分提供了直接的支持。他們其中的一些可以訪問控制部分的對象,其他一些在開發的時候是非常好用的。其他標記,包括JSTL,也可以在Struts中使用。其他的表現技術,例如Velocity模板和XSLT也可以在Struts中使用。

MVC中的模型通常與具體的項目有關。Struts訪問應用的具體事務很方便,但是將具體的編程交給了其他的技術,例如JDBC,EJB,Object Relational Bridge,或者Simpler等等。

讓我們來看看所有這些是怎樣結合在一起的。

當初始化的時候,控制器讀取配置文件(struts-config.XML)並使用它去啟動控制對象,這些對象形成了Struts的配置。Struts配置(和另外一些東西)定義了應用中使用的ActionMapping[org.apache.struts.action.ActionMappings]。

Struts的控制器Servlet查詢ActionMapping,將HTTP請求轉到其他組件去。請求可能被轉到JSP或者開發者編寫的Action[org.apache.struts.action.Action]的子類去。這些Mapping使控制器能將HTTP請求轉到應用相關的Action去。

一個ActionMapping通常由以下一些屬性:

一個請求路徑(或者“URI”)執行這個請求的對象類型(Action的子類)其他需要的屬性

Action的對象可以處理請求並向用戶(通常是浏覽器)作出反應,或者將控制轉到其他地方去。例如,如果用戶登錄成功,login的action將會把請求轉到主菜單的頁面上去。

Action對象可以訪問應用的控制器Servlet和它的方法。當將控制轉移時,Action對象可以間接的將一個或多個共享的對象同時轉移,包括JavaBean,這只要將他們放在一個Servlet共享的標准context中即可。

例如,Action對象可以建立一個購物車的bean,並增加商品到這個購物車中,然後將這個bean放到會話中,最後將控制轉移到顯示購物車裡面的內容的JSP頁面。因為每個用戶都有自己的會話,所以他們都有自己的購物車。

在一個Struts應用中,絕大部分的邏輯可以使用JavaBean來編寫。一個Action可以在不知道JavaBean怎樣工作的情況下,調用JavaBean的屬性。這就封裝了邏輯,使得Action可以把精力集中在錯誤處理和流程控制上去。

JavaBean也可以用來管理輸入的表單。網頁應用的一個關鍵問題就是得到並校驗用戶的錄入信息。使用Struts,你可以通過繼承ActionForm定義自己的輸入Bean類。ActionForm類使得存儲和校驗應用中的輸入表單變得很容易。ActionForm的bean可以被自動的按照同一種標准和共享的上下文來存儲,這樣它就可以被其他對象,例如Action對象或者其他JSP訪問。

Form bean可以被JSP用來收集用戶錄入的數據,一個Action對象來校驗這些數據,然後再用JSP重現這個form的內容。在校驗錯誤時,Struts使用一種共享的機制來拋出和顯示錯誤信息。

Struts配置的另外一個元素是ActionFormBean。這是一個描述對象的集合,被用來在運行時建立ActionForm的實例。當一個mapping需要一個ActionForm時,servlet使用名字尋找這些描述對象並使用它去建立一個指定類型的ActionForm的實例。

這是使用ActionForm的請求的一個事件順序:

控制器servlet得到或者建立ActionForm bean的實例控制器servlet將這個bean送到Action對象如果請求是提交數據,則Action對象校驗數據。必要時,數據可以和一些信息被送回到錄入表單並顯示在頁面上。否則,數據將會被傳送到邏輯中去。如果請求是建立一個輸入頁面,Action對象則將輸入頁面需要的數據填入bean中。

Struts框架包括了可以自動填充JavaBean域的自定義標記。JSP需要知道的只是域的名字和將表單提交到哪裡去。其他Struts標記能將Action或者ActionForm的信息自動的顯示出來,這只需要與頁面標記簡單的結合。這些信息是多語言的並能根據用戶所在的地區自動的選擇合適的語言。

Struts框架和它的自定義標記庫是在Java平台下結合起來支持多語言功能的。所有的域名稱和信息可以從一個消息資源中得到。需要對其他語言進行支持,只需要簡單的增加一個資源綁定即可。

除了多語言化,另外一個消息資源的好處就是保持了表單名字的一致性。並且可以在一個地方就能修改所有標簽和信息文字。

對於最簡單的應用,Action對象通常就包括了請求所需要的邏輯。然而,在很多情況下,Action對象應該調用另外一個對象(通常是JavaBean)去執行邏輯。這使得Action只集中處理錯誤和控制流程,而不用管具體的邏輯流程。為了能在另外的平台上重用,邏輯JavaBean不應該調用任何網頁應用的對象。Action對象應該從HTTP請求中將需要的信息翻譯出來並通過標准的Java變量傳送到邏輯bean中去。

例如,對於一個數據庫應用:

邏輯bean連接並查詢數據庫邏輯bean把結果返回到Action對象Action對象把結果存在請求的form bean中JSP在Html中顯示這些數據

無論是Action或者JSP都不需要知道這些數據是從哪裡來的,它們只需要知道怎樣包裝和顯示他們。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved