http://blog.sina.com.cn/s/blog_4a69fa43010005il.html

在web应用方面,Spring有独立的MVC实现,与struts和webwork2相比毫不逊色。

struts缺点是比较重,页面(V)上要有form要用标签,form(M)要继承ActionForm这么个东东,控制类(C)继承Action/DispatchAction。

webwork2比struts要轻,页面没什么说的主要就是标签,model层也不要强制继承什么,控制类还是要实现一些webwork2的接口Action/ModelDriven。

Spring和webwork2轻重相当。页面标签用jstl,model也不用继承什么,控制类继承MultiActionController/SimpleFormController。

struts和webwork2都有自己的标签库,都很强大。不过偶更倾向Spring的选择--JSTL,JSTL是标准的标签库,优点嘛,标准就是优点:)

在页面输入数据绑定上,struts用的是ActionForm的自动绑定,webwork2是modeldriven的getModel()绑定,Spring的是在controller中声明command对象。

这里strus是最重的,页面要用标签,要继承ActionForm,action要对应到form,要有pojo;而webwork2和Spring相对轻一点,webwork2的action要实现ModelDriven接口,Spring要在SimpleFormController的声明中配置一个 command对象(或者在代码中显式调用setCommandClass()),然后再有pojo,两者实现代价应该说差不多。

在实现输入验证上struts在form(M)上做文章要继承ValidateForm,webwork2/Spring都在action上做文章。

其中Spring比较特殊,它是编程式的验证;而struts/webwork2都是配置式的验证,在这一点上更倾向struts/webwork2。

即使出现struts/webwork2常规预定义验证不能处理的情况,也可以自己写一些验证规则,而且事实上也写过,当然很少要自己动手写规则:)。

又想起一点来,struts写规则写的是validate-rules.xml文件,而webwork2写的是java类,前者方便后者习惯,选择哪个框架就对哪个框架下手,没什么说的。

这里有一点应该提出来,要用输入验证,页面上必须用标签绑定输入项,这一点三者是一样的。

在国际化上,三者实现类似。

配置文件方面,Spring、struts、webwork2都差不多,难度相当。

Spring 一般还要多写一个application.xml来维护DP;struts要多写一个validate-forms.xml(好像是这个文件名,老了,忘了:(),所有要验证的页面都可以在这个文件里配置;webwork2则比较麻烦,要对所有要验证的页面,都写一个对应action的action- validation.xml文件。

其实偶一直认为MVC其中的model部分是比较难办的,如果model层完成全部的业务,就会仅为了MVC而忽略业务部分的分层合理化。

Spring、struts、webwork2三者的MVC都很好的实现了V和C两层,model层的实现相对来说就不那么清晰明确,业务是复杂的本身就应该分层实现。

上面把ValueObject一层划为model其实颇为牵强。

Spring是强大完备的,这从仅仅它的MVC部分就能和struts/webwork2相媲美就能看出来。

说明:“轻”或“重”指的是实现代价实现成本的大小。

最新文章

  1. HTML5 localStorage本地存储
  2. Android 通过httppost上传文本文件到服务器。
  3. Web Analytics 2.0 中文翻译 [ 系列索引 ]
  4. Maximo-删除应用程序
  5. 怎么实现CSS限制字数,超出部份显示点点点.
  6. Robotlegs2 学习笔记 -- SwiftSuspenders 2.x (2)
  7. Windows 小技巧: 變更輸入法順序
  8. 使用JUnit测试java代码
  9. PHP+MySQL中对UTF-8,UTF8(utf8),set names gbk 的理解
  10. C语言到C++(1) - 基本变化
  11. linux中grep命令的用法
  12. bzoj千题计划242:bzoj4034: [HAOI2015]树上操作
  13. ip锁死怎么设置ip地址
  14. 一种简单的 rem 单位基准设置
  15. SElinux解决web网站无法访问
  16. 泡泡一分钟:Motion Planning for a Small Aerobatic Fixed-Wing Unmanned Aerial Vehicle
  17. solr defType查询权重排序
  18. Linux之Kill进程的N种方法
  19. Javascript eval()函数 基础回顾
  20. 你的centos/linux下有多个php.ini,不确定是哪个时

热门文章

  1. HDU-4515 小Q系列故事——世界上最遥远的距离
  2. Python能做什么
  3. 曲面Shader
  4. SPI介绍
  5. makefile for VCS from Syn@psys
  6. HW2.20
  7. What does enumerable mean?
  8. html的框架
  9. SQLite 入门教程(二)创建、修改、删除表 (转)
  10. 【Android - 进阶】之自定义视图浅析