使用Struts1.x中的多模塊功能時的注意事項

Struts1.x是目前在項目中應用的較爲廣泛的框架,它的多模塊功能在團隊開發時很有用,但在很多書上講的並不多,Struts自身的文檔也說的比較簡單,用起來好像比較簡單,但有時候經常會造成一些問題,對初次接觸多模塊的人,這些問題會造成一些不必要的困惑。現將採用Struts的多模塊時應注意的事項總結一下,在此和大家共享:

(1)在web.xml文件中添加模塊的配置文件時,一定要保留默認的配置文件,即web.xml文件中至少保持兩個 <init-param>標記,一個用於定義默認的struts-config.xml,一個用於定義你需要的模塊配置文件。如果只定義了模塊使用的配置文件,而刪除了默認的配置文件,struts將不能正常的工作。

(2)在模塊的配置文件中定義action、formbean的方法和不採用模塊時的配置方法是一樣的;但在定義forward時,一定不要忘了設置contextRelative="true",否則在跳轉時struts會在forward要轉向的網頁前面加上模塊的前綴作爲在WEB程序中的查找路徑,這樣就會在轉發時出現找不到JSP頁面的錯誤。

(3)模塊中的JSP頁面如果使用了<html:form>標記來獲得formbean中的數據,一定要注意,這種JSP頁面不能直接作爲直接的鏈接讓用戶點擊,而是應該在該模塊的action中,使用非重定向forward轉入,否則該頁面中的<html:form>會導致錯誤。另外,<html:form>標記的action屬性要直接設置爲該模塊中對應的action的path屬性,不需要加上模塊的前綴。鑑於這些原因,一般都會把模塊中的JSP頁面放入/WEB-INF目錄中的某個文件夾,比如/WEB-INF/jsps目錄,由於/WEB-INF目錄不能直接被用戶訪問,這樣,就會阻止用戶無意中訪問了對應的JSP文件而造成的錯誤。

從以上的總結可以看出,利用struts多模塊編程時,比較好的策略是,將所有struts管理的頁面都放入/WEB-INF文件夾的某個目錄中,最好在這個目錄下爲每一個模塊建立一個見名知義的文件夾,然後將這些JSP頁面按照其所屬的模塊,放入這些文件夾,而訪問這些JSP頁面都要通過對應模塊中的action進行轉發,這實際上也是MVC所要求的一種設計和運行模式。另外,不要由一個模塊的action直接轉發到另一個模塊的action負責管理的頁面,這樣即破壞了MVC的分工原則,又會帶來多模塊中頁面的路徑和formbean的問題。如果需要模塊之間的頁面轉移,可以利用重定向forward直接轉發到另一個模塊的action,再由這個action決定將用戶轉發到本模塊中的具體的JSP頁面。這樣即保持了MVC的分工原則,又保護了多模塊中使用formbean的JSP頁面。最後,建議在多模塊中,最好採用DispatchAction,這樣action的代碼比較清晰明確,易於維護。

附件是一個樣本war文件,其中包含了源代碼,用到了LazyFormBean.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章