SprigMVC的运行流程
发送一次请求的流程图
首先准备一个Contorller类,写上一个hello方法,定义好他的请求路径,在浏览器上请求他的路径
@RestController
@RequestMapping("/user")
public class UserController {
@RequestMapping("/hello")
public String hello(){
return "success";
}
}
上图为请求路径后,他的返回值,说明请求没有错,执行成功
以下来看看他的请求的运行过程(debug方式:对应上图步骤)
1、前端控制器(DispatcherServlet)收到请求,调用doDispatch()进行处理
先在DispatcherServlet类中的doDispatch()打上断点
2-3、根据HandlerMapping中保存的请求映射信息找到,处理当前请求的,处理执行链(包含了拦截器,请求地址方法)
->debug往下走到1016行,会看到如图(hello()和两个拦截器)
4、根据当前处理器找到它的HandlerAdapter(适配器)
->适配器模式
->debug往下走到1023行
5、拦截器的preHandle先执行
->debug往下走到1035行
6、适配器执行目标方法
->debug往下走到1040行
->执行目标方法并返回ModelAndView
7、拦截器的postHandle()执行
->debug往下走到1047行
8-9、处理结果(页面渲染流程)
->debug往下走到1057行,进入该方法
8.1 如果有异常使用异常解析器处理异常;处理完后还会返回ModeAndView
8.2 调用render() 进行页面渲染
8.3 执行拦截器的afterCompletion(异常(如果有)已经处理)
10-11、渲染视图,response响应freemarker、jsp、json、xml给用户,请求结束