spring MVC运行流程
2016-03-09 21:22:03 42 举报
Spring MVC是一种基于Java的Web应用程序开发框架,它采用MVC(Model-View-Controller)设计模式。在运行过程中,客户端发送请求到DispatcherServlet,然后由DispatcherServlet控制器查询一个或多个处理器映射器(HandlerMapping),找到处理请求的控制器(Controller)。控制器进行业务逻辑处理后,返回一个模型(ModelAndView)对象给视图解析器(ViewResolver),视图解析器解析后返回具体视图(View)。最后,视图负责将结果展示给用户。
作者其他创作
大纲/内容
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 条评论
回复 删除
下一页