SpringMVC的执行流程

举报
长路 发表于 2022/11/28 19:27:51 2022/11/28
【摘要】 文章目录前言SpringMVC的大致流程SpringMVC的执行过程及组件 前言 本篇博客是对SpringMVC中执行流程的分析,若文章中出现相关问题,请指出! 所有博客文件目录索引:博客目录索引(持续更新) SpringMVC的大致流程 SpringMVC中的对象实际上就是在Spring的容器中,随着Spring容器的加载启动而进行。 在最后不走视图解析器时返回自定义内容,一般都是字符串。若是

@[toc]

前言

本篇博客是对SpringMVC中执行流程的分析,若文章中出现相关问题,请指出!

所有博客文件目录索引:博客目录索引(持续更新)

SpringMVC的大致流程

SpringMVC中的对象实际上就是在Spring的容器中,随着Spring容器的加载启动而进行。

在最后不走视图解析器时返回自定义内容,一般都是字符串。若是返回对象的话通过java序列化不太妥当(使用了java序列化想要反序列化还是需要java程序),所以返回对象时一般转换为json,如果使用了转换器,若是context-type=text/html就是浏览器接收到的就是json字符串,若是context-type=application/json就是json对象。



SpringMVC的执行过程及组件

image-20210521134520250

入口是Servlet,将web层进行职责解耦。

清晰的角色划分:控制器(controller)、验证器(validator)、 命令对象(command object)、表单对象(formobject)、模型对象(model object)、 Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、视图解析器(view resolver)等。每一个角色都可以由一个专门的对象来实现。

具体说明

  • Handler(处理器):继DispatcherServlet前端控制器的后端控制器,在DispatcherServlet的控制下Handler对具体的用户请求进行处理,由于Handler涉及到具体的用户业务请求,所以一般情况需要程序员根据业务需求开发Handler。(可以理解为就是我们写的Controller)。
  • View(视图):通过页面标签技术将模型数据通过页面展现给用户,一般指的是程序员根据业务需求开发具体的页面。我们最常用的就是jsp(本质就是servlet程序),其次就是thymeleaf模板引擎。
  • DispatcherServlet(中央控制器):用户请求到达前端控制器,也就是MVC中的C,是整个流程控制的中心,由它来调用其他组件处理用户的请求,该存在降低了组件之间的耦合性。(其是核心也就是个Servlet,可以简单理解为门卫传达室一个请求进来先来到传达室,之后调用不同的人来处理问题)
  • HandlerMapping(处理器映射器):该映射器负责根据用户请求url找到Handler即处理器,在springmvc中提供了不同的映射器实现不同的映射方式(xml配置文件、实现接口方式、注解方式)。其返回的是一个处理器链,其中包含了filter以及handler(每个请求对应的)。
    • 实际上就是个map,放了一堆数据,key是url,value就是handler(你写的controller),一个请求来了调用下map.getUrl(url)就知道哪个类处理这个请求了。实际上会将这个url对应的拦截器、处理器都拿到。
  • HandlAdapter(处理器适配器):该适配器对处理器handler进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器执行。
    • 通过调用相应的方法,生成最终得到的ModelAndView
  • ViewResolver(视图解析器):负责将处理结果生成view视图,ViewResolver首先根据逻辑视图名解析成物理视图名即具体的页面地址,再生成View视图对象,最后对View进行渲染将处理结果通过页面展示给用户。
    • 实际上就是来解析modelAndView的,有个常用最简单的功能就是拼接字符串,给你加个前缀后缀更加方便,并且解析很多类型的视图。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。