MVC概述

在Web系统开发中一般按照视图(View)、模型(Model)、控制(Controller)三层设计模式进行构建,视图层负责模型数据的渲染,将数据用一定的形式展现给用户;模型层负责监听实体的变化并对实体进行解析和封装;控制层负责提供前后端交互的请求逻辑处理入口,处理用户请求,并建立适当的模型传递给视图进行渲染。层级关系一般如下图所示:

在Web开发的早期,JSP + Servlet + JavaBean的组合非常流行,那个时候JSP担任着视图层渲染工作,Servlet作为控制器负责用户的请求和响应,而JavaBean则负责一些更加复杂的业务逻辑,例如跟数据库打交道。

后来出现了一个新的MVC框架Struts2,它将action作为框架的控制器负责用户请求响应,同时为前端页面提供了标签库和有力的渲染工具-OGNL,用户请求action返回数据到JSP后,在JSP中可以采用OGNL表达式对数据进行动态的渲染,它还增加了请求过滤器以及进行请求前后处理的拦截器,方便系统过滤、拦截一些不符合规则的请求并做出及时的响应操作,不得不说它的出现降低了系统的耦合性,让MVC模式的分层更加明显,也大大的简化了开发者的代码量。

SpringMVC简介

由于Struts2框架带来的便利,它和Spring在过去很长一段时间被结合在一起用来构建系统,但是随着技术的发展,二者的结合出现了很多问题例如类臃肿、兼容性以及Struts2漏洞等问题,而就在这时候,Spring家族诞生了一个新的MVC框架来与Spring实现无缝结合,它就是SpringMVC。

SpringMVC是采用Java开发,一种基于Web MVC设计模式,以请求驱动为类型的轻量级Web框架。由于使用了MVC架构模式的思想,将Web层进行了职责解耦,让分层更加的明显。

SpringMVC优势

谈到SpringMVC的优势,首先想到的就是它依赖Spring的包才能运行,也就是说它其实是Spring的一个MVC子框架,这样的话就可以跟Spring实现无缝的结合,从而继承它的众多特性,这一点比起Struct2框架就有了很大的先天优势,另外还有其他的几个优点如下:

1、实现方法级别的请求拦截

上面提及的Struts2采用的是类级别的请求拦截,即一个类对应一个请求上下文,而SpringMVC采用方法级别的拦截,一个方法对应一个请求URL,也就是一个请求上下文。所以从架构本身上SpringMVC容易实现Restful接口,而Struts2的架构实现起来要麻烦很多,因为Struts2 action的一个方法可以对应一个URL,但是它的类属性却被所有的方法共享,这也就无法用注解或其他方式标识其所属的方法了。

2、SpringMVC提供强大的注解

SpringMVC引入了注解的功能,通过在类、方法上标记相应的注解,可以实现实体的映射、配置的加载等,使用起来非常便利,可以大大简化配置和代码量,比如说同样是接收请求,Servlet作为控制器需要在doPost或者doGet中做一些处理后才能调用业务代码,而SpringMVC通过几个注解就可以实现,例如@requestMapping可以帮助定义当前类为一个Spring管理的bean,同时指定该类是一个控制器,可以用来接受请求,标识当前类是控制层的一个具体的实现;@Controller放在方法上面用来指定某个方法的路径,当它放在类上的时候相当于命名空间需要组合方法上的requestMapping来访问。

3、清晰的角色划分

控制器(Controller)、验证器(Validator)、命令对象(Command-obect)、表单对象(form-object)、模型对象(model-object)、Servlet分发器(DispatcherServlet)、处理器映射(handler-mapping)、视图解析器(view-resolver)等等。每一个角色都可以由一个专门的对象来实现。

SpringMVC流程步骤

SpringMVC的具体执行流程步骤如下:

1.首先用户在前台页面向某一个后台指定的URL发起了请求,SpringMVC收到这个请求后会首先交给中央控制器(DispatcherServlet)

2.中央控制器请求HandlerMapping查找 Handler处理器 (可以根据xml配置、注解进行查找)

3.处理器映射器HandlerMapping向中央控制器返回Handler,HandlerMapping会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象,多个HandlerInterceptor拦截器对象),通过这种策略模式,很容易添加新的映射策略

4.中央控制器调用处理器适配器去执行Handler

5.处理器适配器HandlerAdapter将会根据适配的结果去执行Handler

6.Handler执行完成给适配器返回ModelAndView

7.处理器适配器向中央控制器返回ModelAndView (ModelAndView其实是SpringMVC框架的一个底层对象,包括模型Model和视图View)

