源码分析
- 执行流程图
- 实验设计
- 前端控制器分发请求
- 处理器映射器
- 处理器适配器
- 调用目标方法
- 调用视图解析器
- 渲染视图
- 作业布置
执行流程图
实验设计
1.新建com.zzw.web.debug.HelloHandler
@Controller
public class HelloHandler {
//编写方法, 响应请求, 返回ModelAndView
@RequestMapping(value = "/debug/springmvc")
public ModelAndView hello(HttpServletRequest request, HttpServletResponse response) {
ModelAndView modelAndView = new ModelAndView();
modelAndView.setViewName("ok");//对应到 /WEB-INF/pages/ok.jsp
modelAndView.addObject("name", "老韩");//在model中放入了数据
return modelAndView;
}
}
2.新建web路径/WEB-INF/ok.jsp
<head>
<title>ok页面</title>
</head>
<body>
<h1>进入到ok页面</h1>
</body>
3.测试
3.调整ok.jsp
, 再次测试
<body>
<h1>进入到ok页面</h1>
name - ${requestScope.name}
</body>
前端控制器分发请求
地址栏输入: http://localhost:8088/springmvc/debug/springmvc
❀❀Spring容器结构剖析❀❀
这里就体现了SpringMVC前端控制器和容器的关系
分发请求
处理器映射器
getHandler()
拿到目标方法
处理器适配器
根据Handler拿到适配器, 不同的适配器对应不同的handler
因为是浏览器地址栏请求, 所以是GET请求
反射调用handler
进入
进入
进入
调用目标方法
直接放行, 在目标方法打个断点
对modelAndView估值
不停地往下走, 往下走N步
mav就是我们目标方法的ModelAndView
继续往下走, 回到DisPatcherServlet
调用视图解析器
往下走
进入
进入
进入, 前端控制器调用某个视图解析器返回
渲染视图
下一步
进入
下一步
进入Step Into, 出来 Step out, 再进入Step Into. 拿到RequestDispatcher
请求转发
作业布置
1.把前面我们学过的SpringMVC异常处理相关代码和案例, 自己写一遍. - 一定要自己写一遍, 否则没有印象, 理解不会深入
2.简述SpringMVC执行流程, 并画出示意图
3.把我们Debug过的SpringMVC执行流程代码, 自己也走一下, 加深理解(不用每一条语句都debug, 主要是梳理流程)
下一讲, 我们学习springboot初步入门