SpringMVC 工作原理

SpringMVC 工作原理1.客户端请求提交到DispatcherServlet2.由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller3.DispatcherServlet将请求提交到Controller4.Controller调用业务逻辑处理后,返回ModelAndView5.DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图,并将结果显示到客户

大家好,又见面了,我是你们的朋友全栈君。


一、工作原理

Spring的MVC框架主要由DispatcherServlet、映射处理器、处理器(控制器)、视图解析器、视图组成。

SpringMVC 工作原理

简单描述

  1. 客户端请求提交到DispatcherServlet
  2. 由DispatcherServlet控制器查询一个或多个HandlerMapping,找到处理请求的Controller
  3. DispatcherServlet将请求提交到Controller
  4. Controller调用业务逻辑处理后,返回ModelAndView
  5. DispatcherServlet查询一个或多个ViewResoler视图解析器,找到ModelAndView指定的视图,并将结果显示到客户

详细过程

  1. 用户发送请求至前端控制器DispatcherServlet
  2. DispatcherServlet调用处理器映射器HandlerMappering
  3. 处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
  4. DispatcherServlet调用处理器适配器HandlerAdapter
  5. 处理器适配器经过适配调用具体的处理器(Controller,也叫后端控制器)
  6. Controller执行完成返回ModelAndView;
  7. 处理器适配器将controller执行结果ModelAndView返回给DispatcherServlet;
  8. DispatcherServlet将ModelAndView传给视图解析器ViewReslover
  9. 视图解析器解析后返回具体View;
  10. DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),并响应给用户。

二、处理器/组件 的作用

前端控制器DispatcherServlet(也叫中央处理器):作为前端控制器,整个流程控制的中心,控制其它组件执行,统一调度,降低组件之间的耦合性,提高每个组件的扩展性。

处理器映射器HandlerMappering:通过扩展处理器映射器实现不同的映射方式,例如:配置文件方式,实现接口方式,注解方式等。

处理器适配器HandlerAdapter:通过扩展处理器适配器,支持更多类型的处理器。

视图解析器ViewReslover:通过扩展视图解析器,支持更多类型的视图解析,例如:jsp、freemarker、pdf、excel等。
 


如果有错误的地方欢迎指出~?
转载请标明:
https://blog.csdn.net/vihem/article/details/120888564

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/146551.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • floyed 算法

    floyed 算法/**floyed是用动态规划解决完全最短路的算法,一次调用即可得到任意两个点间的最短路径复杂度为O(n^3),适用于稠密图,顶点数一般在100以内适用结构简单,易于编写floyed算法还可解决传递闭包,判断图是否为连通图在解题时候一般不会只考floyed而是利用floyed得到的结果,进行下一步解题就像二分算法一样,提一

    2022年6月25日
    37
  • php生成唯一uid的解决思路「建议收藏」

    php生成唯一uid的解决思路

    2022年2月19日
    41
  • cannot find the class file for_canyoufindtina

    cannot find the class file for_canyoufindtina今天第一次使用javah這個命令,一直報"Couldnotfindclassfile"這個錯誤,網上找了很多帖子,都是在說類名前面要加包的名字,還要設置什麼-classpath,最後發現其實這是個很違和的錯誤提示。我們一般會在.java文件所在目錄下用javac產生類文件.class,然後試圖使用javah命令產生c的頭文件.h,這個時候就會報上述錯誤了,即使加了-classpat…

    2022年9月24日
    0
  • Python学习笔记(一)PyCharm社区版安装教程

    Python学习笔记(一)PyCharm社区版安装教程因为工作的原因,这两个月开始学习Python。准备把学习的东西记录一下。因为是自己的电脑,有python3.8,但是没有安装编译器,所以从PyCharm安装开始。(安装python会自带IDLE编辑器,自己学习的时候用着挺合适的,但是要用于工作或者其他大一些的项目,还是安装PyCharm比较合适)接下来开始安装教程。1、首先通过官网下载PyCharm社区版的安装包。下图中可以看到,PyCharm分为专业版(Professional)和社区版(Community),推荐使用社区版,基本能满足.

    2022年8月29日
    0
  • plsql直接连接远程数据库_plsql远程连接oracle

    plsql直接连接远程数据库_plsql远程连接oracle前言每次安装Oracle以后,都会出现使用plsql连接不上的问题!多次重启电脑、重装系统的磨人经历之后,终于做出这么一篇文章,希望能帮助广大技术人员减少一些时间,顺利进行连接。注:也可以用plsql连接远程数据库(只要有oracle的network\admin\tnsnames.ora就行)。首先下载64位oracle以及32位轻量级客户端(注意版本的对应,我用的是11g的oracl……

    2022年10月20日
    0
  • 快速排序中的分割算法的解析与应用

    快速排序中的分割算法的解析与应用

    2021年9月15日
    40

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号