一、Spring

首先,结合到自己对于Spring的使用,我明确的一点是,Spring严格上来说,并不是一种框架。它相当于一个粘合剂,黏合了别的框架或者组件。所以,spring是一个容器!为什么用Spring,个人感觉,spring就是一个容器的本质,程序开发的模块组件,都可以通过spring这个容器进行组装拼合,spring为我们提供了很多 管理的功能。而且,它是一个轻量级的容器。我们常说EJB是重量级,Spring是轻量级的,那么,究竟什么叫轻量级或重量级呢?

附:轻量级和重量级(往简单了说)

首先;轻量级和重量级,它只是一个相对的概念。如果没有对比,就没有所谓的轻重之分

轻量级:当轻量级的框架启动时,创建和销毁的资源都非常少。简而言之,一个轻量级的框架,它的入侵性非常小,也可以说是耦合性很低。可以很轻易的替换掉它,而不需要做太大的改动,它对别的组件的依赖非常小!

重量级:和轻量级相对,引入一个重量级的框架,意味着需要引入相当多的依赖和其他组件,当需要修改这个框架时,基本上面临着重组的危机!

二、SpringMVC

从Spring的结构图可以看出,springMVC位于spring web端的一个框架,是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦。附:基于请求驱动指的就是使用请求-响应模型。从原理上看,它基本上和.NET的MVC的原理相同!

三、Spring和SpringMVC的联系

从名字上就可以窥探出,Spring>SpringMVC,那么事实上,spring和SpringMVC是一种父子关系。SpringMVC是spring扩展出的一个应用于web端的框架。在这里需要注意的一点,就是到底什么是父子容器关系:

spring主要的作用是黏合其他模块组件,进行统一管理,springmvc则主要是负责web端。那么,我们都知道,我们在应用spring的时候,可以使用注入。这个时候,如果我们的web端是用的SpringMVC,这个时候,controller理论上是通过SpringMVC去注入,但是,使用spring注入,同样是可行的。同理,service等层,使用SpringMVC配置的统一扫描装配也是可以的。所以,如果说只是为了使用spring的依赖注入,是大可不必将springMVC和spring同时使用的。他们完全可以分开!

但是,尽管SpringMVC和spring都可以进行自动装配扫描,值得注意的是:

spring(父容器)并不能直接访问SpringMVC(子容器)所注入的对象,但是SpringMVC却可以访问到spring装载的对象。所以,在配置自动装配的时候,应该注意到这一点。

四、Struts

Struts是对于MVC的一种非常完美的实现,从根本上来说,它其实和SpringMVC一样,都是基于MVC思想的扩展实现。但是,在SpringMVC3之后 ,SpringMVC完超Struts。(注:但是,框架并没有优劣之分,框架本身就是一种权衡,相对而言而已)

Struts和SpringMVC的区别:

首先,如果说项目中使用了spring,那么还是使用SpringMVC吧,因为相对于融合Struts来说,spring和SpringMVC是非常完美的无缝链接。

其次,SpringMVC的拦截粒度是方法,而Struts的粒度是类

然后,入口不同,SpringMVC的入口是servlet,而Struts是filter

最后,如果使用注解的话,SpringMVC基本上是零配置,而Struts需要配置很多。

备注:想说一点的是:在Struts中可以配置开发者模式,就是说当修改了一个URL访问,可以不用重启工程。但是SpringMVC需要重启。

五、总结

我也不知道怎么从专业的角度去区分这几个的区别,但是,就从我自己的使用上来说,我当时接触SpringMVC的时候,入门真心是没有花太多的时间,而Struts真的让我弄了好些个日子,包括那些标签配置,还有配置文件等等。所以说实在的,我现在从心理上,对于这个SpringMVC和Struts,我已经倒向了SpringMVC了!但是,还是那句话,框架本身就是为了找到一个平衡,用哪个合适,就用哪个吧。都有各自的好!

