论坛首页 Java企业应用论坛

WebWork2多模块解决方法

浏览 17933 次
该帖已经被评为精华帖
作者 正文
   发表时间:2004-07-29  
WebWork2多模块解决方法:
    先简单的说一说大家的Struts1.1如何解决多模块的:
    它有两种方法:
    1.多个配置文件的支持
    2.模块的支持
    多个配置文件的支持,是指你能够为ActionServlet同时指定多个xml配置文件,文件之间以逗号分隔.ActionServlet初始化的时候
    会将这些配置文件合并到一起.但这时的苦恼:最终是合并成同一个文件,如果大家配置了一个同样的<forward>,比如全局的success,error
    ,等.那么执行起来就会产生冲突.
    为了彻底解决这种冲突,Struts 1.1中引进了模块(Module).每个模块里的配置是互相独立的,这样就不会产生任何的冲突.
   
    可是,有了模块就真正的彻底解决多模块的问题吗?如果我想有一些<forward>配置是跨越所有模块的,你难到要在每个模块里
    都要定义一遍吗?
   
    WebWork2真正彻底解决了这些问题.它是用package和namespace来实现真正的多模块.
   
    package:它很类似我们Java程序的包(package),我们可以把每个模块定义成一个package,这一点与Struts的模块有些相似,但package的功能更强大,它可以继承在它上面的package,获得父package的global results、interceptor、interceptor-stack、action等所有配置.我们可以把每个package写成一个独立的配置文件,例如:module1-xwork.xml(文件的名称没有任何限制),在xwork.xml中只要通过
    <include file="module1-xwork.xml"/>引用即可.
    但要注意:WebWork的配置文件xwork.xml是安装文件内容顺序(从上到下)读取的,如果你的package继承了一个父package,那么这个父package必需在它之前定义.
   
    namespace:它是package的命名空间,它用来分隔不同package定义的action,让这些action处于不同的命名空间(namespaces)。
    这样,我们不同的package可以有相同的action命名,因为可以通过命名空间来区分。如果不指定namespace,默认的是空字符串。
    命名空间也可以被用在安全控制方面,它可以根据不同的命名空间指定不同的访问权限。
   
    以例子说明,下面是WebWork教程源码的xwork.xml片断:
    <package name="register" extends="webwork-default" namespace="/register">
		<action name="register" class="example.register.RegisterAction" >
			<result name="success" type="dispatcher">
				<param name="location">/register-result.jsp</param>
			</result>
			<interceptor-ref name="params"/>
		</action>
		
		<action name="registerModel" class="example.register.RegisterActionModel">
			<result name="success" type="dispatcher">
				<param name="location">/register-result-model.jsp</param>
			</result>
			<interceptor-ref name="model-driven"/>
			<interceptor-ref name="params"/>
		</action>
		
		<action name="registerSupport" class="example.register.RegisterActionSupport" >
			<result name="success" type="dispatcher">
				<param name="location">/register-result.jsp</param>
			</result>
			<result name="input" type="dispatcher">
				<param name="location">/registerSupport.jsp</param>
			</result>
			<interceptor-ref name="validationWorkflowStack"/>
		</action>
		
    </package>

    这时候我们执行example.register.RegisterAction就可以通过/register/register.action来
    其中:"register"就是我们的命名空间(namespace),不同命名空间中的Action可以有相同的命名,它不会有任何冲突.
   发表时间:2004-07-30  
我个人觉得,WW的配置文件,从本质上讲,并没有和Struts有什么区别,可能package和namespace的确带来了些清新的感觉,但页面与页面、action与action、action与页面之间复杂的导航关系并没有改变。当action与页面的数量和关系越来越多时,写这个配置文件(无论WW或Struts)或读这个配置文件都像是一场噩梦。要使中途接手来改这个文件更无疑是跳入了一个巨大的焦油坑。

不知道又没有什么好的概念或逻辑能够解决这个问题。
1 请登录后投票
   发表时间:2004-08-01  
我并不认为WebWork的配置文件是一场噩梦.想反,中途接手者可以从这个清晰的全局的配置文件获取整个Action与页面之间互相交互的流程.我们用MVC,将业务模型和视图完全分离,我们目的是将他们之间完全解耦合.但在应用中又需将它们组装到一起,这时我们的Action和页面的配置文件就是实现此功能.
所以,我认为全局配置文件(Action和页面的组装)是不可避免的!
1 请登录后投票
   发表时间:2004-08-07  
我觉得还是WW的配置文件清爽一点,因为我通过继承通过简单的include就可以实现分模块,而且继承也简单的实现了配置文件共享的好处。

Struts的分模块配置总感觉是在以前不支持分模块的基础上修补出来的功能,而且必须和页面访问地址有关,访问分模块下的action将变成访问不同的目录下的内容。那个SwitchAction感觉也很不自然。

还有WW可以配置xwork.xml每个request重新装载,这个也是一个很方便的地方。当然这个和分模块没关系,只是初用WW的感觉。
1 请登录后投票
   发表时间:2004-08-08  
Webwork2.1更完善,功能更强大
1 请登录后投票
论坛首页 Java企业应用版

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