Struts 如何工作的

作者:東海之心 2003-11-28,來源:Struts How To:http://jakarta.apache.org/struts/faqs/works.html
Java Servlets 被設計用於操控(handle)Web瀏覽器的請求。Java ServerPage被設計用於創建哪些可發佈宣傳站點到在線應用系統中的動態Web頁面。Struts使用一個特殊的Servlet作爲“交換機”,將來自Web瀏覽器的請求轉到相應的ServerPage。這使Web應用更加容易設計、創建和維護。
以下是有關Struts的機制和依存關係的更加詳細說明:
l 你開發的web應用有一個必須要寫的部署描述文件(WEB-INF/web.xml)。這個文件描述了你的web應用的配置,包括歡迎頁面(welcome pages)(當請求沒有指定時,出現在目錄下的文件)、servlet(路徑或者擴展名)和那些servlets的參數的映射。
在這個文件中,你配置Struts ActionServlet作爲一個操控所有指定映射(通常以.do爲擴展名)請求的servlet。這就是前面提到的“交換機”。
也在這個文件中,你配置ActionServlet使用一個或者多個用於Struts本身的配置文件。
在本教程中,假定我們將web應用安裝在服務器的/myapp下,並且使用最簡單的可能配置。
如果你需要了解有關部署描述符方面更加詳細的情況,請閱讀Servlet 規範,這個可以在Sun的Java站點獲得。
l 在Struts配置文件中,你將路徑和你應用程序的控制組件相關聯,像Action類(例如:“login”=>LoginAction類)。這告訴Struts的ActionServlet,當來一個http://myhost/myapp/login.do請求時,應該調用你的控制組件LoginAction。
注意在這個URL中的後綴.do。這個後綴導致你的容器(例如Tomcat)去調用ActionServlet,它將單詞“login”看做你要做的一件事。當這個配置被引用後,你的LoginAction也配執行。
l 對於每個Action,你也可以用結果頁面(resulting page)的名字配置Struts,這些結果頁面可以顯示作爲動作的結果。動作的結果可以有不止一種的視圖(通常的,它至少有兩種:一個是成功,一個是失敗)。你的Action(你寫的控制組件)依賴於這些“邏輯”結果的映射名。它使用一些諸如“success”“、failur”、“ok”、“UserInIncompetent”等詞向ActionServlet回報。Struts系統(通過你寫的配置文件)知道如何轉向到合適的指定頁面。這就是通過簡單的編寫Struts XMl配置文件爲視圖層進行重新配置所帶來的額外好處。
從這點來看,Struts知道如何委派你的控制組件,知道你的控制器處理結果要顯示什麼。應用程序的模型(model)部分完全取決於你,它從你的控制組件內被調用。
l 你也許要在Struts配置文件中將一個Java Bean和一個action(或者一組action)相關聯。Java Bean被當做form或者顯示數據的倉庫(repository),它可以在view和controller層通信。
這些Beans對你的控制組件(像LoginAction)和任何與控制器(controller)相關聯的顯示頁面都將自動可見。
在Struts系統的幫助下,這些Beans將被覈准用於幫助確認用戶在表單中輸入正確的數據。它們可以被一個session攜帶,允許表單(form)跨越多個視圖頁面,而Actions在控制器中。
注意:爲了使顯示層看到這些數據,你必須使用一些服務端技術(JSP、Velcity、XSLT)(靜態的HTML不起作用)。
Struts工作在服務端,因此客戶的視圖必須在那裏編寫。客戶端通過一般的表單提交(POST/GET)方法反饋數據,Struts系統在調用你的控制組件之前更新Bean裏面的數據。
l 在你的web應用中,將會有一些頁面,這些頁面用於表現你的用戶將看到的視圖。這些可以是JSP頁面,Velocity模板,XSLT頁面等等。一組JSP標籤和Struts發行包綁定,這樣,你可以立刻使用,但不是說任何標準的表示技術(presentation technology)都可以在Struts中使用。
當然,靜態HTML文件可以在你的Struts應用中使用,但是它們將不能獲得充分獲得動態特點的好處。
在Struts JSP taglibs的例子中,提供了一些其他包,使這個framework更加容易使用你的一些喜好的表現技術。對於Velocity 模板,有用於Struts的Velocity的ViewTools。如果你要使用XSLT在你的應用中,你可以在stxx和StrutsCX之間選擇。
這些包使標準的Struts框架元素看起來像是原來表現技術的不可分割的一部分。Struts也使它變得容易混合和搭配。如果需要,你可以在同一個應用中使用JSP、velocity模板和XSLT!
由於Struts依賴於標準的Servlet技術,所有你應該可以在Struts中使用任何Java表現技術。
l 雖然Struts框架的焦點在控制器(controller),但是表現層是任何一個應用的有機部分。Struts JSP標籤庫包括一些普通的和Struts特有的標籤,用於幫助在你的視圖中使用動態數據。
客戶定製JSP標籤佔Struts基礎代碼的很大一部分。一個有教育意義的是,在1.1b3版本中,有關Struts的核心Java代碼是大約28,000行,而標籤庫(包括tiles)的Java代碼是將近41,000行。
這些標籤有助於你將你的視圖層和控制層粘合而不需要插入很多Java代碼在JSP中。這使頁面看起來像一個XML文件,比起一個尋常的JSP文件,這使web設計者更加容易處理。這也有助於減少控制和視圖的耦合性。
客戶定製標籤用於創建表單(非顯示的和前面提到的Bean相關),邏輯上指向其他頁面,然後激活web應用中的其他action。
還有一些標籤是幫助你進行國際化、錯誤消息處理等等。所有這些功能都依靠你在應用於Struts中的配置文件的一些方法。
你需要記住的重要一點是,這裏所說的機制僅僅在ActionServlet操控請求時纔有效。
既然這隻發生當你的請求被提交然後致使容器調用ActionServlet的情況下,所以你必須確保任何依賴於Struts的頁面的請求是映射到ActionServelt的。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章