[转自http://minifishpingping.spaces.live.com/blog/cns!167be6972d4b3ac!159.entry]
配置Struts应用使用多个struts-config.xml文件
参照struts的例子strutsexample在自己的web应用中实现了使用多个struts-config.xml文件,赶紧总结一下,小鱼记性不好,怕忘。
小鱼得意尽须欢呀。:)不过,可能早就N多人会用了。

1、首先介绍一下在web应用中使用单个struts-config.xml文件:
我的web应用名字为MyWebProj
MyWebProj/WEB-INF/下有文件:
struts-config.xml
struts-bean.tld
struts-html.tld
struts-logic.tld
struts-nested.tld
struts-template.tld
struts-tiles.tld
ainx-slot.tld 这是我的自定义标签文件
2、下面介绍使用多个struts-config.xml文件的配置方法:
在一个team中开发struts的web应用时,可能每个人做的模块不同,但都有相同的web根路径,这时候针对个不同的模块配置struts-config.xml文件和各自模块定义的tld文件是十分有用的。
1)、在MyWebProj/WEB-INF/目录下新建目录,命名为submodule,即子模块的名字
新建目录tld,可以专门存放该模块自定义的tld文件
在submodule目录下新建struts-config.xml文件
将ainx-slot.tld文件拷至tld目录下
其余的tld文件都是struts标准的tld文件,可以保留不动,因为各个模块都会用到标准的tld文件。
2)、修改MyWebProj应用的web.xml文件,这里要完成两个工作:第一,配置多个struts-config.xml文件,第二,配置各个模块自己的tld文件
首先,配置多个struts-config.xml文件:
在web.xml文件中找到如下代码:
<init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
<param-name>config</param-name>
<param-value>/WEB-INF/struts-config.xml</param-value>
</init-param>
这里的struts-config.xml即MyWebProj/WEB-INF/下的struts-config.xml文件,各个模块公用
紧接着这段代码下面继续输入如下代码:
<init-param>
<param-name>config/submodule</param-name>
<param-value>/WEB-INF/submodule/struts-config.xml</param-value>
</init-param>
<param-name>config/submodule</param-name>
<param-value>/WEB-INF/submodule/struts-config.xml</param-value>
</init-param>
这里的struts-config.xml即submodule模块自己用的
该struts-config.xml文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<!-- ========== Form Bean Definitions =================================== -->
<form-beans>
<form-bean name="modulePropertyForm" type="com.asiainfo.ainx.advancedres.action.ModulePropertyForm" />
</form-beans>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.0//EN" "http://jakarta.apache.org/struts/dtds/struts-config_1_0.dtd">
<struts-config>
<!-- ========== Form Bean Definitions =================================== -->
<form-beans>
<form-bean name="modulePropertyForm" type="com.asiainfo.ainx.advancedres.action.ModulePropertyForm" />
</form-beans>
<!-- ========== Action Mapping Definitions ============================== -->
<action-mappings>
<action-mappings>
<action type="com.asiainfo.ainx.advancedres.action.LeftTreeAction" scope="request" path="/leftTree">
<forward name="showTree" path="/jsps/LeftTree.jsp" />
</action>
<forward name="showTree" path="/jsps/LeftTree.jsp" />
</action>
<action type="com.asiainfo.ainx.advancedres.action.QueryNodesAction" scope="request" path="/queryResnodes">
<forward name="showResnode" path="/jsps/ResnodesQuery.jsp" />
</action>
<forward name="showResnode" path="/jsps/ResnodesQuery.jsp" />
</action>
<action name="modulePropertyForm" type="com.asiainfo.ainx.advancedres.action.ModulePropertyAction" scope="request" path="/showProperty">
<forward name="showPropertys" path="/jsps/ModuleProperty.jsp" />
</action>
<forward name="showPropertys" path="/jsps/ModuleProperty.jsp" />
</action>
</action-mappings>
</struts-config>
其次,配置各个模块自己的tld文件:
在web.xml文件中找到如下代码:
<servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
<servlet-name>action</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
紧跟这段代码输入如下代码:
<taglib>
<taglib-uri>/tags/ainx-slot</taglib-uri>
<taglib-location>/WEB-INF/tld/ainx-slot.tld</taglib-location>
</taglib>
<taglib-uri>/tags/ainx-slot</taglib-uri>
<taglib-location>/WEB-INF/tld/ainx-slot.tld</taglib-location>
</taglib>
这里ainx-slot.tld即刚才从WEB-INF目录下拷至WEB-INF/tld目录下的文件。
最后,转到web.xml文件的最开头部分,
将"<web-app>"前面的代码用下面的替换:
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" " http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
我也不知道为啥要用这个,反正是用eclipse原来自动生成的代码时,在我添加了<taglib>……</taglib>后,总是报一个error,说是包含了不认识的标签。我就照strutsexample的web.xml文件改成这样,就OK了。我是不是有点不求甚解?惭愧ing
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" " http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
我也不知道为啥要用这个,反正是用eclipse原来自动生成的代码时,在我添加了<taglib>……</taglib>后,总是报一个error,说是包含了不认识的标签。我就照strutsexample的web.xml文件改成这样,就OK了。我是不是有点不求甚解?惭愧ing
OK,web.xml文件配置完成:)
3)、在MyWebProj目录下新建submodule目录,即子模块,这个目录下存放该模块自己的jsp、js、css、img等文件及目录。
我的结构是这样的:
MyWebProj/submodule/jsps/*.jsp
MyWebProj/submodule/js/*.js
MyWebProj/submodule/css/*.css
MyWebProj/submodule/img/*.jpg,*.gif,*.bmp……
…
3)、修改MyWebProj/submodule目录下的jsp页面
原来页面中是这样引用tld文件的:
<%@ taglib uri="/WEB-INF/ainx-slot.tld" prefix="dtree" %> 以前是直接按照路径引用的
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="dtree" %>
……
现在改成这样:
<%@ taglib uri="/tags/ainx-slot" prefix="dtree" %> 现在web.xml文件中已经做了配置,见前面的web.xml文件中蓝色部分代码
<%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="dtree" %> 其余各个模块公用的tld文件引用方式不变
……
4)、修改.do调用地方的代码:
原来是这样调用的:…… href = "/NetXpert/leftTree.do"
现在由于web.xml文件中已经配置了另一个struts-config.xml文件(见前面web.xml文件中的红色部分的代码),则做如下修改:
href="/NetXpert/
submodule/leftTree.do" 即调用的时候指定到该子模块下
大功告成,小歇一下了