8.中央控制器请求视图解析器去进行视图解析 (根据逻辑视图名解析成真正的视图(jsp),通过这种策略很容易更换其他视图技术,只需要更改视图解析器即可

9.视图解析器向中央控制器返回View

10.中央控制器进行视图渲染 (视图渲染将模型数据(在ModelAndView对象中)填充到request域)

11.前端控制器向用户响应结果

springmvc 优点_深入整合SSM框架引发底层原理——SpringMVC相关推荐

  1. Maven整合SSM框架(maven+spring+springmvc+mybatis)

    啊哈,终于到了用Maven整合SSM这个扑街含家产了.弄了整整一天才跑通.Mybatis的配置有些繁琐,跟之前学习的那个有点出去,加上Eclipse的Spring工具没有弄,配置的时候没有提示被搞蒙圈 ...

  2. batocera中文整合包_分享一个整合 SSM 框架的高并发和商品秒杀项目

    点击上方"Java基基",选择"设为星标" 做积极的人,而不是积极废人! 源码精品专栏 中文详细注释的开源项目 RPC 框架 Dubbo 源码解析 网络应用框架 ...

  3. idea 使用 maven 整合 ssm 框架 实现简单的增、删、改 和 分页查询功能

    详细请参考:   idea 使用 maven 整合 ssm 框架 文章目录 ==效果图== ==准备数据库== ==创建maven项目== ==配置文件== pom.xml jdbc.properti ...

  4. idea 使用maven 整合ssm框架

    创建 maven 项目 刚创建好的 maven 项目结构 整合 SSM 框架后的项目结构 数据库环境 创建 mybatis 数据库,在 mybatis 数据库中创建 teacher 数据库表,然后在 ...

  5. idea ssm框架 mysql_IDEA 2017 整合SSM框架(使用Maven创建工程)

    SSM框架(Spring+SpringMVC+MyBatis)是目前Java WEB开发使用较多的框架,搭建起来起来比较麻烦,之前也曾搭建成功过.这次通过结合SSM开发的相关学习视频,再一次系统性的将 ...

  6. 超详细整合SSM框架--(Spring + Spring MVC + MyBatis)

    超详细整合SSM框架--(Spring + Spring MVC + MyBatis) SpringMVC框架--文章跳转 Spring框架--文章跳转 Mybatis框架--文章跳转 整合思路 设计 ...

  7. springboot2整合mysql5_SpringBoot2整合SSM框架详解

    SpringBoot2整合SSM框架详解 发布时间:2019-01-15 21:33, 浏览次数:1218 , 标签: SpringBoot SSM <>开发环境 * 开发工具:Eclip ...

  8. IDEA整合SSM框架之配置日志logback(七)

    IDEA整合SSM框架 配置日志logback 引入logback相关依赖 在resources的根目录下创建logback.xml 在web.xml配置logback.xml 运行项目,查看日志打印 ...

  9. 2023新版图文详解SpringBoot整合SSM框架(附源码)

    版权声明 本文原创作者:谷哥的小弟 作者博客地址:http://blog.csdn.net/lfdfhl 教程概述 本教程以图文形式详细讲解SpringBoot整合SSM框架的流程以及具体步骤及其注意 ...

最新文章

  1. Powershell检测AD账户密码过期时间并邮件通知
  2. OSError: [WinError 126] 找不到指定的模块
  3. golang常用命令
  4. 可能是性价比最高的,0-180度乐高舵机解决方案
  5. ActiveX技术在WEB页上的应用[转载]
  6. java上转型对象特点_Java 浅析三大特性之一继承
  7. C#中? 、?? 、?. 、??= 的用法和说明
  8. SQL Server 2016/2014/2012/2008/2005/2000简体中文企业版下载地址
  9. git如何将远程仓库代码,覆盖本地代码
  10. 公司招聘中不能说的秘密,简历只有这么发才有希望
  11. centos 并发请求数_彻底理解 jmeter 的线程数与并发数之间的关系
  12. AutoCAD.net 自定义窗体及面板与CAD交互时的焦点切换问题(C#)
  13. 《JavaScript高级程序设计》目录笔记
  14. 我的开源GIS解决方案之路
  15. 计算机科学技术的想象作文600,关于科学的想象作文
  16. 七日杀局域网找不到服务器,7日杀局域网的联机教程步骤图
  17. matlab 使用c2d的离散化笔记
  18. 维基百科创建和百度百科建立有何不同?
  19. 数据结构溢彩加强版——(二)算法篇
  20. leetcode 5.最长回文子串

热门文章

  1. 指定 年 周 星期 获取这周的开始日期和结束日期
  2. 0512 操作系统进程调度实验
  3. CCNA 学习笔记(七)--交换知识(VLAN VTP TRUNK)
  4. 转载构造函数与拷贝构造函数
  5. Delphi新手必看
  6. 吃的苦中苦,方为人上人!
  7. android Binder机制(一)架构设计
  8. JAVA字节流(读写文件)
  9. 两种自定义表单设计方案 [转贴]
  10. 靠谱测试人员需具备逻辑思考能力