SpringMVC是在空闲时自学的框架,学得不深,也是从别人那里学习过来,就把这些都记录下来了。

1. 简单介绍

Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块,从而在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts1,Struts2等。

2. 重要接口和类

DispatcherServlet:前端控制器,用于接收请求。
HandlerMapping接口:用于处理请求的映射。
DefaultAnnotationHandlerMapping:HandlerMapping接口的实现,用于把一个URL映射到具体的Controller类上。
HandlerAdapter接口:用于处理请求的映射。
AnnotationMethodHandlerAdapter:HandlerAdapter接口的试下,用于把一个URL映射到对应Controller类的某个方法上。
ViewResolver接口:用于解析View。
InternalResourceViewResolver:ViewResolver接口的实现,用于把ModelAndView的逻辑视图名解析为具体的View。

3. 运行原理

要学好框架,一定要理解框架的运行原理!下图是SpringMVC接收到用户请求后的处理流程图。

4. 具体的执行步骤:

(1)用户发送请求——>DispatcherServlet,前端控制器收到请求后自己不进行处理,而是委托给其他的解析器进行处理,作为统一访问点,进行全局的流程控制;
(2)DispatcherServlet——>HandlerMapping, HandlerMapping将会把请求映射为HandlerExecutionChain对象(包含一个Handler处理器(页面控制器)对象、多个HandlerInterceptor拦截器)对象,通过这种策略模式,很容易添加新的映射策略;
(3)DispatcherServlet——>HandlerAdapter,HandlerAdapter将会把处理器包装为适配器,从而支持多种类型的处理器,即适配器设计模式的应用,从而很容易支持很多类型的处理器;
(4)HandlerAdapter——>处理器功能处理方法的调用,HandlerAdapter将会根据适配的结果调用真正的处理器的功能处理方法,完成功能处理;并返回一个ModelAndView对象(包含模型数据、逻辑视图名);
(5)ModelAndView的逻辑视图名——> ViewResolver, ViewResolver将把逻辑视图名解析为具体的View,通过这种策略模式,很容易更换其他视图技术;
(6)View——>渲染,View会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;
(7)返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

5. 核心角色

DispatcherServlet在web.xml中的部署描述,从而拦截请求到Spring Web MVC。
HandlerMapping的配置,从而将请求映射到处理器。
HandlerAdapter的配置,从而支持多种类型的处理器。
ViewResolver的配置,从而将逻辑视图名解析为具体视图技术。
Controller的配置,从而进行功能处理。

6. 优势

(1)清晰的角色划分:控制器(controller)、验证器(validator)、命令对象(command obect)、表单对象(form object)、模型对象(model object)、Servlet分发器(DispatcherServlet)、处理器映射(handler mapping)、试图解析器(view resoler)等等。每一个角色都可以由一个专门的对象来实现。
(2)强大而直接的配置方式:将框架类和应用程序累都能作为JavaBean配置,支持跨多个context的引用,例如,在web控制器中对业务对象和验证器validator)的引用。
(3)可适配、非侵入:可以根据不同的应用场景,选择何事的控制器子类(simple型、command型、from型、wizard型、multi-action型或者自定义),而不是一个单一控制器(比如Action/ActionForm)继承。
(4)可重用的业务代码:可以使用现有的业务对象作为命令或表单对象,而不需要去扩展某个特定框架的基类。
(5)可定制的绑定(binding)和验证(validation):比如将类型不匹配作为应用级的验证错误,这可以保证错误的值。再比如本地化的日期和数字绑定等等。在其他某些框架中,你只能使用字符串表单对象,需要手动解析它并转换到业务对象。
(6)可定制的handler mapping和view resolution:spring提供从最简单的URL映射,到复杂的、专用的定制策略。与某些web MVC框架强制开发人员使用单一特定技术相比,Spring显得更加灵活。
(7)灵活的model转换:在Springweb框架中,使用基于Map的键/值对来达到轻易的与各种视图技术集成。
(8)可定制的本地化和主题(theme)解析:支持在JSP中可选择地使用Spring标签库、支持JSTL、支持Velocity(不需要额外的中间层)等等。
(9)简单而强大的JSP标签库(Spring Tag Library):支持包括诸如数据绑定和主题(theme)之类的许多功能。他提供在标记方面的最大灵活性。
(10)JSP表单标签库:在Spring2.0中引入的表单标签库,使用在JSP编写表单更加容易。
(11)Spring Bean的生命周期可以被限制在当前的HTTp Request或者HTTp Session。准确的说,这并非Spring MVC框架本身特性,而应归属于Spring MVC使用的WebApplicationContext容器。

