Struts 1.1的一個新特性是應用模塊的概念。應用模塊允許將單個Struts應用劃分成幾個模塊,每個模塊有自己的Struts配置文件, JSP頁面,Action等等。這個新特性是為了解決大中型的開發隊伍抱怨最多的一個問題,即為了更好的支持並行開發允許多個配置 文件而不是單個配置文件。
在用struts進行大型項目開發中,使用這種新特性將是非常好的選擇。
下面我以一個非常簡單的例子來展示這一功能。
通常在單模塊進行開發時,文件的最一般的目錄結構如下:
test/
..../web-inf/
.........../classes
.........../lib
.........../*.tld
.........../struts-config.xml
........... /web.xml
........... /validator-rules.xml
........... /validation.xml
........... ...
..../js
..../css
..../main1.jsp (本例使用的一個簡單的jsp頁面)
..../*.jsp
... ..
如果我們增加一個單獨的模塊如:test1,則文件的最一般的目錄結構如下:
test/
..../test1 ****
........./main11.jsp (本例使用的一個簡單的jsp頁面)
........./*.jsp ****
..../web-inf/
.........../classes
.........../lib
.........../*.tld
.........../struts-config.xml
........... /struts-test1-config.xml *****
........... /web.xml
........... /validator-rules.xml
........... /validation.xml
........... ...
.../js
... /css
.../main1.jsp (本例使用的一個簡單的jsp頁面)
.../*.jsp
... ..
[旁邊帶有「****」的為新增的一些文件或目錄]
以下為變更的幾個xml配置文件:
1.struts-config.xml
在原來的action-mapping 增加switchAction 如:
....
....
<action-mappings>
<!-- Edit user registration -->
<action path="/login"
type="com.ifreeway.rms.v12.action.LoginAction"
scope="request">
<forward name="error" path="/main1.jsp"/>
</action>
<action path="/login1"
type="com.ifreeway.rms.v12.action.LoginAction1"
scope="request">
<forward name="error" path="/main1.jsp"/>
</action>
<action path="/switchdo" type="org.apache.struts.actions.SwitchAction"/> ****
</action-mappings>
....
....
[旁邊帶有「****」的為新特性中增加的配置]
2.struts-test1-config.xml
添加輸入這個模塊的actionmapping 如下:
....
....
<action-mappings>
<!-- Edit user registration -->
<action path="/login3"
type="com.ifreeway.rms.v12.action.LoginAction2"
scope="request">
<forward name="error" path="/main11.jsp"/>
</action>
</action-mappings>
....
....
3.web.xml
....
....
<servlet>
<servlet-name>action</servlet-name>
<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<init-param>
<param-name>config/test1</param-name> *****
<param-value>/WEB-INF/struts-test1-config.xml</param-value> *****
</init-param>
<init-param>
<param-name>debug</param-name>
<param-value>3</param-value>
</init-param>
<init-param>
<param-name>detail</param-name>
<param-value>3</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
....
....
[旁邊帶有「****」的為新特性中增加的配置]
大家可以看到在struts-test1-config.xml中增加了下面代碼:
<action path="/switchdo" type="org.apache.struts.actions.SwitchAction"/>
因為在struts1.1中模塊之間的導航要使用到org.apache.struts.actions.SwitchAction,如果你查看struts1.1的源代碼可以發現
org.apache.struts.actions.SwitchAction需要兩個參數:prefix 和 page 下面對這個參數逐一說明:
這兩個參數均要以「/」開頭
prefix 簡單一點就是新增模塊的名字,本例為:test1
page 就是在新的strutsconfig配置文件中要使用的actionmapping的名字 就本例為:login3.do
注意:如果是要使用卻省模塊的調用的話 prefix=空字符串
好了下面給出模塊間轉換的方法
啟動Tomcat
http://localhost:8080/test/switchdo.do?prefix=/test1&page=/login3.do
則調用struts-test1-config.xml下的/login3.do
http://localhost:8080/test/switchdo.do?prefix=&page=/login1.do
則調用struts-config.xml下的/login1.do
http://localhost:8080/test/switchdo.do?prefix=&page=/login.do
則調用struts-config.xml下的/login.do
總的來說模塊之間的轉換要用到org.apache.struts.actions.SwitchAction,而它需要傳遞兩個參數(一般出錯的地方極有可能出在參數
的錯誤上,請注意了)
[註:在struts1.1正式版中已經支持多了配置文件]
|
|