本文参考黑马程序员视频:https://www.bilibili.com/video/BV15b4y117RJ?p=160
- 知道springmvc的核心组件:dispatchServlet,handlermapping,controller,modelAndView,ViewResolver
- 分为三个阶段:初始化,匹配,执行
- 初始化开始:初始化spring容器也就是我们的context,之所以称之为容器是因为它包含了多个类(handlermapping,handleradapter等)
- 初始化spring容器初始化是由web容器完成,使用init从而调用context的refresh
- web容器存有spring容器中类的副本
- spring容器中的同种类通常有多个
- 匹配阶段的开始:路径uri会找到对应的handlermethod对象。
- handlermethod对象包含了bean与对应的method
- 在controller当中对应的方法注解@RequestMapping(“uri”)即可让uri找到对应的handlermethod对象
- handlermapping找到对应的handlermethod之后会将其与handlerinterceptor一起封装成handlerexcutionchain并返回给dispatchServlet(web容器中)
- 匹配结束:遍历HandlerAdapter,使用support方法与handlerExecutionChain相匹配。
- 执行开始:handlerAdapter尝试调用执行handlerExecutionchain中的方法(本质是controller的方法)
- handlerinterceptor对其阻拦,调用prehandle方法
- method执行没有异常则:如下
- method执行完毕返回modelandview
- 执行拦截器posthandle(与prehandle相反的拦截器触发次序)
- viewResovler解析view,返回视图(jsp或者另一个目标uri)
- method执行有异常则:如下
- method退出并返回一个exception
- web容器dispatchServlet当中的handlerExceptionresovler处理
- 无论异常与否都将执行拦截器的aftercomletion(反序)
执行阶段