继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

SpringMVC与Struts2的区别

Oraclea
关注TA
已关注
手记 88
粉丝 37
获赞 353

一、拦截机制的不同
1、SpringMVC是基于类中的方法开发的,是方法级别的拦截。注解开发中使用@RequestMapping将 url 和方法进行映射,如果根据 url 找到controller类的方法生成一个handler处理器对象(只包括一个method)。一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request、response数据。每个方法同时又对应一个url。参数的传递是直接注入到controller方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller Bean默认单例模式Singleton,所以默认对所有的请求只会创建一个Controller,又因为没有共享的属性,所以是线程安全的。如果要改变默认的作用域,需要添加@Scope注解修改。也因此架构本身上SpringMVC就容易实现 restful url。
Struts2是基于类开发的,是类级别的拦截,每次请求就会创建一个Action,和Spring整合时Struts2的ActionBean注入作用域是原型模式prototype,然后通过setter、getter把request数据注入到属性。Struts2中,一个Action对应一个request、response上下文。在传递参数时可以通过类的属性传递(属性驱动和模型驱动),这说明属性参数是让多个方法共享的。Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了,只能设计为多例prototype。也因此Struts2的架构实现起来要费劲。

2、SpringMVC的方法之间基本上独立的,独享 request 和 response 数据,请求数据通过参数获取,处理结果通过ModelMap交回给框架,方法之间不共享变量。而Struts2搞的就比较乱,虽然方法之间也是独立的,但其所有Action变量是共享的,这虽然不会影响程序运行,却给我们编码、读程序带来麻烦,每次来了请求就创建一个Action,一个Action对象对应一个request上下文。

3、Struts2需要针对每个request进行封装,把request,session等servlet生命周期的变量封装成一个一个Map,供给每个Action使用,并保证线程安全。所以在原则上,是比较耗费内存的。

4、拦截器实现机制上:SpringMVC用的是独立的AOP方式;Struts2有自己的interceptor机制,这样导致Struts2的配置文件量还是比SpringMVC大。

二、底层框架的不同
5、SpringMVC的核心是基于一个Servlet,即DispatcherServlet(前端控制器),入口是servlet。
而Struts2 的核心是基于一个Filter,即StrutsPreparedAndExcuteFilter。
Filter在容器启动之后即初始化,服务停止以后销毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。Filter和Servlet是不同的,这就导致了二者的机制不同,这里就牵涉到Filter和Servlet的区别了。

6、SpringMVC集成了Ajax,使用非常方便,只需一个注解@ResponseBody就可以实现,然后直接返回响应文本即可。而Struts2拦截器集成了Ajax,在Action中处理时一般必须安装插件或者自己写代码集成进去,使用起来也相对不方便。

7、SpringMVC验证支持JSR303,处理起来相对更加灵活方便。而Struts2验证比较繁琐,感觉太烦乱。

三、配置方面
8、SpringMVC和Spring是无缝的。从项目管理和安全角度看也优于Struts2。当然Struts2也可以通过不同的目录结构和相关配置做到和SpringMVC一样的效果,但是需要xml配置的地方不少。

9、设计思想上,Struts2更加符合OOP的编程思想。SpringMVC就比较谨慎,在servlet上扩展。

四、性能方面
10、Struts2 由于是类级别的拦截,每次请求就得实例一个新的Action,需要加载所有的属性值注入,而SpringMVC 实现了零配置,由于SpringMVC 基于方法的拦截,又加载一次单例模式bean注入。所以,SpringMVC开发效率和性能优于Struts2。加之Struts2的漏洞较多,更多企业使用SpringMVC。

11、SpringMVC采用request来解析请求内容,然后由其内部的getParameter给方法中形参赋值,再把后台处理过的数据通过ModelAndView对象存储,Model存储数据,View存储返回的页面,再把对象通过request传输到页面去。
Struts2采用的是值栈存储请求以及响应数据,OGNL存取数据。

打开App,阅读手记
3人推荐
发表评论
随时随地看视频慕课网APP