浅谈Struts2与Webwork的不同和相同点
本文介绍的两大开发框架,Struts 2和WebWork。希望能够给你带来帮助,一起来看。
Struts 2是Struts的下一代产品。是在 struts 和WebWork的技术基础上进行了合并,全新的Struts 2框架。其全新的Struts 2的体系结构与Struts 1的体系结构的差别巨大。Struts 2以WebWork为核心,采用拦截器的机制来处理用户的请求,这样的设计也使得业务逻辑控制器能够与Servlet API完全脱离开,所以Struts 2可以理解为WebWork的更新产品。
Struts和Webwork同为服务于Web的一种MVC框架,从某种程度上看,Struts2是从WebWork2上升级得到的。甚至Apache的官方文档也讲:WebWork2到Struts2是平滑的过渡。我们甚至也可以说Struts2就是WebWork2.3而已。在很多方面Struts仅仅是改变了WebWork下的名称。Struts2对应的有自己的标签,并且功能强大。Webwork也有自己的标签。
在很多方面,Struts 2仅仅是改变了WebWork下的名称,因此,如果开发者具有WebWork的开发经验,将可以更加迅速地进入Struts 2的开发领域。
下面是Struts 2与WebWork命名上存在改变。
Struts 2和WebWork成员名称的对应表:
除此之外,Struts 2也删除了WebWork中少量特性:
AroundInterceptor:Struts 2不再支持WebWork中的AroundInterceptor。如果应用程序中需要使用AroundInterceptor,则应该自己手动导入WebWork中的AroundInterceptor类。
富文本编辑器标签:Struts 2不再支持WebWork的富文本编辑器,如果应用中需要使用富文本编辑器,则应该使用Dojo的富文本编辑器。
IoC容器支持:Struts 2不再支持内建的IoC容器,而改为全面支持Spring的IoC容器,以Spring的IoC容器作为默认的Object工厂。
希望本文对你有帮助。
【编辑推荐】
- 博客分类:
- struts
2.Struts2不再提供Webwork2内置的IoC容器支持,转而将Spring作为ObjectFactory的缺省实现。所有由Struts2创建的对象都是由ObjectFactory实例化,ObjectFactory可以集成各种IoC容器,例如Spring、Pico、 Plexus等等.
3.在拦截器方面,Struts2不再支持AroundInterceptor,如果要用到AroundInterceptor ,则必须单独引入Webwork2的相关类,或者重写自己的拦截器。
Struts2中绝大多数预建interceptor都从AbstractInterceptor扩展而来,AbstractInterceptor不在支持before、after两个抽象方法,取而代之的是intercept方法被抽象出来,交由子类去实现。 其实大多数interceptor只会去实现before、after中的一个,这样就必须还要在ww中为另一个提供空方法,再由于线程安全问题WW中before和after两个方法之间是无法共享数据,提供两个抽象方法实在意义不大。
AroundInterceptor抽象类在Struts2中已经去除,before和after两个方法无法共用数据,这个类真的没什么用,很多时候都是实现Interceptor接口更为实际。在Strtus2中,实现AbtractInterceptor更为有用,因为可以不用实现init 和destory方法,直接实现intercept方法就可以了。
4.Struts2全面引入了Dojo,大概是对以前Webwork2在客户端实现的不满吧。例如不再支持Webwork2的richtexteditor,而以Dojo的编辑器取代。说实话,Webwork2了的rich text编辑器确实不太好用,有不少bug。还把Webwork2的Datepicker标签换成了Dojo实现的datetimepicker标签。
5.Struts2在Action映射方面的改进值得关注,尤其是借鉴了Spring的方式,提供了对action名称通配符的支持。在Webwork2里,需要在xwork.xml里以如下格式定义action
<action name="Logon" class="com.Logon">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
而在Struts2中,则可以引入通配符,形如:
<action name="*Logon" class="com.Logon">
<result type="redirectAction">Menu</result>
<result name="input">/Logon.jsp</result>
</action>
这样,任何以Logon结尾用作登录验证的Action,例如NewUserLogon,都可调用com.Logon的一个实例。
6.Struts2还引入一个消息存储拦截器MessageStoreInterceptor用于存放、检索各种提示、错误消息等等,在一个session生命期中都是可用的。
7.对于模型层来说,struts2可以使用任何数据访问技术,像jdbc、ejb、hibernate等;对于视图层来说,struts2可以与jsp、jtl、jsf、pdf、xslt、templates、Jakarta Velocity engine等
采用更加松耦合的设计,系统的action和servlet API不在耦合,使单元测试更方便,允许系统从B/S结构向C/S结构转换
webwork支持更多的表现层技术,如velocity,freemarker和xslt等
webwork可以脱离web应用使用,webwork有自己的控制反转(Inversion of Control)容器,通过控制反转,能让测试更简单
从处理流程上来看,webwork与struts1很相似,核心都是控制器组成:
1)核心控制器ServletDispatcher,由框架提供
2)业务逻辑控制器Action,由程序员提供 相对于struts1,webwork优点
1)action无需与Servlet API耦合,更容易测试
2)action无需与webwork耦合,代码重用率高
仅仅实现webwork的action接口,包含了一个execute方法。 3)支持更多的表现层技术,有更好的适应性
参考知识库Java EE知识库