到此已经简单的了解了SpringMVC,一开始很难理解,接触项目后再回头看就好了。

SpringMVC自学系列(1)——入门了解相关推荐

  1. 自学Java怎样入门

    自学Java怎样入门 今天在知乎上看到前辈的一篇文章,写得非常之好,感觉自己都虚度光阴了,作为小菜还得向大神学习. 作者:得闲野鹤 链接:https://www.zhihu.com/question/ ...

  2. SpringMVC 框架系列之组件概述与配置详解

    在上一篇文章 SpringMVC 框架系列之初识与入门实例 的实例中,我们已经知道,SpringMVC 框架是一个 web 层的框架,本篇文章就详细解释一下 SpringMVC 框架具体文件的配置以及 ...

  3. Go语言自学系列 | golang标准库bufio

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  4. Go语言自学系列 | go语言数字类型

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  5. Go语言自学系列 | golang中的if语句

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  6. Go语言自学系列 | golang开发工具

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  7. Go语言自学系列 | golang标准库os模块 - File文件读操作

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

  8. Go语言自学系列 | 汇总

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,请移步至知乎网站,谢 ...

  9. Go语言自学系列 | golang函数的参数

    视频来源:B站<golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]> 一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持! ...

最新文章

  1. 想法2: 充电性冰袋
  2. Windwos 08R2_DNS+AD安装图文
  3. C# Winform程序中使用TeeChart实现简单的图表展示
  4. idea配置远程服务器实现远程编辑文件及ssh连接
  5. lisp如何将度分秒转换为弧度_地学中常用度、度分、度分秒,弧度、角度在MATLAB中的转换...
  6. 阿里云mariadb无法启动问题
  7. JAVA实验报告九异常处理_JAVA实验报告_Java异常处理
  8. iphone固件降级_iPhone无法开机怎么办?三种快速维修方法
  9. 重装系统计算机无法启动,手把手教你电脑无法开机怎么重装系统
  10. 用代码证明自己闲的蛋疼(三)——回溯法做数独
  11. [转载] python3.6版本生成的python脚本如何打包为可独立执行的exe程序
  12. 8款超好用的SVG编辑工具用起来
  13. PLINK-GWAS学习9------对于二元数据的关联分析
  14. android 应用APK使用系统APK
  15. matlab2014如何获得hostid,关于如何修改hostid的问题
  16. matlab寻找峰值的函数,Matlab---寻找峰值函数
  17. JS获取下个月的第一天和最后一天
  18. 猫咪APP 服务器不稳定,猫咪app网速很慢(猫咪网速很差怎么解决)
  19. git 如何把develop分支代码合并到master主分支
  20. Postman如何携带token——Bearer Token和Headers

热门文章

  1. nodejs项目实例拼车租车平台
  2. 无人驾驶掀起车载摄像头新风潮
  3. 桌面 html 自定义,【极简壁纸 - 技术分享】html js自定义右键菜单方法
  4. 分享一个诺基亚短信生成器
  5. 固态硬盘寿命计算公式
  6. 想学平面设计应该从哪开始入门
  7. 基于深度学习的影像深度重建综述
  8. 使用iText生成PDF文件中创建表格
  9. 服务器配置要考虑哪些服务器主机配置介绍
  10. 在ti官网上找相关芯片的例程