Struts1.1支持多应用模块,即同一个应用包含多个子应用,每个子应用可以处理相关的功能,
例如,对于网上购物应用,可以又一个子应用来处理商品和商品目录信息,另外一个处理购物车和订单
所有的子应用都共享一个ActionServlet实例,但是每个子应用都有单独的配置文件,把应用划分成多个子应用有以下步骤:
a、为每个子应用创建单独的Struts配置文件;
b、在web.xml的ActionServlet的配置代码中添加每个子应用信息。
c、采用<forward>元素或SwitchAction类来实现子应用之间的切换。
例如,把某个应用划分为两个子应用模块,配置文件分别为:struts-config.xml和struts-moduleB.xml
struts-config.xml文件中的<controller>元素的processorClass属性为默认值“org.apache.struts.action.RequestProcessor",struts-moduleB.xml文件中的该元素的processorClass属性为"CustomerRequestProcessor".
接下来,应该在web.xml的ActionServlet的配置代码中添加每个子应用信息,代码如下
<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/moduleB</param-name>
<param-value>/WEB-INF/struts-moduleB.xml</param-value>
</init-param>
</load-on-startup>1</load-on-startup>
</servlet>
第一个<init-param>元素的param-name属性定义了config,表示配置的是默认子应用模块,第二个属性以"config/"开头,表示非默认子应用模块。
有两种办法进行子应用模块之间的切换,一种方法是实用全局或局部的<forward>元素,此时将该元素的contextRelative属性设为true,还有一种办法是使用内置的org.apache.struts.action.SwitchAction类。例如
<global-forwards>
<forward name = "toModuleB"
contextRelative = "true"
path = "/moduleB/index.do"
redirect = "true"
...
</global-forwards>
也可以使用<action>元素中的局部<forward>元素,例如
<action-mappings>
...
<action ..>
<forward name = "success"
contextRelative="true"
path = "/moduleB/index.do"
redirect ="true"/>
</action>
..
</action-mappings>
此外,还可以使用org.apache.struts.actions.SwitchAction类,例如:
<action-mappings>
<action path="/toModule"
type = "org.apache.struts.actions.SwitchAction"/>
</action-mappings>
如果要从默认模块切换到ModuleB,可采用与以下类似的URL:
http://localhost:8080/toModule.do?prefix=moduleB&page=/index.do
如果要从默认的ModuleB切换到默认模块,可采用
http://localhost:8080/toModule.do?prefix=&page=/index.do
例如,对于网上购物应用,可以又一个子应用来处理商品和商品目录信息,另外一个处理购物车和订单
所有的子应用都共享一个ActionServlet实例,但是每个子应用都有单独的配置文件,把应用划分成多个子应用有以下步骤:
a、为每个子应用创建单独的Struts配置文件;
b、在web.xml的ActionServlet的配置代码中添加每个子应用信息。
c、采用<forward>元素或SwitchAction类来实现子应用之间的切换。
例如,把某个应用划分为两个子应用模块,配置文件分别为:struts-config.xml和struts-moduleB.xml
struts-config.xml文件中的<controller>元素的processorClass属性为默认值“org.apache.struts.action.RequestProcessor",struts-moduleB.xml文件中的该元素的processorClass属性为"CustomerRequestProcessor".
接下来,应该在web.xml的ActionServlet的配置代码中添加每个子应用信息,代码如下
<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/moduleB</param-name>
<param-value>/WEB-INF/struts-moduleB.xml</param-value>
</init-param>
</load-on-startup>1</load-on-startup>
</servlet>
第一个<init-param>元素的param-name属性定义了config,表示配置的是默认子应用模块,第二个属性以"config/"开头,表示非默认子应用模块。
有两种办法进行子应用模块之间的切换,一种方法是实用全局或局部的<forward>元素,此时将该元素的contextRelative属性设为true,还有一种办法是使用内置的org.apache.struts.action.SwitchAction类。例如
<global-forwards>
<forward name = "toModuleB"
contextRelative = "true"
path = "/moduleB/index.do"
redirect = "true"
...
</global-forwards>
也可以使用<action>元素中的局部<forward>元素,例如
<action-mappings>
...
<action ..>
<forward name = "success"
contextRelative="true"
path = "/moduleB/index.do"
redirect ="true"/>
</action>
..
</action-mappings>
此外,还可以使用org.apache.struts.actions.SwitchAction类,例如:
<action-mappings>
<action path="/toModule"
type = "org.apache.struts.actions.SwitchAction"/>
</action-mappings>
如果要从默认模块切换到ModuleB,可采用与以下类似的URL:
http://localhost:8080/toModule.do?prefix=moduleB&page=/index.do
如果要从默认的ModuleB切换到默认模块,可采用
http://localhost:8080/toModule.do?prefix=&page=/index.do