文档章节

【原创】遨游springmvc之原理篇

开源中国首席脑科主任
 开源中国首席脑科主任
发布于 2016/07/23 15:06
字数 1133
阅读 484
收藏 11

1.Springmvc是什么

spring web mvc是一种基于java实现的请求驱动(请求-响应模型)的web层轻量级框架,spring web mvc采用了MVC(模型-视图-控制器)框架设计,将web层进行职责解耦,围绕核心处理器DispatcherServlet分派请求处理程序,可配置的处理程序映射,标签,地区,时区和主题解析以及对上传文件的支持,springmvc默认是基于@RequestMapping和@Controller注解,提供了丰富的参数、数据模型、视图、异常的处理器,解析器,适配器,过滤器来处理各种类型的请求,并且返回对应的数据结果。

 

2.Springmvc能帮我们处理什么

>让我们能非常简单的设计出干净的Web层和薄薄的Web层;前端控制器(DispatcherServlet)、请求到处理器映射(HandlerMapping)、处理器适配器(HandlerAdapter)、视图解析器(ViewResolver)、处理器或页面控制器(Controller)、验证器(   Validator)、命令对象(Command  请求参数绑定到的对象就叫命令对象)、表单对象(Form Object 提供给表单展示和提交到的对象就叫表单对象)。 

>进行更简洁的Web层的开发; 

>天生与Spring框架集成(如IoC容器、AOP等); 

>提供强大的约定大于配置的契约式编程支持; 

>能简单的进行Web层的单元测试; 

>支持灵活的URL到页面控制器的映射; 

>非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); 

>非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; 

>提供一套强大的JSP标签库,简化JSP开发; 

>支持灵活的本地化、主题等解析; 

>更加简单的异常处理; 

>对静态资源的支持; 

>支持Restful风格。

 

3.Springmvc原理图

原理图3.1

时序图3.2

3.3视图解析

 

根据原理图3.1、时序图3.2、视图解析图3.3(【图画的不好,不要咬我😳,还有图片是svg,看不清可以尽情放大不影响清晰度!】,Dispatcher 视图解析部分在3.2中画不开了😖,在图3.3补充),我们可以来简单描述下springmvc处理用户请求并返回响应的过程:

1.首先,用户发起一个请求,springmvc将用户请求统一转发到核心Servlet:DispatcherServlet

2.DispatcherServlet根据用户的请求,去找HandlerMapping(常用的有映射处理器RequestMappingHandlerMapping),我们理解为映射处理器,HandlerMapping会根据请求返回一个HandlerMethod,HandlerMethod包含了请求对应控制器、方法、参数等信息

3.Dispatcher将HandlerMethod包装,形成一个处理器执行链HandlerExecutionChain,它包含了HandlerMethod和Interceptor(拦截器),当请求对应的拦截器不是空的时候Dispatcher会先处理拦截器里面的东西

4.此时Dispatcher根据HandlerMethod,去找对应的Adapter(适配器),适配器用来最终处理请求,适配器中包含HandlerMethodArgumentResolver(参数解析器)和HandlerMethodReturnValueHandler(返回值处理程序)

5.适配器中处理了各种类型的请求参数,当然我们也可以有自己的参数解析器,springmvc将处理好的参数传入最终的控制器执行程序(invoke(args)),返回对应的值,适配器再根据自带的HandlerMethodReturnValueHandler处理程序将返回值包装,并且返回一个ModelAndView

6.ModelAndView包含了Model(模型【LinkedHashMap】)对象和View(视图)对象

7.DispatcherServlet根据ModelAndView处理派遣的最终结果,并根据提供的视图解析器,将model对象暴露到request请求中,返回对应的视图,渲染(如jsp用JstlView)

 

4.个性导航

以上我们已经简单介绍了springmvc工作的原理,接下来就让我们介绍以上springmvc所用到的一些核心类与接口

