spring MVC运行流程
2016-01-14 09:58:09 221 举报
登录查看完整内容
spring MVC运行流程
作者其他创作
大纲/内容
No mapping found for HTTP request with URL [/XX/XX] in DispatchServlet
调用拦截器的afterCompletion方法
是否配置了
N
Y
渲染视图
调用目标Handler的目标方法得到ModelAndView
springMVC中存在对应的映射
调用拦截器的preHandle方法
目标资源
请求
由ViewResolver解析器根据ModelAndView得到实际的view对象
是否存在异常
spring的DispatchServlet通过URL-pattern进行匹配
由异常解析器HandlerExceptionResolver组件处理异常,得到新的ModelAndView
HandlerExcutionChain:处理器执行链,它是包含了Handler目标方法和所有相关拦截器的对象,它是由HandlerMapping获取的。HandlerMapping:处理器映射器,它定义了请求到处理器之间的映射。就是说,要想通过请求找到处理器,就必须通过HandlerMapping。HandlerAdapter:处理器适配器,在调用目标方法之前,需要做数据初始化,数据绑定,类型转换格式化等问题1 :如果发送的请求没有对应的handler,那HandlerExcutionChain种的handler会不会为空呢?情况1 : 实际情况是,如果配置了且配置了,就会注册RequestMappingHandlerMapping、RequestMappingHandlerAdapter和ExceptionHandlerExceptionResolver三个Bean(详细可以看练习21),其中handlerMappings中包含了SimpleUrlHandlerMapping(这个对象就是可以直接访问静态资源文件)和RequestMappingHandllerMapping(这个对象就是可以找到我们controller中的目标方法映射)。那springMVC在RequestMappingHandllerMapping找不到映射,则会认为是个静态资源,所以HandlerExcutionChain中的handler不会为空,但是最终也会报错404 + 请求路径 错误。情况2 :如果什么都没配置,那handlerMappings中只包含BeanNameUrlHandlerMapping和DefaultAnnotationHandlerMapping,这两个映射器都无法获得handler,所以HandlerExcutionChain的handler为空,doDispatch会直接return 并报404错误 且没有请求路径。
调用拦截器的postHandle方法
获取HandlerAdapter对象
END
通过HandlerMapping获取HandlerExcutionChain
404页面
0 条评论
回复 删除
下一页