Spring mvc的理解

Spring mvc的理解

1. DispatcherServlet(前端核心控制器)理解

dispatcherServilet 可以理解为一个转发器不负责处理只负责转发给其它工具进行处理,处理好之后在给它,最后由dispatcherServlet给客服端。

2. HandlerMapping(处理器映射器)的理解

handlerMapping 可以理解成一个spring初始化形成的一个handlerMap ,map的key是 请求的地址url value是 handler,请求的逻辑说白了就是controller的里面的方法,value里面不只有controller 还有多个 interceptor,这里的interceptor可以理解成aop (包含preHandle(请求前)、postHandle(请求提交)、afterCompletion(请求完成后拦截))

preHandle
调用时间:Controller方法处理之前
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行
若返回false,则中断执行,注意:不会进入afterCompletion
postHandle
调用前提:preHandle返回true
调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作
执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。
备注:postHandle虽然post打头,但post、get方法都能处理
afterCompletion
调用前提:preHandle返回true
调用时间:DispatcherServlet进行视图的渲染之后
多用于清理资源

官方叫法:执行链(HandlerExecutionChain) ,找到具体的执行链返回给dispatcherServlet 。
为什么要返回给dispatcherServlet那 因为handlerMapping只是一个map没有方法去执行只能返回给dispatcherServlet让它把执行链交给能处理的工具。这个能处理的工具叫handlerAdapter(处理器适配器)

3. HandlerAdapter(处理器适配器)的理解

handlerAdapter 那个执行链 可以寻找要使用那个Adapter处理 ,
mvc有三个adapter

  1. 实现 Controller接口
  2. 实现 httpRequestHandler接口
  3. 使用 @Controller注解
    在这里插入图片描述

通过 supports方法判断要使用那个方式的 adapter
在这里插入图片描述
如何adapter发现不是数据类型的而是页面类型的进行封装成一个modeAndView(模型数据和视图信息)给dispacherServlet
(为什么有要给 dispacherServlet 因为所有工具只能通过dispacherServlet 进行通信,handlerAdaper 是没有办法和客户端进行交互的 能和客户端进行交互并可以联系其他工具的只有dispacherServlet)
如果是数据类型ResponseBody 直接方法给dispacherServlet,dispacherServlet返回给客户端就行如何是页面的话那就有请我们的试图解析器(viewResolver)

4. ViewResolver

dispacherServlet发现不是数据类而是modeAndView(模型数据和视图信息) 就开始调用ViewResolver(视图解析器) viewResolver进行试图解析,把对应的试图解析出来,返回给dispatcherServlet ,dispatcherServlet进行最后渲染返回给客户端

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值