SpringMVC高能笔记,详解SpringMVC的工作流程

342 阅读3分钟

SpringMVC 的 MVC 组件

image.png

SpringMVC 执行流程

流程图

image.png

执行流程简单分析

(1) 浏览器提交请求到中央调度器

(2) 中央调度器直接将请求转给处理器映射器。

(3) 处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。

(4) 中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。

(5) 处理器适配器调用执行处理器。

(6) 处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。

(7) 处理器适配器直接将结果返回给中央调度器。

(8) 中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。

(9) 视图解析器将封装了的视图对象返回给中央调度器

(10) 中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。

(11) 中央调度器响应浏览器。

返回对象Object

处理器方法也可以返回Object 对象。这个Object 可以是Integer, String,自定义对象,Map,List 等。但返回的对象不是作为逻辑视图出现的,而是作为直接在页面显示的数据出现的。

返回对象,需要使用@ResponseBody 注解,将转换后的JSON 数据放入到响应体中。

(1) 环境搭建

A 、 maven pom.xml

由于返回Object 数据,一般都是将数据转化为了JSON 对象后传递给浏览器页面的。而这个由Object 转换为JSON,是由 Jackson 工具完成的。所以需要导入Jackson 的相关Jar 包。

依赖:

image.png

B、 声明注解驱动

将Object 数据转化为JSON 数据,需要由消息转换器HttpMessageConverter 完成。而转换器的开启,需要由<mvc:annotation- driven/>来完成。

SpringMVC 使用消息转换器实现请求数据和对象,处理器方法返回对象和响应输出之间的自动转换

当 Spring 容器进行初始化过程中,在mvc:annotation-driven/处创建注解驱动时,默认创建了七个HttpMessageConverter 对象。也就是说,我们注册mvc:annotation-driven/,就是为了让容器为我们创建HttpMessageConverter 对象。

image.png

  • HttpMessageConverter 接口:

HttpMessageConverter是Spring3.0 新添加的一个接口,负责将请求信息转换为一个对象(类型为T),将对象(类型为T)输出为响应信息

  • HttpMessageConverter接口定义的方法:

boolean canRead(Class<?> clazz,MediaType mediaType): 指定转换器可以读取的对象类型,即转换器是否可将请求信息转换为 clazz 类型的对象,同时指定支持 MIME 类型(text/html,applaiction/json 等)

boolean canWrite(Class<?> clazz,MediaType mediaType):指定转换器是否可将 clazz 类型的对象写到响应流中,响应流支持的媒体类型在 MediaType 中定义。

LIst getSupportMediaTypes():该转换器支持的媒体类型。

T read(Class<? extends T> clazz,HttpInputMessage inputMessage):将请求信息流转换为T 类型的对象。

void write(T t,MediaType contnetType,HttpOutputMessgae outputMessage):将 T 类型的对象写到响应流中,同时指定相应的媒体类型为contentType

加入注解驱动mvc:annotation-driven/后适配器类的 messageConverters 属性值

image.png

image.png