对谈:WebWork vs. Struts

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

透明/编著

本文的内容来自各种渠道,有朋友非正式的讨论与邮件往来,也有网络上的各种资料,还有开发者们口耳相传的实践经验。为了方便读者,我不揣冒昧将它们整理成对话的形式,并借了两个虚构人物(WebWork的爱好者WeberStruts的老用户Steven)之口来比较这两种流行的web框架,希望对读者的选择有所帮助。

Steven:嘿,Weber,你最近忙什么呢?

Weber:哦,我刚做了一个项目,用WebWork做的,感觉挺好。

StevenWebWork吗?我知道它,它有什么好的?

Weber:好处可多了,比Struts强太多了。你用Struts那么久,难道就不觉得有什么不舒服的吗?

Steven:恩……确实有一些。比如说,StrutsActionForm其实不太好用,有点不伦不类的,平白的在actionview之间引入了麻烦。Struts最近的设计也逐渐在淡化ActionForm的作用了。

Weber:是呀。而且Struts的不爽的地方还有接口比较难看。action必须要实现继承,到现在也没有改为接口继承。而且execute方法的接口也全是HttpServlet...,不能脱离servlet container,要测试还得提供mockrequest,真是麻烦。

StevenStruts由于要重用action的实例,因此不得不把所有状态从action里剔除,从而需要每次都传入request/response,这是一个典型的无状态设计,为pool和负载作了准备,理论上讲性能的延展性要更好一些。Struts由于每次都要处理request/response,所以必须提供一些工具方法,于是Action不再是接口,而改成一个class,这个设计在ood里也是常用的手法。如果没有这些接口,又怎么在servletaction之间传递数据呢?

Weber:这就是WebWork的设计精彩之处了。action都是普通的JavaBean,它们只实现自己的业务功能,其他基础设施级的功能——例如怎么与servlet交换数据——都是用拦截器来实现的。正是因为有这个拦截器机制,所以WebWork才这么好用呢。

Steven:不过我看WebWork提供的功能还是比较少,比如它自己就没有数据校验的能力,必须要用别的工具来帮助校验。

Weber:没错,但这种功能都可以用拦截器机制来做,你可以把这些拦截器抽象出来复用。所以WebWork本身不需要包含那么齐全的功能,它只提供了一个灵活的核心,很多功能都可以做成插件插进去。而Struts就比较麻烦了,新加一个功能就会伤筋动骨,所以Struts老是有很多新特性要发布呢。

Steven:是的。最近Struts又放出消息,未来的版本将增加对JSR-168 portlet的支持。

Weber:这个问题在WebWork里根本就不成问题。只要做一个portlet作为引擎,再修改几个配置,所有的WebWork action都可以原封不动地移植到portlet环境,因为它们原本就是最普通的JavaBean,根本就不知道外面的环境究竟是servlet环境还是portlet环境。由于action不依赖具体的运行环境,所以单元测试也很方便,直接把action new出来,把参数设置进去就可以测试了。

Steven:说起测试嘛,抛开先富起来的地区不说,起码中国还有1/3的软件企业处在对TDD懵懂的阶段吧?还有1/3的企业在追捧CMM和一些瀑布模型的开发方法吧?那么对于这些企业,StrutsWebWork在易测上的差异他们是感受不到的。当前的状态下,易测性并不是软件企业技术选型的一个重点目标,那么Struts就有了其生存的土壤。当然这就扯得有点远了。

Weber:你说得很有道理。Struts好在够多的人支持、使用,让人觉得够稳定、保险、有保障。要是做个项目,很多老板一定说,我要的不是新技术,要的是稳定。所以我现在也还常常在用Struts开发项目。

Steven:看来我也应该多了解一下WebWork。如果以后采用TDD的开发方法,可测性的确是很重要的因素,那时也许我就会选择用WebWork了。

Weber:还有一种折中的办法,就是改造Struts,给它加上拦截器机制,然后再用拦截器来实现Dependency Injection,这样可以把Struts变得跟WebWork一样易用,而且又不会损失它原来的功能,实现起来也不算复杂。

Steven:确实不错。这么一来,我的工具箱里又多了一种可选的方案了。

附录:关于StrutsWebWork之间的技术比较,请看下列两个地址:http://udoo.51.net/mt/archives/000044.html
http://wiki.opensymphony.com/display/WW/Comparison+to+Struts

 

WebWork2官方文档完整中文版指南 本文还有配套的精品资源,点击获取 简介:WebWork2是一款支持Java的开源MVC框架,用于构建企业级Web应用。该中文版文档为开发者提供了全面的资源,涵盖核心概念、架构和使用方法。文档详细介绍了WebWork2的多项特点,如动作映射、拦截器机制、类型安全参数绑定、异常处理、国际化/本地化支持、视图层灵活性、注解支持、版本控制、测试工具以及最佳实践和示例代码,从而帮助开... 阅读详情

相关推荐

Struts vs webwork 比较

转载:http://www.blogjava.net/soochow_hhb/ 这是前一篇文章的译文,来自moxie的《WebWork教程-0.90版》欢迎一起探讨WEB Framework。http://www.blogjava.net/soochow_hhb/ 特 征Struts1.1WebWork2Action类在Struts里面,每一个Action类必需要继承一个抽象的类org.apach

