对谈:WebWork vs. Struts

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

透明/编著

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

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

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

Steven:WebWork吗?我知道它,它有什么好的?

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

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

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

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

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和一些瀑布模型的开发方法吧?那么对于这些企业,Struts和WebWork在易测上的差异他们是感受不到的。当前的状态下,易测性并不是软件企业技术选型的一个重点目标,那么Struts就有了其生存的土壤。当然这就扯得有点远了。

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

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

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

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

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

 

5分钟搞定单细胞marker基因气泡图:scDotPlot保姆级教程(含Seurat适配) 本文提供了一份详细的scDotPlot R包使用教程,帮助用户在5分钟内完成单细胞marker基因气泡图的绘制。教程涵盖环境准备、Seurat和SingleCellExperiment对象的适配处理、进阶可视化技巧及自动化报告生成,特别适合生物信息学新手和临床研究者快速掌握这一高效的可视化工具。 阅读详情

相关推荐

FIFO Generate IP核使用——FIFO写操作详解及Status Flags页配置

本文介绍了FIFO的写操作及Status Flags页的配置信息。

u011565038的博客 2284

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的专栏 2269

(四) OpenClaw-Skill技能全面了解和自定义技能

OpenClaw Skills是提升AI代理功能性的关键模块。本文系统介绍了Skills的核心概念、获取渠道和创建方法。Skills作为标准化指令集合,能让OpenClaw从单纯理解升级为实际执行任务,相比传统System Prompt具有模块化、可复用等优势。用户可通过Clawhub官方商店、GitHub社区等渠道获取5700+现成技能,或按需开发自定义Skill。文章详细演示了创建"Hello World"示例技能的完整流程,包括编写Python脚本、配置SKILL.md文件、部署。

直到世界的尽头 8295

struts vs webwork

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

dogo 158

10年上位机开发踩过的20个坑:C#通信/线程/UI适配避坑指南

通信层:所有通信操作异步化、异常全覆盖,加断线重连+心跳检测,多设备隔离资源;线程层:UI更新必做跨线程判断,共享数据加锁,线程池限流,异常不静默;UI层:适配高分屏/DPI,用布局容器替代固定坐标,多屏场景绑定主屏幕。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 904

科研——BIBM论文修改和提交

BIBM的相关操作流程汇总

Blackoutdragon的博客 6689

Struts vs webwork 中文 zz

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

SAP => Simplify Anything Possible 180

魔改短线利器DPO指标,频繁交易也能盈利超30倍?手机同花顺可用!

昨天我们提示了一些高位风险板块,今天来看基本上都在跌幅前列。这一波由AIGC驱动的大行情,短期来看可能已经到了尾声。中期大家可以关注30日线和60日线是否有支撑,这种现象级的生产力变革主导的行情不可能直接就凉了——哪怕相关的企业距离从中获利还很遥远。在A股,当前是否盈利并不是当前股价的主要矛盾。保守的同学不妨关注下昨天的机会列表,里边全是一些超跌的板块,短期可能会延续弱势,但是一旦站上20日线,可能就会有一波超跌反弹的行情。AIGC中的资金外流,大概率会有一些低位板块得到临幸。

量化祛魅师 老Q。 1万+

Webwork Vs Struts杂谈

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

爱我中华之笔耕不缀! 183

YOLOv12改进专栏目录 | 本专栏持续更新500+篇内容 | 包含各种卷积、主干网络、各种注意力机制、检测头、损失函数、小目标检测改进、二次创新模块、独家创新等几百种创新点改进

《YOLOv12高效涨点改进专栏》提供500+创新改进方案,涵盖卷积、主干网络、注意力机制等模块优化,适用于检测、分割等任务。改进点来自顶会论文和个人经验,支持多种模型版本和任务场景。专栏包含详细教程、数据集增强、性能评估工具等,帮助科研人员快速实现模型优化和论文发表。提供完整运行项目和环境配置指导,适合计算机及相关专业研究人员使用,持续更新保障长期科研需求。

Ai缝合怪、助力小伙伴高效发论文 2303

通过轻量级图像增强Transformer (IAT) 提升YOLOv8在低光环境下的检测性能

随着深度学习和计算机视觉的快速发展,目标检测模型在各个领域中的应用不断扩展,特别是在低照度环境下的视觉任务。YOLOv8作为当前最先进的目标检测模型之一,在高亮度和良好照明条件下表现出色,但在低照度环境下的性能存在一定的不足。为了解决这一问题,我们提出了一种轻量级的低照度图像增强网络(IAT)来改进YOLOv8的暗光检测能力。本篇文章将深入探讨这一创新改进,并附带代码实现,帮助大家更好地理解这一技术的应用和效果。

博客 1214

Struts1.X vs Webwork2.X

特 征         Struts1.1  

Wing.Zhang专栏 1210

快速傅里叶变换(FFT)的汇编实现在DSP开发中

在数字信号处理(Digital Signal Processing,DSP)开发中,使用汇编语言实现FFT可以进一步提高计算性能和优化系统资源的使用。FFT是一种分治算法,它通过将一个长度为N的离散时间域序列分解为多个长度为N/2的子序列,然后递归地进行计算。开发者可以根据实际需求,结合具体的硬件平台和编译器工具链,对FFT的汇编实现进行优化和定制化。需要注意的是,上述示例代码中只给出了FFT的基本框架,具体的合并操作及其他细节需要根据实际需求进行实现。上述示例代码演示了一个简单的FFT汇编实现。

QoTypescript的博客 683

WebWork2(Struts2) vs Spring

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

cisixi9014的博客 62

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

struts1 vs struts2

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

乐在其中/Leo在其中 143

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

从Struts1.x->Webwork 总结(一)

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

xiayuanfeng的专栏 159

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

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的专栏 267

Struts 2.x简介

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

抛弃幻想,准备斗争 471

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的专栏 9901

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的专栏 486

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

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

Java名企面试吧 585

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、付费专栏及课程。

余额充值