图解springmvc 执行流程

图解springmvc 执行流程核心对象DispatcherServlet核心控制器负责请求,响应,数据的分发。HandlerMapping处理器映射器,负责到controller中,找到对应的方法,返回给核心控制器。HandleAdapter处理适配器,将handle找到的方法执行,执行结果,即ModelAndView数据和视图返回给核心控制器。HttpMessageConvertor消息转换器,数据类型的转换,如日期…ViewResolver视图解析器,核心控制器调度视图解析器,视图解析器,返回视图。核心控制

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

核心对象

  • DispatcherServlet 核心控制器负责请求,响应,数据的分发。
  • HandlerMapping 处理器映射器,负责到controller中,找到对应的方法,返回给核心控制器。
  • HandleAdapter 处理适配器,将handle找到的方法执行,执行结果,即ModelAndView数据和视图返回给核心控制器。
  • HttpMessageConvertor 消息转换器,数据类型的转换,如日期…
  • ViewResolver 视图解析器,核心控制器调度视图解析器,视图解析器,返回视图。

核心控制器获得实体,渲染,将数据响应到页面。

执行流程图

图解springmvc 执行流程
图解springmvc 执行流程

具体的执行过程

  1. 用户发起request请求,请求至DispatcherServlet前端控制器

  2. DispatcherServlet前端控制器请求HandlerMapping处理器映射器查找Handler,DispatcherServlet:前端控制器,相当于中央调度器,各各组件都和前端控制器进行交互,降低了各各组件之间耦合度。

  3. HandlerMapping处理器映射器,根据url及一些配置规则(xml配置、注解配置)查找Handler,将Handler返回给DispatcherServlet前端控制器。

  4. DispatcherServlet前端控制器调用适配器执行Handler,有了适配器通过适配器去扩展对不同Handler执行方式(比如:原始servlet开发,注解开发)

  5. 适配器执行Handler,Handler是后端控制器,当成模型。(Controller)

  6. Handler执行完成返回ModelAndView,ModelAndView:springmvc的一个对象,对Model和view进行封装。

  7. 适配器将ModelAndView返回给DispatcherServlet

  8. DispatcherServlet调用视图解析器进行视图解析,解析后生成view,视图解析器根据逻辑视图名解析出真正的视图。
    View:springmvc视图封装对象,提供了很多view,jsp、freemarker、thymeleaf、pdf、excel。。。

  9. ViewResolver视图解析器给前端控制器返回view

  10. DispatcherServlet调用view的渲染视图的方法,将模型数据填充到request域 。

  11. DispatcherServlet向用户响应结果(jsp页面、json数据。。。。)

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/154116.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • Ubuntu命令卸载软件「建议收藏」

    Ubuntu命令卸载软件「建议收藏」1.打开一个终端,输入dpkg–list,按下Enter键,终端输出以下内容,显示的是你电脑上安装的所有软件。2.在终端中找到你需要卸载的软件的名称,列表是按照首字母排序的。3.在终端上输入命令sudoapt-get–purgeremove包名(–purge是可选项,写上这个属性是将软件及其配置文件一并删除,如不需要删除配置文件,可执行sudoapt-getr…

  • Nginx配置反向代理

    Nginx配置反向代理Nginx配置反向代理,什么是反向代理反向代理服务器决定哪台服务器提供服务。返回代理服务器不提供服务器。只是请求的转发。

  • python matplotlib 动态图_matplotlib怎么读

    python matplotlib 动态图_matplotlib怎么读说明默认情况下,在pycharm中用matplotlib绘制的图形在窗口内,是静态的:弹出窗口设置绘制动态图,需先进行相关设置:File–>Settings–>Tools–>PythonScientific–>Showplotsintoolwindow(取消打勾):代码利用plt.ion()开启一个画图的窗口,用于实时更新图表;利用plt.pause(0.5)设置暂停时间,太快的话图表无法正常显示;利用plt.show()显示图片,防止闪退示例如下:

  • 使用 SQL Server 的 uniqueidentifier 字段类型[通俗易懂]

    使用 SQL Server 的 uniqueidentifier 字段类型[通俗易懂]SQLServer自2008版起引入了 uniqueidentifier 字段,它存储的是一个UUID,或者叫GUID,内部存储为16个字节。SQLServer可用两个函数来生成 uniqueidentifier,分别是 NEWID() 和 NEWSEQUENTIALID(),后者只能用作字段的默认值。Java也有一个UUID工具类 java.uti.UUID, U…

  • Map集合的遍历[通俗易懂]

    Map集合的遍历[通俗易懂]COPY/***Map接口的使用*特点:1.存储键值对2.键不能重复,值可以重复3.无序*/publicclassDemo1{ publicstaticvoidmain(String[]args){ Map<String,Integer>map=newHashMap<String,Integer>(); //1.添加元素 map.put(“tang”,21); map.put(“he”,22); map.put(“

  • c++ 二维vector_vector如何重置

    c++ 二维vector_vector如何重置初始化二维vector,为r*c的vector,所有值为0.1.直接用初始化方法(刚开始没想到)vector>newOne(r,vector(c,0));2.用resize()来控制大小vector>res;res.resize(r);//r行for(intk=0;k

发表回复

您的电子邮箱地址不会被公开。

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