首页 > 其他分享 >Spring MVC 和 Struts 的区别是什么?

Spring MVC 和 Struts 的区别是什么?

时间:2022-11-30 19:00:22浏览次数:62  
标签:SpringMVC Spring Struts Struts2 MVC Action 拦截 方法

1. 拦截机制的不同

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 大。

2. 底层框架的不同

Struts2 采用 Filter(StrutsPrepareAndExecuteFilter)实现,SpringMVC(DispatcherServlet)则采用 Servlet 实现。Filter 在容器启动之后即初始化;服务停止以后坠毁,晚于 Servlet。Servlet 在是在调用时初始化,先于 Filter 调用,服务停止后销毁。

3. 性能方面

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

4. 配置方面

Spring MVC 和 Spring 是无缝的。从这个项目的管理和安全上也比 Struts2 高。

标签:SpringMVC,Spring,Struts,Struts2,MVC,Action,拦截,方法
From: https://www.cnblogs.com/qian-fen/p/16939424.html

相关文章

  • 使用向导spring initializer快速创建springboot应用
    1、 选择项目包含的依赖场景,向导会联网创建springboot项目将需要的东西删掉打开pom.xml后可以看到文件内容已自动写入将java目录变为sourcesroot,resources变......
  • springboot配置之外部配置加载顺序
    SpringBoot也可以从以下位置加载配置:1、命令行配置,多个配置用空格分开,--配置项=值java-jarspringboot-02-config-0.0.1-SNAPSHOT.jar--server.port=80872、来自java:comp......
  • springboot配置之配置文件加载位置
    1、springboot启动会扫描以下位置的application.properties或者application.yml文件作为springboot的配置文件,按照优先级从高到低的顺序。所有位置的文件都会被加载,高优先级......
  • 【Spring Boot】--server.context-path不生效
    server.context-path不生效的原因:springboot2.0之后,上下文的配置改为了server.servlet.context-path更改过后重新部署结果正确 ......
  • springboot配置之@Conditional和自动配置报告
    1、@Conditional派生注解必须@Conditional指定的条件成立,才给容器中添加组件,配置类里面的所有内容才生效@Conditional扩展注解作用(是否满足当前的指定条件)@ConditionalOnJav......
  • springboot日志之日志框架分类和选择
    导入:小张写日志写了一个统一的接口层:日志门面(日志的一个抽象层):logging-abstract.jar给项目中导入具体的日志实现就可以了。以前写的zhanglogging.jar,zhanglogging-good.jar......
  • springboot日志之slf4j使用原理
    1、如何在系统中使用slf4j?给系统里面导入slf4j的jar和logback的实现jar。日志方法的调用,不应该直接调用日志的实现类,而是调用日志抽象层里面的方法。importorg.slf4j.Logge......
  • springboot日志之其他日志框架统一转换为slf4j
    a(slf4j+logback):Spring(commons-logging)、Hibernate(jboss-logging)、Mybatis。。。怎么统一日志记录?即使是别的框架也一起统一使用slf4j进行输出。如何让系统中所有的日志都统......
  • springboot日志之切换日志框架
    1、可以按照slf4j的日志适配图进行相关的配置slf4j+log4j:打开依赖树,exclude掉不用的依赖导入适配包resources下添加log4j.properties2、切换为log4j2注释掉excludestarter-......
  • springboot之web开发之webjars&静态资源映射规则
    一、使用springboot1、创建springboot应用,选中我们需要的模块2、springboot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可以运行起来3、自己编写业务代码......