struts2和springmvc的区别是哪些?

TheDisguiser 2020-08-03 17:25:02 java常见问答 6513

struts2和springmvc一直是MVC的大头,它们之间的区别小伙伴们知道是什么吗?本篇文章小编就为大家讲解下。

区别一

Struts2采用的是Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用Servlet实现。

Filter会在容器启动之后即初始化;然服务停止以后坠毁,晚于Servlet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

区别二

Struts2框架是类级别的拦截,在每次请求时就会创建一个Action,与Spring整合时Struts2的ActionBean注入作用域是原型模式prototype(否则会出现线程并发问题),然后通过setter,getter吧request数据注入到属性。

Struts2中,一个Action对应一个request,response上下文,在接收参数时,可以通过属性接收,这说明属性参数是让多个方法共享的。

Struts2中Action的一个方法可以对应一个url,而其类属性却被所有方法共享,这也就无法用注解或其他方式标识其所属方法了。

而SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法是基本独立的,独享request,response数据。而每个方法同时又何一个url对应,参数的传递是直接注入到方法中的,是方法所独有的。处理结果通过ModeMap返回给框架。

实现Spring整合时,SpringMVC的Controller Bean默认单例模式为Singleton,所以默认对所有的请求,只会创建一个Controller,又因为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

区别三

Struts2是有自己的拦截Interceptor机制的,但SpringMVC使用的是独立的Aop方式,这就导致Struts2的配置文件量还是比SpringMVC大。

区别四

SpringMVC基本实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。而Struts2是类级别的拦截,每次请求对应都要实例一个新的Action,需要加载所有的属性值注入,所以,SpringMVC开发效率和性能高于Struts2。

区别五

spring MVC与Spring是无缝的。从项目的管理和安全上也比Struts2高,虽然Struts2也能通过不同的目录结构和相关配置做到SpringMVC一样的效果,但需要xml配置的地方不少一般还是不如。所以SpringMVC目前可以认为已经100%零配置。

区别六

SpringMVC比较谨慎,一般在servlet上扩展,Struts2更加符合OOP的编程思想。

以上就是今天的所有内容,小伙伴们知道它们的区别了吧,我们还有更多java基础知识,想了解的话就关注我们吧。

推荐阅读:

springmvc注解原理是什么?该怎么配置?

springmvc注解有哪些?使用方法详解

springmvc上传文件方法详解