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 中,捕获处理请求中抛出的异常,使用异常解析器可以定制处理异常行为。(以上有部分内容是按自己理解翻译的,翻译不好,请多多包涵)概述到此结束
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- 一个jar包里的网站
- 一个jar包里的网站之文件上传
- 一个jar包里的网站之返回对媒体类型
- Spring和ThreadLocal
- Spring Boot 开发微服务
- Spring整合Quartz(JobDetailBean方式)
- Spring整合Quartz(JobDetailBean方式)
- 二级域名原理以及程序
- 一根网线内的8根线哪4根是传输数据的,哪四根是防干扰的
- TCP三次握手及原理
- jQuery中的pushStack实现原理和应用实例
- C# MVC模式下商品抽奖功能实现
- sqlserver索引的原理及索引建立的注意事项小结
- php中的ini配置原理详解
- jquery原理以及学习技巧介绍
- Zend的MVC机制使用分析(二)
- PHP strtotime函数用法、实现原理和源码分析
- Base64编码解码原理及C#编程实例