zmxj的专栏 2267

Struts vs webwork 中文 zz

这是前一篇文章的译文,来自moxie的《WebWork教程-0.90版》 特 征 Struts1.1 WebWork2 Action类 在Struts里面,每一个Action类必需要继承一个抽象的类org.apache.struts.action.Action。这个在Java编程中会引来一些问题,就是关于多种继承的问题。 WebWorkAction类仅需要实...

SAP => Simplify Anything Possible 179

struts vs webwork

1.使用标签。struts的自定义标签多,学习起来复杂,但同时功能强大。webwork只定义了一个webwork.tld,操作更简单。 2.有效性验证和javascript支持。struts支持客户端JavaScript与服务器端的校验。webwork的客户端校验,欠美观。具说支持javascript但是因为初学,没有试过。 3.strutswebwork都支持velocity.stru...

dogo 157

Webwork Vs Struts杂谈

Webwork2的每个Action都是线程安全的。因为每过来一个request,它就创建一个Action对象。由于现代JDK垃圾收集功能的效率已经不成问题,所以这种创建完一个对象就扔掉的模式也得到了好多人的认可。Rod Johnson甚至以此为例证明J2EE提供的object pool功能是没多大价值的。 Struts 创建的是 Action 的单一实例,并允许多个线程调用它的...

爱我中华之笔耕不缀! 180

Struts1.X vs Webwork2.X

特 征         Struts1.1  

Wing.Zhang专栏 1209

WebWork2(Struts2) vs Spring

现在正在研究Spring,一直关注Spring和WebWork2(Struts2)。J2EE一个不想碰的东西。 1.J2EE的优势在于企业级应用,分布式集群等等。难以理解以及复杂的模式。 2.Spring的优势在于反转控...

cisixi9014的博客 61

struts1 vs struts2

struts1 2001年6月发布strutsstruts1的核心是控制器,由两部分组成:核心控制器和业务逻辑控制器,核心控制器是ActionServlet,由struts1提供;业务逻辑控制是用户自定义的action,由应用开发者提供。 整个应用由客户端请求驱动,客户端向web发送的请求被struts1的核心控制器ActionServlet拦截,ActionServlet根据请求 决定是...

乐在其中/Leo在其中 141

Struts1.x->Webwork 总结(一)

Strtus做为老牌框架不多说了。使用的人真是多。本文章的目的是作为新手的我一篇总结。 主要用个简单的例子来讲解Struts-〉WebworkStruts jar包 vs Webwork jar包 用Struts开发都知道关于下载的Struts目录下都apps目录,这些都是例子,作为新手肯定把blank工程下的lib COPY 到自己工程的lib下。但初次接触到Webwork的目录,你也可能受...

xiayuanfeng的专栏 157

webwork中,action 中变量的取得

 Action文件:import com.opensymphony.xwork.ActionSupport; public class HelloWebWorldAction extends ActionSupport { String hello; public String getHello() { return hello; }public String execute() thro

yangghosts的专栏 266

Struts 2.x简介

前提是:Struts1.x和Struts2.x没有任何的关系,属于两个独立的版本,那么为什么会出现两个独立的版本原因还是在于Struts1.x的设计结构上.在成名的MVC开发框架里面,Struts最早出现的,但是由于最初的设计环境没有考虑到这么复杂,所以来讲到了今天与其他框架整合会出现非常麻烦的问题,而且也存在有性能问题,同时自己本身的设计结构也出现了混乱,例如:如果想要使用验证框架(无用)那么必...

抛弃幻想,准备斗争 467

struts2.0中jsp获取session信息

session值,获取从表单提交的数据信息 action类中代码如下: ActionContext ac=ActionContext.getContext(); Map map=ac.getSession(); map.put("username", username); map.put("password", password); ActionContext ac=ActionContext.g

jnu_dashu的专栏 9900

struts2中ActionContext是什么

form URL: http://apps.hi.baidu.com/share/detail/16057446 ActionContext(Action上下文) ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Respons

说:/~不了的专栏 579

Struts2中ActionContext

ActionContext(Action上下文) ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。对请求(Request)的参数(Param),可以使用拦截器框架自动调用一些get()和set()方法设置到对应

thunder_1985的专栏 482

Struts2-2 Struts2.0概述与环境搭建

Struts2是一个用来开发MVC应用程序的框架,其提供了Web应用程序开发过程中的一些常见问题的解决方案……

Java名企面试吧 584

struts2 ActionContext

ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response)关联在一起。对请求(Request)的参数(Param),可以使用拦截器框架自动调用一些get()和set()方法设置到对应的Action的字段中。但是,仅仅取得...

a3amux18550的博客 92

struts2中ActionContext是什么东东???

form URL: http://apps.hi.baidu.com/share/detail/16057446   ActionContext(Action上下文) ActionContext介绍 通过上面用户注册例子的学习,我们知道Xwork与Web无关性,我们的Action不用去依赖于任何Web容器,不用和那些JavaServlet复杂的请求(Request)、响应(Response

zhuhezan的专栏 1万+
上一篇: Rich Client技术简介
下一篇: JPetStore项目分析——分析一个典型J2EE应用web层的实现
emag_java
博客等级 码龄22年 29粉丝 21原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值