利用通配符,减小struts-config.xml的配置

利用通配符,减少struts-config.xml的配置

       在一个用到struts项目中,如果有大量的action,一般都需要每个action都在struts-config.xml中加以配置,这样一来,如果一个项目有上百个Action类,struts-config.xml将会很大。而且也不易维护。

现在我介绍两种我常用的方式,供大家参考。

     

      第一种,在web.xml中注册ActionServlet时,配一个<init-param>节点,<param-name>为config,这里和以往的配置一样,重点在<param-value>这个参数值的配置,默认情况下,一般配的都是/WEB-INF/config/struts-config.xml,其是,这里可以配多个struts配置文件,中间只需用英文逗号分隔开。这样的话,可以将项目中不同的模块的Action配到同一个struts配置文件中,这样做一是方便维护,再者就是使配置文件看起来一目了然。

如下的代码片段:

......

	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>
			org.apache.struts.action.ActionServlet
		</servlet-class>
		<init-param>
			<param-name>application</param-name>
			<param-value>application</param-value>
		</init-param>
		<init-param>
			<param-name>config</param-name>
			<param-value>/WEB-INF/config/struts-config.xml,
						/WEB-INF/config/struts-product-config.xml,
						/WEB-INF/config/struts-user-config.xml,
						/WEB-INF/config/struts-payment-config.xml,
						/WEB-INF/config/struts-admin-config.xml,
						/WEB-INF/config/struts-bill-config.xml</param-value>
		</init-param>
		<init-param>
			<param-name>debug</param-name>
			<param-value>2</param-value>
		</init-param>
		<init-param>
			<param-name>detail</param-name>
			<param-value>2</param-value>
		</init-param>
		<load-on-startup>2</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>

......

 

      第二种,这种方法,我认为最好,但是我发现也是大家用的最少的,也不知是什么原因。这种方式,不需要我个struts配置文件,只有一点需要注意,那就是所有的Action类和Form类的命名要统一。通常情况下,我是将业务功能来命名,比如说,创建类的,CreateProductAction/CreateProductForm;CreateAccountAction/CreateAccountForm等,修改类的,EditProductAction/EditProductForm;EditAccountAction/EditAccountForm等...

在web.xml中,不做任修改,只需配一个struts配置文件。重点是在这个struts配置文件内配置Action.

先看我下面给出的代码片段:

......

<action-mappings>
	<action path="/Create*"
		type="com.cottsoft.app.action.Create{1}Action" 
		name="Create{1}Form" 
		scope="request"
		validate="false"
		parameter="doaction">
		<forward name="success" path="/successCreate{1}.jsp"></forward>
	</action>
		
	<action path="/Edit*"
		type="com.cottsoft.app.action.Edit{1}Action" 
		name="Edit{1}Form" 
		scope="request"
		validate="false"
		parameter="doaction">
		<forward name="success" path="/successEdit{1}.jsp"></forward>
	</action>
</action-mappings>

......

 

以上这种方式只需要配置少量的Action,即可处理同一类型的Action动作。但是这种方式的对Action类名,Form类名,以及相关JSP页面名称的命名方式都要统一。但总的我认为这种方式还算是不错的,我平常也是这么用的。此外,统一的命名其实在一个项目中也是很有好处的,特别是当一个项目上一定规模后,上百个JSP,上面个JAVA类,如果命名不好,找起来会死人的。

1 楼 mercyblitz 2011-04-13  
这个功能是什么时候开始支持的,可能是依赖的版本实现问题,不是大家不用哈!

我觉得贵公司系统设计有问题,需要那么多页面吗?
2 楼 simonhoo 2011-04-14  
mercyblitz 写道
这个功能是什么时候开始支持的,可能是依赖的版本实现问题,不是大家不用哈!

我觉得贵公司系统设计有问题,需要那么多页面吗?

只是列个例子而已,实际项目有所不同.
3 楼 java_林 2011-04-14  
嗯,我们公司现在用的就是第一种。但感觉第二种更好,简单、统一!