论坛首页 Java企业应用论坛

《研磨struts2》第四章 Action 之 4.4 Action的配置

浏览 1715 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (14)
作者 正文
   发表时间:2012-04-22  

4.4  Action的配置

4.4.1  <package>的配置

通过上面的示例可以看出,Action需要在struts.xml中配置才可以使用,而且Action应该配置成为<package>元素的子元素,那么<package>元素的功能是什么呢?

       <package>元素可以把逻辑上相关的一组Action、Result、Intercepter等元素封装起来,形成一个独立的模块,package可以继承其他的package,也可以作为父包被其他的package继承,比如前面示例中配置的“<package name="helloworld"  extends="struts-default">”,helloworld这个包就继承了struts-default这个包。

       <package>元素有如下属性:

  • name:包的名称。必须配置
  • extends:要继承的包,后面配置的是被继承的包的名称。可选
  • namespace:包的命名空间。可选
  • abstract:定义包为抽象的,也就是不能包含Action的定义。可选

上面的属性中name和extends在前面已经示例过了,接下来看看另外两个属性的应用。

1:namespace

namespace配置的是包的命名空间,同一个命名空间里面不能有同名的Action,当然不同的命名空间里面是可以有同名的Action的。类似于Java的包的功能,namespace可以有效的防止action重名的冲突,因为配置了namespace后,在访问action的时候就需要添加namespace来作为action的前缀。

如果不配置namespace,表示是默认的namespace,那么访问的时候不需要添加namespace前缀。比如前面HelloWorld的示例,struts.xml的配置如下:

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5.   
  6. <struts>  
  7.     <constant name="struts.devMode" value="true" />  
  8.     <constant name="struts.locale" value="zh_CN"/>  
  9.     <constant name="struts.i18n.encoding" value="gb2312"/>  
  10.   
  11.     <package name="helloworld"  extends="struts-default">  
  12.         <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">  
  13.             <result name="toWelcome">/s2impl/welcome.jsp</result>  
  14.         </action>  
  15. </package>  
  16. </struts>  

观察里面加粗的那句,也就是<package>元素的定义,里面是没有配置namespace的,因此在访问的时候,是直接在webcontext下面写要访问的action的名称的,示例如下:

 

java代码:
  1. <form action="/helloworld/helloworldAction.action" method="post">  
  2.     ……  
  3. </form>  

其中“/helloworld”是webcontext。

如果配置了namespace,那么访问的时候是必须要添加namespace前缀的,配置namespace的时候“/”表示namespace的根。示例如下:

 

java代码:
  1. ……省略了  
  2. <package name="hello" namespace="/javass" extends="struts-default">  
  3.         <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">  
  4.             <result name="toWelcome">/s2impl/welcome.jsp</result>  
  5.         </action>  
  6. </package>  

那么访问的时候就需要加上namespace,示例如下:

 

java代码:
  1. <form action="/helloworld/javass/helloworldAction.action" method="post">  
  2.     ……  
  3. </form>  

2:abstract

abstract用来定义包为抽象的,也就是不能包含Action的定义,但是抽象包可以被其他包继承,因此里面可以定义其他包需要的元素,比如ResultType、Interceptor等等。

比如上面HelloWorld示例中继承的struts-default包,它就是个抽象的包,定义示例如下:

 

java代码:
  1. <package name="struts-default" abstract="true">  
  2.     ……  
  3. </package>  

4.4.2  <action>的配置

虽然Action在Struts2的开发中非常重要,但是其配置非常简单,基本的规则如下:

  • <action>元素是<package>元素的子元素,应该配置在<package>元素里面
  • <action>元素通常需要配置name和class属性,其中name是必须的
  • <action>元素可以包含其他的子元素:比如<param>、<result>、<interceptor-ref>、<exception-mapping >

基本的配置示例前面已经有了,通常也就是配置name和class属性,然后配置<result>子元素,这里就不去赘述,而更多的配置在后面用到再讲。

4.4.3  分模块配置方式

-��l:8� ` o-ascii-font-family:"Times New Roman"; mso-hansi-font-family:"Times New Roman"'>虽然Action在Struts2的开发中非常重要,但是其配置非常简单,基本的规则如下:

 

  • <action>元素是<package>元素的子元素,应该配置在<package>元素里面
  • <action>元素通常需要配置name和class属性,其中name是必须的
  • <action>元素可以包含其他的子元素:比如<param>、<result>、<interceptor-ref>、<exception-mapping >

基本的配置示例前面已经有了,通常也就是配置name和class属性,然后配置<result>子元素,这里就不去赘述,而更多的配置在后面用到再讲。

在多人协作开发的团队中,配置文件如何组织至关重要。如果配置文件过少,会出现多人争用一个文件,造成大家互相等待,影响开发效率。如果配置文件过多,动辄几十上百个配置文件,这也会造成维护的困难,从而影响到开发的效率。

       因此,如何划分配置文件的大小就显得尤为重要。在Struts2的开发中,struts.xml这个配置文件就是大家经常争用的核心配置。

       通常,一个项目会根据业务的不同来划分出不同的模块,一个模块会由几个人协作开发,在模块内大家联系紧密,但是在模块间相互联系就会比较松散。因此,在划分配置文件的时候,一种常见的情况就是按照模块来划分。

(1)现在,简单回顾一下HelloWorld中的struts.xml。

margin-Lo:8� ` argin-left:42.5pt'>Ø         <action>元素通常需要配置name和class属性,其中name是必须的

 

  • <action>元素可以包含其他的子元素:比如<param>、<result>、<interceptor-ref>、<exception-mapping >

基本的配置示例前面已经有了,通常也就是配置name和class属性,然后配置<result>子元素,这里就不去赘述,而更多的配置在后面用到再讲。

 

java代码:
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE struts PUBLIC  
  3.     "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"  
  4.     "http://struts.apache.org/dtds/struts-2.0.dtd">  
  5. <struts>  
  6.     <constant name="struts.devMode" value="true" />  
  7.     <constant name="struts.locale" value="zh_CN"/>  
  8.     <constant name="struts.i18n.encoding" value="gb2312"/>  
  9.   
  10. <package name="helloworld"  extends="struts-default">  
  11.     <action name="helloworldAction" class="cn.javass.hello.struts2impl.action.HelloWorldAction">  
  12.         <result name="toWelcome">/s2impl/welcome.jsp</result>  
  13.     </action>  
  14. </package>  
  15. </struts>  

 

java代码:
  1. 这个配置文件的根元素是<struts>,它下面有三个<constant>常量配置元素和一个<package>元素,而一个<package>元素下有一个<action>元素。现在关心的是action在项目中如何划分,所以抛开<constant>常量配置元素不看。其余的元素之间关系是:  
  2.    一个<struts>元素可以有多个<package>子元素。  
  3.    一个<package>元素可以有多个<action>子元素。  
  4.     按照项目的组织形式来类比,这里的<struts>元素就好比代表项目,而<package>元素就是好比是业务模块,而<action>元素就相当于是某个模块中的组件。  
  5. color: black; background-color: inherit; padding: 0
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics