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. thinkphp计划任务使用cronRun

    thinkphp计划任务使用cronRun .先不管是是否是独立分组,必须在你项目名下的Conf文件夹内创建2个文件一个是tages.php 一个是 crons.php. 注意这两个文件名为think ...

  2. 第二十一篇:SOUI中的控件注册机制

    Win32编程中,用户需要一个新控件时,需要向系统注册一个新的控件类型.注册以后,调用::CreateWindow时才能根据标识控件类型的字符串创建出一个新的控件窗口对象. 为了能够从XML描述的字符 ...

  3. 【转】Kylin实践之使用Hive视图

    http://blog.csdn.net/yu616568/article/details/50548967 为什么需要使用视图 Kylin在使用的过程中使用hive作为cube的输入,但是有些情况下 ...

  4. Loadrunner中参数化实战(9)-Unique+Once

    参数化数据30条: 脚本如下,演示登录,投资,退出操作是,打印手机号: 首先验证Vugen中迭代: Unique+Once 设置迭代4次Action 结果如下:

  5. JAVA Day7

    6  方法   1.格式[访问控制符] void返回值类型 方法名(参数列表:数据类型 参数名); 2.类的方法: *用来定义类的某种行为或功能 * 3.方法的返回值 *如果有返回值,方法中必须要使用 ...

  6. 在IOS手机safari浏览器的无痕模式下,localStorage不起作用

    无痕模式是黑色风格,正常模式是白色风格.在无痕模式中,使用localStorage.setItem()会报错,但在window对象下确实有localStorage.setItem方法. if (typ ...

  7. 从Sql server 2008获取表字段属性信息,注释信息

    select   b.[value] from sys.columns a left join sys.extended_properties b on a.object_id=b.major_id  ...

  8. 泛型容器单元(Generics.Collections)[2]: TQueue<T> 队列列表

    TQueue 和 TStack, 一个是队列列表, 一个是堆栈列表; 一个是先进先出, 一个是先进后出. TQueue 主要有三个方法.一个属性:Enqueue(入列).Dequeue(出列).Pee ...

  9. JavaScript求和

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. iSight集成Adams/View:Adams组件

    iSight本身支持特定版本的Adams/View,在Adams中添加isight的插件方法如下: 1.在iSight安装目录下搜索isight.bin文件,将其复制到Adams安装路径下的win32 ...