在使用Struts框架時,每個請求都由Action去處理,並且還要在struts-config.xml中加以設定,這樣以來做小項目還行,在大型網站的開發中,有很多小組負責不同的模塊,如果每一個小組要對一個struts-config.xml進行設定,將會導致struts-config.xml的版本控制問題。
您可以為每個小組分配不同的struts-config.xml設定文件,方法是在ActionServlet參數的config參數後面加上後綴,如果是config/admin,那麼相應的配置文件的名字就是:struts-config-admin,他們的後綴名字必須對應,這樣才能映射上。
例如我們可以把後台處理分配一個小組,設定具體代碼如下所示:web.xml
action
org.apache.struts.action.ActionServlet
config
/WEB-INF/conf/struts-config.xml
config/admin
/WEB-INF/conf/struts-confg-admin.xml
debug
3
detail
3
0
config/admin:指定了admin模塊的所使用的配置文件是struts-config-admin.xml,現在負責後台模塊的開發人員只要管理自己的開發文檔設定就行了,就像前面所說的一樣,當ActionServlet收到請求時,它是根據模塊你所指定的後綴,進行處理是哪個模塊的請求。
例如:
http://localhost:8080/strutsmodel/admin/admin.do
這個URL,表示請求由strutsmodel工程的admin環境的admin.do來處理這個請求。這樣以來前台和後台就分明了,各自開發各自的,各自管理自己的配置文件,達到松耦合的目的。
當ActionServlet請求接收請求,它判斷URL中相對與context的前綴,例如上例中的admin,於是就知道應該使用admin模塊。下面是struts-config-admin.xml:
……
path="/admin"
type="org.zhoudq.webapp.action.AdminAction" >
……
這樣以來所有的path設定將自動被加上login前綴,例如必須使用以下的路徑才可以正確的請求到AdminAction:
http://localhost:8080/strutsmodel/admin/admin.do
在模塊中的Action在查找forward時,都是以所在模塊,查找對應的struts-confg-XXX.xml的,例如上面的AdminAction在查找forward時,則會查找struts-config-admin.xml中的forward元素,也就是說,模塊中的forward對象的查找都是相對於模塊的路徑的,而不是相對與環境上下文。
那麼我們模塊分配工作幾已經搞定了,各個小組可以分別開工了,但是問題來了,那麼如何從當前的模塊換到另一個模塊呢?
當您的項目分作很多個模塊時,在使用者點某個鏈接時,您有兩個方法可以在模塊之間切換。
一、方法一
是使用相對與環境上下文的路徑進行forward轉發,您可以在當前的struts-config-XX.xml如下設定,例如是:struts-config-admin.xml中加入:
name="switchModuleToFront"
contextRelative="true"
path="/front/login.do"
redirect="true"/>
這個是全局可以找到的forward中設定的,下面是在action元素中設定如何轉發模塊,代碼如下:
……
path="/admin"
type="org.zhoudq.webapp.action.AdminAction" >
name="admin"
contextRelative="true"
path="/front/login.do"
redirect="true"/>
……
上面這種配置就是通過forward元素轉換到相應的模塊,下面我們看另一種方法吧。
二、方法二
這種方法是我們通過配置Struts的一個特定的類SwitchAction,就能實現上面的要求了。並且需要兩個參數:
1. prefix:用來指定模塊的後綴名稱
2. page:用來指定你的資源路徑。
例如:
……
path="/switch"
type="org.apache.struts.actions.SwitchAction"/>
……
例如:
http://localhost:8080/strutsmodel/switch.do?prefix=/admin&page=/admin.do
這個是訪問我們後台模塊的admin.do資源。模塊化決絕了我們開發中的不少問題吧,希望能幫助您解決一些問題,嘿嘿,加油吧……