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基础知识,想了解的话就关注我们吧。
推荐阅读: