1。Spring MVC的controller+command object模式比Struts2的Action模式更安全一些。而在Struts2中,自动数据绑定发生在Action对象上。这样,在Action类中任何有Set方法的属性都有可能被http request的参数覆盖,在设计Action类时如果不小心,就可能会产生安全隐患。比如某个身份认证方案可能会依赖于Action的某个属性,如role来判断用户是否具有访问该action的权限。这样,恶意用户可以通过在request参数中包含一个role参数来改写action本身对role属性的设置。
在Spring MVC中,controller和command object是两个独立的类,自动数据绑定只发生在command object上,对controller没有影响,就不存在这个问题。
2。Struts 2的action类本身是线程不安全的,不能使用singleton模式来创建。在我看来,这个是比较ugly的。特别是一些处理逻辑比较复杂的action,每次创建一个新对象实例的代价可能是比较高的。而Spring MVC的command object基本上都是POJO,创建实例的代价很低。
3。Struts 2的jsp tags使用OGNL作为表达式语言。我个人觉得这个语言功能过强,特别是能够直接访问action本身的方法,这类功能很容易被滥用,从而重蹈过去jsp<% %>标记的覆辙。
当然,Struts 2也有很多功能是值得Spring吸取的,比如redirect-action,对namespace的支持等等。特别是Struts 2的底层框架XWork的最新版本2.0beta3已经支持基于annotation的validation,这个Spring应该尽快跟进。
不过我还是觉得Spring MVC更好些。

下面列出我对这两个都很优秀的框架的评估,请各位帮忙评判一下:

------------------------SpringMVC-----Struts2.0(webwork2)--------------获胜者
开发效率----------------5-------------?---------------------------------?

运行效率----------------5-------------4(action非单例)------------------SpringMVC

学习成本----------------4-------------3(同事反应学习曲线比较陡)--------SpringMVC

与Spring集成------------5(无缝集成) 4----------------------------------SpringMVC
难易程度

validator集成-----------4(commons)--5----------------------------------Struts2.0

AJAX集成----------------4-------------5(丰富的tag支持)-----------------Struts2.0

可测试性----------------5-------------5----------------------------------平局

从实际开发效果来看,在4个项目用了spring2.5 mvc,2个项目用struts2,发现招聘时,都是struts1,struts2的求职者,而spring mvc全得现培训,不过学习曲线实在是低,把架构搭好之后,绝大部分的人都能很快适应,并快速开发。而struts2的开发,以前2个项目,都是刚好别人 搭的架构,实际做功能测试和性能测试时,问题成堆。struts2的数据绑定简直就是灾难,新手经常性的把参数给弄 乱。

Spring MVC和Struts2的比较(二)的更多相关文章

  1. Spring MVC和Struts2的比较的优点

    Spring MVC和Struts2的区别: 机制:spring mvc的入口是servlet,而struts2是filter(这里要指出,filter和servlet是不同的.以前认为filter是 ...

  2. Spring MVC 和Struts2对比

    Spring MVC和Struts2的区别: 1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. ​2. 性能:spring会稍微比s ...

  3. Spring MVC和Struts2的比较

    Spring MVC PK Struts2 我们用struts2时采用的传统的配置文件的方式,并没有使用传说中的0配置.spring3 mvc可以认为已经100%零配置了(除了配置spring mvc ...

  4. Spring MVC和Struts2的比较[转]

    虽然说没有系统的学习过Spring MVC框架, 但是工作这么长时间, 基本上在WEB层使用的都是Spring MVC, 自己觉得Struts2也是一个不错的WEB层框架, 这两种框架至今自己还未有比 ...

  5. Spring、Spring MVC、Struts2优缺点整理

    Spring 及其优点 大部分项目都少不了Spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢 Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量 ...

  6. Spring、Spring MVC、Struts2、、优缺点整理(转)

    Spring 及其优点 大部分项目都少不了spring的身影,为什么大家对他如此青睐,而且对他的追捧丝毫没有减退之势呢 Spring是什么: Spring是一个轻量级的DI和AOP容器框架. 说它轻量 ...

  7. Spring MVC与Struts2的区别

    1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...

  8. Spring MVC和Struts2的区别

    1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...

  9. Spring MVC 使用介绍(十二)控制器返回结果统一处理

    一.概述 在为前端提供http接口时,通常返回的数据需要统一的json格式,如包含错误码和错误信息等字段. 该功能的实现有四种可能的方式: AOP 利用环绕通知,对包含@RequestMapping注 ...

随机推荐

  1. hdu 4277 2012长春赛区网络赛 dfs+hashmap ***

    hashmap判重大法好 #include<cstdio> #include<iostream> #include<algorithm> #include<c ...

  2. 单链表带头结点&不带头结点

    转自:http://blog.csdn.net/xlf13872135090/article/details/8857632 Node *head;  //声明头结点   带头结点初始化 void I ...

  3. loj 1030概率dp

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1030 思路:一直以来对这种概率题都挺感冒的=.=......还是说一下思路吧,dp[i ...

  4. X64下MmIsAddressValid的逆向及内存寻址解析

    标 题: [原创]X64下MmIsAddressValid的逆向及内存寻址解析 作 者: 普通朋友 时 间: 2015-10-21,20:03:52 链 接: http://bbs.pediy.com ...

  5. 【项目经验】--EasyUI DataGrid之右键菜单

    前两天验收项目,老总提了一个不是需求的需求,为什么这么说呢?因为我们的管理不到位!话说当天,我们UI系统下发了一个总文件,上面写着"各个系统找一个没有添加UI的模块去添加最新版本UI进行测试 ...

  6. 动态平衡二叉搜索树的简易实现,Treap 树

    http://blog.csdn.net/qichi_bj/article/details/8232048

  7. input按钮上传按钮样式

    主要是定位和不透明度来实现: <!DOCTYPE html> <html lang="en"> <head> <meta charset= ...

  8. SQL作业的操作全

    --定义创建作业 转自http://hi.baidu.com/procedure/blog/item/7f959fb10d76f95d092302dd.html DECLARE @jobid uniq ...

  9. 【HTML+CSS】七小时快速入门~~~~~~~

    由于网络化的原因,学习很方便,但是也由于太方便了,学习资料很多会给刚想要入门却没有什么自制力的初学者造成困难,我自己来说学html和css先看了一本书,后来又辗转在慕课网.w3cschool等学习网站 ...

  10. 后缀数组 UVA 11107 Life Forms

    题目链接 题意:训练指南P223 分析:二分长度,把所有字符串连成一个字符串,中间用不同的字符分隔(这是为了保证匹配长度始终在一个字符串内).height数组分段,vis数组标记哪些字符串被访问了,如 ...