SpringMVC、Spring和Struts的区别相关推荐

  1. 【SSM 1】SpringMVC、Spring和Struts的区别

    导读:近期做到的项目中,用到的框架师SSM(SpringMVC+Spring+Mybatis),那么在这之前用过SSH,这里主要是区分一下SpringMVC和Struts,但是由于SpringMVC和 ...

  2. SSH(Struts,Spring,Hibernate )和SSM(SpringMVC,Spring,MyBatis )的区别,抽丝剥茧的给你讲清楚

    SSH 通常指的是 Struts2 做前端控制器,Spring 管理各层的组件,Hibernate 负责持久化层. SSM 则指的是 SpringMVC 做前端控制器,Spring 管理各层的组件,M ...

  3. Spring Web框架与Struts的区别

    Spring Web框架与Struts的区别 Posted on 2007-12-25 02:23 Asktalk 阅读(1848) 评论(0) 编辑 收藏 所属分类: Jdbc/Hibernate3 ...

  4. Maven搭建springMVC+spring+hibernate环境

    这次不再使用struts2做控制器,采用spring自己的springMVC框架实现. 首先,改写pom.xml文件,不需要struts2的相关jar了. pom.xml <project xm ...

  5. idea springmvc_SSM三大框架使用Maven快速搭建整合(SpringMVC+Spring+Mybatis)

    本文介绍使用SpringMVC+Spring+MyBatis三大框架使用Maven快速搭建一个demo,实现数据从数据库中查询返回到页面进行展示的过程. 技术选型:SpringMVC+Spring+M ...

  6. 5.6 Spring与Struts 2整合应用

    2019独角兽企业重金招聘Python工程师标准>>>  开发一个Spring与Struts 2的整合项目的步骤如下. 1 创建Web项目Struts_Spring 2 添加Str ...

  7. mybatis学习(十一)——springmvc++spring+mybatis整合

    做任何一个项目都以一个需求,这里先定义一下需求:利用三大框架查询酒店列表. 一.搭建开发环境 1.创建一个web项目 我这里用的是 jdk1.8+tomact7.0 2.创建hotel表 CREATE ...

  8. 小结spring和struts整合的三类方式

    小结spring和struts整合的三类方式 整合spring和hibernate的三种方式,小结之. 1) 在struts中使用webapplicationcontext调用spring     声 ...

  9. java mybatis拦截配置_SpringMvc拦截器配置_JavaEE框架(Maven+SpringMvc+Spring+MyBatis)全程实战教程_Java视频-51CTO学院...

    SpringMVC Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面.Spring MVC 分离了控制器.模型对象.分派器以及处理程序对象 ...

最新文章

  1. 八条是阿里6万工程师正在重点攻克的难关
  2. 第一行代码学习笔记第七章——探究内容提供器
  3. html标签属性%= %,HTML标签属性集合
  4. Oracle中输出一个变量
  5. android电话系统,Android电话系统之-rild.doc
  6. 创建初始脚本工具mkscript.sh
  7. tcp套接字编程模型
  8. 疫情之下,精准测试的智能可信模式正在成为中流砥柱
  9. vue怎么根据id获取组件_vue子组件,如何根据父组件传进来的id,去查询详情,并在子组件中显示?...
  10. 强大的端到端语音识别框架—RNN-T
  11. 解决“yarn : 无法加载文件 C:\Users\quber\AppData\Roaming\npm\yarn.ps1,因为在此系统上禁止运行脚本”问题
  12. 新装Kubuntu 18.04后的一些操作
  13. phpExcel中文帮助手册
  14. pomodoro命令行计时器
  15. 世界杯 叮当 机器人 树莓派_世界杯营销大战,移动互联网谁捧起了大力神杯
  16. 01 TVM环境编译
  17. nhibernate访问mysql配置_NHibernate各种数据库连接参数文件配置方法说明
  18. Android中的常见时区
  19. Levy process(列维过程)
  20. 蓝桥杯题目---非法二进制数

热门文章

  1. celery 停止任务_celery异步任务框架
  2. java实现 k nn算法_数据挖掘(二)——Knn算法的java实现
  3. opencv图像恢复逆滤波_OpenCV之快速的图像边缘滤波算法
  4. java中mymaps_Java MyLocationStyle.myLocationType方法代码示例
  5. 查看磁盤使用情况linux,在Linux系统下安装Filelight来查看磁盘使用情况
  6. np实现sigmoid_使用numpy实现一个深度学习框架
  7. python中的继承有什么特点_python类的继承是什么?类的继承有什么样的规则?
  8. 10、计算机图形学——几何介绍(曲面的分类以及示例)
  9. IsIconic(判断窗口是否最小化)
  10. MySQL返回多行错误怎么处理_结果包含多个行错误mysql