您的位置:首页 > 编程语言 > Java开发

spring mvc 的工作原理(1)概述

2016-05-29 00:00 471 查看
摘要: 现在工作使用的是spring mvc ,之前有了解过spring mvc ,但是比较久了,而且当时没有使用spring mvc做开发的,本篇作为复习现在工作使用的是spring mvc ,之前有了解过spring mvc ,但是比较久了,而且当时没有使用spring mvc做开发的,所以看了就完了,而实际开发中有比较少需要了解mvc的工作原理、流程,基本上配置可以抄,再了解几个注解就可以进行开发了。现在有时间了解下mvc的工作原理,流程。主要参考文档,http://docs.spring.io/spring/docs/3.2.17.RELEASE/spring-framework-reference/htmlsingle/ spring 的参考文档。 spring mvc 的设计模式spring mvc 和其他 web框架一样都是前端控制器模式(front-controller),下图是spring mvc 的请求处理流程图。可以看出,请求进来后先由 front-controller处理选择对应的映射handler,调用对应的handler、返回model数据,然后渲染输出view。dispatcherservlet在spring mvc中,dispatcherservlet是核心类,同时也是front-controller。下面我们了解dispatcherservlet类。1、dispatcherservlet 是一个标准servlet的实现,所以使用的方式,就是和普通的servlet一样使用,在web.xml中配置,或者servlet3.0,在编码配置,可以继承WebApplicationInitializer 或
AbstractDispatcherServletInitializer
配置servlet。2、每一个dispatcherservlet都有一个自己的webapplicationcontext对象。webapplicationcontext之间是不共享的,而且都继承root application context ,并可以覆盖root context中定义的bean。3、dispatcherservlet 就是front-controller。webapplicationcontext每一个WebApplicationContext中都有一些特殊的bean或者说我们工作中关于spring mvc 的配置基本上都是WebApplicationContext的特定bean的配置。spring mvc 提供了默认的bean策略,在dispatcherservlet类目录下的 Dispatcherservlet.properties文件中。使用<mvc:annotation-driven>可以获得默认的实现。下面讲一下这些特殊bean.
HandlerMapping              处理请求映射到具体的业务流程,以及拦截器。最受欢迎的实现是支持注解实现,当然也有其他的实现。
HandlerAdapter              辅助dispatcherservlet 处理调用具体的业务逻辑方法,它隔离了调用的细节,例如处理注解、分解请求参数等。
HandlerExceptionResolver    处理异常与视图的映射,复杂的异常处理代码
ViewResolver                解析基于字符串的视图名称到具体的视图。
LocaleResolver              国际化解决方案,根据本地的客户端使用不同的展示
ThemeResolver               主题解决方案,支持个性化等。
MultipartResolver           解析多部分组成的请求,如上传文件等。
FlashMapManager             用于将一个请求的属性带到其他请求中,保存和查询  输入和输出 flashMap(闪存),通常用于重定向是携带参数问题的解决。
请求的处理流程(dispatcherservlet)
1、搜索webapplicationcontext 并绑定到请求中,当做request的一个属性(attribute),使得webapplicationcontext的controller以及其他元素可以使用。默认使用keyDispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE绑定webapplicationcontext .
2、绑定区域解析bean(国际化)到请求中,确保在处理请求渲染的时候有解决处理方法,(可选的)。
3、绑定主题解析bean ,同样在渲染的时候使用,(可选)。
4、如果指定了文件解析bean(multi-part bean),请求会被检查、解析。如果发现是multi-part请求,请求被封装为MultipartHttpServletRequest为处理准备。
5、搜索一个适当的处理者(handler),找到处理者,为准备model或渲染,关联执行链应的处理者(前拦截器,后拦截器,控制器)。
6、如果业务逻辑执行完成并返回model,对应视图被渲染,如果没有model(可能是被拦截器拦截,安全等原因),没有视图被渲染,因为请求已经完成了。
异常处理解析被声明在webapplicationcontext 中,捕获处理请求中抛出的异常,使用异常解析器可以定制处理异常行为。
(以上有部分内容是按自己理解翻译的,翻译不好,请多多包涵)概述到此结束

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  spring mvc 原理