SpringMVC 和 Struts2 的区别

5 篇文章 0 订阅
2 篇文章 0 订阅

一、拦截机制的不同

  • Struts2
  1. Struts2是类级别的拦截,每次请求就会创建一个Action,然后通过setter,getter把request数据注入到属性。

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

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

  4. Struts2有自己的拦截Interceptor机制

  • SpringMVC
  1. SpringMVC是方法级别的拦截,一个方法对应一个Request上下文,所以方法直接基本上是独立的,独享request,response数据。而每个方法同时又和一个url对应,请求参数直接传递到方法的形参,可以设计为单例或多例(建议单例)。

  2. 处理结果通过ModeMap返回给框架。在Spring整合时,SpringMVC的Controller
    Bean默认单例模式Singleton,所以默认对所有的请求,只会创建一个Controller,有应为没有共享的属性,所以是线程安全的,如果要改变默认的作用域,需要添加@Scope注解修改。

  3. SpringMVC这是用的是独立的Aop方式拦截

二、底层框架的不同

  • Struts2采用Filter(StrutsPrepareAndExecuteFilter)(filter过滤器)实现,Filter在容器启动之后即初始化;服务停止以后坠毁,晚于Servlet。

  • SpringMVC(DispatcherServlet)(前端控制器)则采用Servlet实现,本质上是一个Serlvet。Servlet在是在调用时初始化,先于Filter调用,服务停止后销毁。

三、性能方面

  • Struts2是类级别的拦截,每次请求对应实例一个新的Action,需要加载所有的属性值注入

  • SpringMVC实现了零配置,由于SpringMVC基于方法的拦截,有加载一次单例模式bean注入。所以,SpringMVC开发效率和性能高于Struts2。

PS:拦截器与过滤器的区别 :

拦截器是基于java的反射机制的,而过滤器是基于函数回调。

拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值