在一个用到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类,如果命名不好,找起来会死人的。