文档章节

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

巡山
 巡山
发布于 2016/05/29 19:45
字数 1016
阅读 471
收藏 10

          现在工作使用的是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以及其他元素可以使用。默认使用key 
 DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE绑定webapplicationcontext .

 

2、绑定区域解析bean(国际化)到请求中,确保在处理请求渲染的时候有解决处理方法,(可选
的)。

 

3、绑定主题解析bean ,同样在渲染的时候使用,(可选)。

 

4、如果指定了文件解析bean(multi-part bean),请求会被检查、解析。如果发现是multi-part
请求,请求被封装为MultipartHttpServletRequest为处理准备。

 

5、搜索一个适当的处理者(handler),找到处理者,为准备model或渲染,关联执行链应的处
理者(前拦截器,后拦截器,控制器)。

 

6、如果业务逻辑执行完成并返回model,对应视图被渲染,如果没有model(可能是被拦截器拦
截,安全等原因),没有视图被渲染,因为请求已经完成了。

 

异常处理解析被声明在webapplicationcontext 中,捕获处理请求中抛出的异常,使用异常解
析器可以定制处理异常行为。

 

(以上有部分内容是按自己理解翻译的,翻译不好,请多多包涵)

概述到此结束

 

 

 

© 著作权归作者所有

巡山
粉丝 2
博文 20
码字总数 12425
作品 0
深圳
私信 提问
Spring MVC原理及配置详解

【spring】Spring MVC原理及配置 1.Spring MVC概述: Spring MVC是Spring提供的一个强大而灵活的web框架。借助于注解,Spring MVC提供了几乎是POJO的开发模式,使得控制器的开发和测试更加简...

qq58edf1d989a2d
2018/06/26
0
0
仿照源码,手写一个自定义 Spring MVC 框架

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 https://blog.csdn.net/GitChat/article/details/97947618 前言 上节课我们学习了 Spring M...

GitChat技术杂谈
07/31
0
0
☆聊聊Spring系列_Index

Spring经典详解 Spring事务机制详解 Spring配置事务五种方式 关于Spring加载classpath与classpath*的过程剖析 深入分析Spring 与 Spring MVC容器 Spring系列文章 【第1章 Spring概述与结构】...

陶邦仁
2015/12/09
1K
0
Spring mvc HandlerMapping 实现机制

概述 当DispatcherServlet接受到客户端的请求后,SpringMVC 通过 HandlerMapping 找到请求的Controller。 HandlerMapping 在这里起到路由的作用,负责找到请求的Controller。 Spring MVC 默认...

轨迹_
2018/06/23
93
0
2019BATJ面试题详解:MyBatis+MySQL+Spring+Redis+多线程

这里为大家分享一些面试的一手资料,供大家迎接接下来的金三银四跳槽季 Spring Spring 概述 什么是spring? 使用Spring框架的好处是什么? Spring由哪些模块组成? 解释AOP模块 Spring配置文件...

别打我会飞
03/20
313
0

没有更多内容

加载失败,请刷新页面

加载更多

Kylin构建Cube过程详解

1 前言 在使用Kylin的时候,最重要的一步就是创建cube的模型定义,即指定度量和维度以及一些附加信息,然后对cube进行build,当然我们也可以根据原始表中的某一个string字段(这个字段的格式...

大数据技术进阶
2分钟前
1
0
Git保存密码

保存密码 $ git config --global credential.helper store 参数 --global 设置全局,如果用 --local 则只设置当前库 要注意保存时是用明文保存的,所以不要在公用电脑使用...

编程老陆
3分钟前
1
0
ofcms 说明文档

一、模板说明 项目概述 java 版CMS系统、基于java技术研发的内容管理系统、功能:栏目模板自定义、内容模型自定义、多个站点管理、在线模板页面编辑等功能、代码完全开源、MIT授权协议。 技术...

kuchawyz
10分钟前
2
0
理解CSS相对定位和固定定位

本文转载于:专业的前端网站➦理解CSS相对定位和固定定位 前面的话   一般地,说起定位元素是指position不为static的元素,包括relative、absolute和fixed。前面已经详细介绍过absolute绝对...

前端老手
20分钟前
2
0
iOS Xcode升级包地址(感谢大神)

下载地址:DeviceSupport

_____1____
34分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部