本系列博客主要介绍以下几个部分:

  1. 遨游springmvc之Dispatcher
  2. 遨游springmvc之HandlerMapping和HandlerMethod
  3. 遨游springmvc之HandlerAdapter
  4. 遨游springmvc之WebDataBinder
  5. 遨游springmvc之Converter
  6. 遨游springmvc之HandlerMethodArgumentResolver
  7. 遨游springmvc之HandlerMethodReturnValueHandler
  8. 遨游springmvc之HandlerInterceptor
  9. 遨游springmvc之HandlerExceptionResolver
  10. 遨游springmvc之ViewResolver(未开始)

本人寒腹短识,乘工作之余浏览了下springmvc写了此篇博客,有写错之处还望springmvc大牛指点纠正,😋

 

 

 

© 著作权归作者所有

开源中国首席脑科主任
粉丝 61
博文 21
码字总数 18226
作品 0
宁波
后端工程师
私信 提问
【原创】遨游springmvc之DispatcherServlet

1.机制 Dispatcher是springmvc前端控制器模式的实现,它提供一个集中的请求处理机制,所有的请求都将由一个单一的处理程序处理,Dispatcher负责请求的派遣,它与spring ioc完美继承,从而可以...

开源中国首席脑科主任
2016/07/23
125
0
【原创】遨游springmvc之HandlerMethodReturnValueHandler

1.前言 在springmvc中,很多人都知道@ResponseBody,加了它那就会返回对应的数据结果(json),而不是一张jsp或者其他视图。如果不加,那么它就返回了一个具体的视图,如jsp。那么让我们来深入...

开源中国首席脑科主任
2016/08/20
1K
1
【原创】遨游springmvc之WebDataBinder

1.前言 先上原理图 在我们学习servlet的时候我们知道有一个方法叫做:request.getParameter("paramName"),它返回的是一个String类型,但是如果一切都是这样子我们开发程序的时候就会显得特别...

开源中国首席脑科主任
2016/08/02
957
1
【原创】遨游springmvc之HandlerMapping

1.前言 之前我们springmvc原理篇里已经介绍过,从springmvc核心处理器DispatcherServlet派遣请求的时候,首先会将请求包装,这就是我们这边介绍的HandlerMapping 在springmvc源码介绍中我们知...

开源中国首席脑科主任
2016/07/24
161
0
【原创】遨游springmvc之Converter

1.前言 在前一篇WebDataBinder中讲述了了一个PropertyEditor,它通过setAsText满足了字符串到指定类型的转换,但是它实现不了从任意类型转换到目标类型,所以在spring3.x之后引入了Converter...

开源中国首席脑科主任
2016/08/08
66
0

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习之模块

1、 stub_status模块: 用于展示nginx处理连接时的状态。 配置语法如下: Syntax:stub_status;Default:默认没有配置Context:server、location 可以编辑default.conf,加上如下配置: ...

码农实战
46分钟前
4
0
MySQL,必须掌握的6个知识点

目录 一、索引B+ Tree 原理 MySQL 索引 索引优化 索引的优点 索引的使用条件 二、查询性能优化使用 Explain 进行分析 优化数据访问 重构查询方式 三、存储引擎InnoDB MyISAM 比较 四、数据类...

李红欧巴
50分钟前
4
0
堆”和“栈

C++作为一款C语言的升级版本,具有非常强大的功能。它不但能够支持各种程序设计风格,而且还具有C语言的所有功能。我们在这里为大家介绍的是其中一个比较重要的内容,C++内存区域的基本介绍。...

SibylY
今天
4
0
总结:Https

一、介绍 简单理解,https即在http协议的基础上,增加了SSL协议,保障数据传输的安全性。 它由以前的http—–>tcp,改为http——>SSL—–>tcp;https采用了共享密钥加密+公开密钥加密的方式 ...

浮躁的码农
今天
6
0
数据库表与表之间的一对一、一对多、多对多关系

表1 foreign key 表2 多对一:表 1 的多条记录对应表 2 的一条记录 利用foreign key的原理我们可以制作两张表的多对多,一对一关系 多对多: 表1的多条记录可以对应表2的一条记录 表2的多条记...

Garphy
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部