摘要 简单介绍一下当用户在客户端发起请求后,Spring MVC 的执行流程,提升自己对Spring框架的认知层次。一言以蔽之,解答【Spring MVC的工作原理是什么】,这是一个热点面试题。

  Spring Web 框架是围绕前端控制器DispatcherServlet设计的,DispatcherServlet是servlet接口的一个实现类,主要用于接收客户端符合要求的请求并将服务端处理结果发送至客户端。

  简述Spring MVC的工作内容:

  • 服务端接收用户请求;
  • 指定应用程序实现客户需求;
  • 将应用程序处理的结果渲染成视图;
  • 客户端响应用户请求(回传渲染后的视图)。

执行流程

  Spring MVC执行流程:

1、前端控制器捕获用户请求。用户向服务器发送请求,请求被 Spring 前端控制器DispatcherServlet 捕获。

2、查找Handler。 DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据此URI调用处理器映射器HandlerMapping获得该Handler配置的所有相关的对象(包括 Handler对象以及Handler对象对应的拦截器),最后以 HandlerExecutionChain对象的形式返回。

  HandlerMapping是撮合URI和Method的红娘,在Spring MVC体系结构中有着举足轻重的地位,充当着配置URI和Controller中Method之间映射关系的角色。一个URI和一个可执行的Method通常是一一映射的关系。

3、Controller执行完成并返回 ModelAndView 对象。DispatcherServlet根据获得的 Handler,匹配一个合适的处理器适配器HandlerAdapter。HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。Controller执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象。

4、选择视图解析器。DispatcherServlet 根据返回的 ModelAndView,选择一个适合的视图解析器 ViewResolver(必须是已经注册到 Spring 容器中的 ViewResolver) 。

5、通过视图解析器渲染并返回视图。通过 ViewResolver 结合 Model 和 View 渲染视图(即将模型数据Model填充至视图中),DispatcherServlet 将渲染结果传递给客户端。其中的View是视图名称,用于在视图解析器中查找视图。

  客户端得到响应,视图可能是一个普通的HTML页面,也可以是XML或JSON字符串,还可以是一张图片或者一个PDF文件。

小结

  以上就是Spring MVC 的工作流程,欢迎点赞阅读,一同学习交流;若有疑问,请在文章下方留下你的神评妙论!

Reference

面试题-简单介绍 Spring MVC 执行流程或者Spring MVC的工作原理的更多相关文章

  1. 一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图:   ...

  2. Java——一文读懂Spring MVC执行流程

    说到Spring MVC执行流程,网上有很多这方面的文章介绍,但是都不太详细,作为一个初学者去读会有许多不理解的地方,今天这篇文章记录一下我学习Spring MVC的心得体会 话不多说,先上图: Sp ...

  3. Spring Boot 揭秘与实战 源码分析 - 工作原理剖析

    文章目录 1. EnableAutoConfiguration 帮助我们做了什么 2. 配置参数类 – FreeMarkerProperties 3. 自动配置类 – FreeMarkerAutoCo ...

  4. s2sh的MVC执行流程和执行原理

    =======================执行流程 1. 从页面开始,提交表单或者点击链接会触发一个action 2. action交给struts2处理,读取src目录struts.xml文件, ...

  5. Spring高级特性之三:@Enable*注解的工作原理

    Spring Boot中阐述热插拔技术的时候,简单地提及@Enable*注解.随着多种框架的应用及深入了解,@Enable*这个注解在各种框架中应用相当普及. 那么@Enable*注解工作原理是怎么样 ...

  6. Spring MVC执行流程

    SpringMVC是隶属于Spring Web中的一部分, 属于表现层的框架. 其使用了MVC架构模式的思想, 将Web层进行职责解耦, 使用请求-响应模型简化Web开发 SpringMVC通过中央调 ...

  7. ASP.NET MVC 执行流程介绍

    Routing 组件   Controller   Controller中可用的ActionResult MVC-View(使用的抽象工厂模式的视图引擎) 视图模型

  8. Spring启动执行流程梳理

    注:本文梳理启动流程使用的Spring版本:4.0.2.RELEASE 使用spring配置,都需要在web.xml中配置一个spring的监听器和启动参数(context-param),如下: &l ...

  9. MVC系统学习1—MVC执行流程

    用MVC来做开发也有一段时间了,但是感觉一直没入门,就徘徊在似懂非懂的层次,和去年刚毕业学习WebForm时一样,当时通过张子阳老兄的几篇文章,明白了请求处理流程,页面生命周期才真正明白了WebFor ...

  10. 03 spring security执行流程分析

    spring security主要是依赖一系列的Filter来实现权限验证的,责任链设计模式是跑不了的.下面简单记录一下spring操作这些Filter的过程. 1. WebSecurityConfi ...

随机推荐

  1. 关于jsp的MySQL数据库连接问题

    <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding= ...

  2. winform 实现太阳,地球,月球 运作规律https://www.cnblogs.com/axing/p/18762710

    无图眼吊(动图)    缘由 最近我太太在考公学习,给我出了两道高中地理知识的题目,把我问的一头雾水,题目是这样的 第一题 第二题 看到这两道题,当时大脑飞速运转,差点整个身体都在自转了,所以产生了个 ...

  3. golang倒腾一款简配的具有请求排队功能的并发受限服务器

    golang官方指南给了一些代码片段来,层层递进演示了信道的能力: 1>. 信号量 2>. 限流能力 var sem = make(chan int, MaxOutstanding) fu ...

  4. Ubuntu Nvidia driver驱动安装及卸载

    前言 当前英伟达下载的驱动不再是 .run 的 shell文件,所以有了新的文档,如下 Ubuntu Nvidia driver驱动安装(新) 当然如果你有 shell 文件,也可以继续使用本文档安装 ...

  5. Mac port 443: Connection refused

    MAC 安装brew raw.githubusercontent.com port 443: Connection refused 本人亲自认证过,踩过多种方案,最终认证的解决方案 原因:由于某些你懂 ...

  6. 原生JS实现虚拟列表(不使用Vue,React等前端框架)

    好家伙,   1. 什么是虚拟列表 虚拟列表(Virtual List)是一种优化长列表渲染性能的技术.当我们需要展示成千上万条数据时,如果一次性将所有数据渲染到DOM中,会导致页面卡顿甚至崩溃.虚拟 ...

  7. http状态码413,并提示Request Entity Too Large的解决办法

    使用wordpress的用户经常遇到的问题,就是在后台上传多媒体文件的时候,发现文件大小是有限制的,通常是2M.如图: 如果上传的文件超过2M,服务端返回的状态码会是413,同时提示上传失败.实际上, ...

  8. java学习-8【EnumMap】

    EnumMap和EnumSet几乎是一样的,区别时EnumMap的key时Enum. public enum Types { RED,GREEN,BLACK,YELLO } @Test public ...

  9. Java容器集合经典面试题集

    目录 概述类面试题 1. 请说一下Java容器集合的分类,各自的继承结构 2. 请谈一谈Java集合中的fail-fast和fail-safe机制 3. 如何一边遍历一边删除Collection中的元 ...

  10. 静态批处理/动态批处理/GPU Instancing /SRP Batcher的详细剖析

    静态批处理[1] 定义 标明为 Static 的静态物件,如果在使用相同材质球的条件下,在Build(项目打包)的时候Unity会自动地提取这些共享材质的静态模型的Vertex buffer和Inde ...