要学习一项技术,首先要知道, 它是什么, 为什么要用它 , 它由哪些东西组成, 每个东西是干什么的, 它们怎么综合在一起的

参考博客: 平凡希: https://www.cnblogs.com/xiaoxi/p/6164383.html

幸运草铃兰: https://blog.csdn.net/xingyuncaojun/article/details/80633495

参考书籍:《JavaEE 互联网轻量级框架整合开发 SSM框架和Redis实现》

一.SpringMVC是什么?

SpringMVC是Spring框架后续开发的一个模块, 它是一个基于MVC模式的开发框架.

早期的MVC由Servlet, JavaBean, JSP组成, 用户请求先到达Servlet, Servlet作为控制器接收请求,然后调度JavaBean来读写数据库的数据,最后将处理结果放在JSP中,返还展现给用户.

这样的模式就是MVC模式, Servlet扮演Controller(控制器)角色, JavaBean扮演Model(模型)角色, JSP扮演View(视图)角色. 这样设计的好处就是, 前后端有了一定的分离, 前端与后端只有一定的数据交流, 减少了一定的耦合(依然有耦合), 而控制器和模型的分离,使得大量代码有了重用的可能.

传统的MVC框架还是存在着一定的耦合性, 比如模型层夹杂着业务层和数据库的访问, 所以SpringMVC把传统的模型层拆分为了:Service(业务层)和DAO(数据访问层). 在Service下可以通过Spring的声明式事务操作数据访问层, 而在业务层上还允许我们访问NoSQL,这样能满足现代互联网系统的性能.

SpringMVC最大的特点是结构松散, 耦合度较低, 对各个模块进行了分离,使得各自负责各自的逻辑.

二.为什么要用SpringMVC?

SpringMVC的特点已经在上面描述过了, 就是在传统MVC模式下,将Model层拆分为 Service和DAO. 其最大的特色就是结构松散, 比如几乎可以在SpringMVC中使用各类视图, 包括JSON,JSP,XML,PDF等,所以它能满足手机端,页面端和平板电脑端的各类请求.

SpringMVC和Struts对比:

①SpirngMVC的入口是Servlet, Struts是Filter

②SpringMVC是基于方法设计的,而Struts是基于类设计的,每次发一次请求都会实例一个Action

③SpringMVC更加简洁,开发效率比Struts高, 能够处理ajax请求

三.SpringMVC的组件与流程

1.组件:

①核心控制器 DispatcherServlet :

作用: 接收请求, 响应结果 , 降低组件之间的耦合度

SpringMVC框架是围绕DispatcherServlet工作的, 它是整个流程控制的中心. 它负责协调和组织不同组件完成请求处理并返回响应工作.

②处理器映射器 HandlerMapping:

作用: 根据请求路径找到相应的处理器

HandlerMapping根据用户的请求找到对应的Handler(它可能是一个Controller方法, 也可能是一个Controller对象,Servlet对象 或者 HttpRequestHandler对象), 并将Handler与一堆HandlerInterceptor(拦截器)封装到HandlerExecutionChain对象中

SpringMVC可以根据不同的方式来进行处理器的映射 , 如:配置文件方式, 注解方式, 实现接口方式等.

③处理器适配器 HandlerAdapter:

作用: 根据Handler找到支持它的HandlerAdapter, 然后通过这个HandlerAdapter来执行这个Handler和其拦截器, 最终得到ModelAndView对象.

就像上面的Handler种类说的, 根据Handler的不同,适配的HandlerAdapter的种类也不同. 他可能是SimpleControllerHandlerAdapter(Controller类型的Handler), 也可能是SimpleServletHandlerAdapter(Serlvet类型的Hand;er), 或者HttpRequestHandlerAdapter(HttpRequestHandler类型的Handler)

④视图解析器 ViewResolver :

作用:进行视图解析, 把一个逻辑上的视图名称解析为一个真正的视图(View对象)

ViewResolver负责将处理结果生成View视图, ViewResolver首先根据逻辑视图名称解析成物理视图名即具体的页面地址, 再生成View视图对象, 最后对View进行渲染将处理结果通过页面展示给用户. SpringMVC提供了很多View视图类型, 包括:jstlView , freemarkerView, pdfView等.

⑤处理器 Handler :

作用: 处理具体的用户请求

可以理解为广义上的Controller, 和在HandlerAdapter中所描述的一样, Handler有很多种,它可能是一个Controller的方法, 一个Controller, 一个Servlet, 一个HttpRequestHandler, 但是它们的作用都是为了处理具体的用户请求.

⑥视图 View :

作用: View接口的主要作用是用于处理视图, 然后返回给客户端.

2.组件控制流程:

图片转自:https://www.cnblogs.com/xiaoxi/p/6164383.html

流程简介:

1.用户发送请求>>>>>DispatcherServlet:

DispatcherServlet受到请求后,自己不做处理,而是首先委托HandlerMapping进行第一步处理,自己只作为统一访问点, 进行全局的流程控制

2.DispatcherServlet>>>>>>>HandlerMapping:

HandlerMapping根据请求查找对应的Handler, 并将Handler对象和其多个HandlerInterceptor(拦截器)对象包装为一个HandlerExecutionChain(执行链)对象 并返回给DispatcherServlet

3.DispatcherServlet>>>>>>>HandlerAdapter:

HandlerAdapter根据Handler的种类,找到支持对应类型的适配器,如SimpleControllerHandlerAdapter支持Controller类型的Handler, 这样Handler就可以在适合的运行环境下运行. 对应类型HandlerAdapter会执行对应的Handler, 以及执行目标方法前后需要执行的拦截器. 最终完成功能处理, 并返回一个ModelAndView对象到DispatcherServlet;

4.DispatcherServlet>>>>>>>ViewResolver:

根据ModelAndView的逻辑视图名, ViewResolver将其解析为具体的View对象.

5.View >>>>> 渲染

View对象会根据传进来的Model模型数据进行渲染,此处的Model实际是一个Map数据结构,因此很容易支持其他视图技术;

6.返回控制权给DispatcherServlet,由DispatcherServlet返回响应给用户,到此一个流程结束。

SpringMVC-简单总结的更多相关文章

  1. SpringMVC简单配置

    SpringMVC简单配置 一.eclipse安装Spring插件 打开help下的Install New Software 点击add,location中输入http://dist.springso ...

  2. SpringMVC简单入门

    SpringMVC简单入门 与大家分享一下最近对SpringMVC的学习,希望本文章能对大家有所帮助. 首先什么是SpringMVC? Spring 为展现层提供的基于MVC设计理念的优秀的Web框架 ...

  3. SpringMVC简单实例(看起来有用)

    SpringMVC简单实例(看起来有用) 参考: SpringMVC 基础教程 简单入门实例 - CSDN博客http://blog.csdn.net/swingpyzf/article/detail ...

  4. SpringMVC简单使用教程

    一.SpringMVC简单入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...

  5. eclipse建立springMVC 简单项目

    http://jinnianshilongnian.iteye.com/blog/1594806 如何通过eclipse建立springMVC的简单项目,现在简单介绍一下. 工具/原料   eclip ...

  6. 基于注解的SpringMVC简单介绍

    SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...

  7. Intellij IDEA +MAVEN+Jetty实现SpringMVC简单查询功能

    利用 Intellij IDEA +MAVEN+Jetty实现SpringMVC读取数据库数据并显示在页面上的简单功能 1 新建maven项目,配置pom.xml <project xmlns= ...

  8. SpringMvc简单实例

    Spring MVC应用一般包括4个步骤: (1)配置web.xml,指定业务层对应的spring配置文件,定义DispatcherServlet; (2)编写处理请求的控制器 (3)编写视图对象,例 ...

  9. springMVC 简单事例

    本帖最后由 悲观主义者一枚 于 2015-1-31 17:55 编辑 使用SpringMvc开发Android WebService入门教程1.首先大家先创建一个JavaWeb项目2.然后加入Spri ...

  10. SpringMVC学习总结(四)——基于注解的SpringMVC简单介绍

    SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是 DispatcherServlet,DispatcherServlet负责转发每一个Request ...

随机推荐

  1. libgdx学习记录2——文字显示BitmapFont

    libgdx对中文支持不是太好,主要通过Hireo和ttf字库两种方式实现.本文简单介绍最基本的bitmapfont的用法. 代码如下: package com.fxb.newtest; import ...

  2. iview 将table的selection多选变单选方法

    相信很多使用iview的朋友,在用到table,都会遇到需要使用selection的场景,但是总会有那么一个产品汪,觉得iview的单选效果不好,非要用selection的来做单选,那么下面这个方法就 ...

  3. springboot开启事务支持时报代理错误

    问题:The bean 'xxx' could not be injected as a 'com.github.service.xx' because it is a JDK dynamic pro ...

  4. Django(三) ORM 数据库操作

    大纲 一.DjangoORM 创建基本类型及生成数据库表结构 1.简介 2.创建数据库 表结构 二.Django ORM基本增删改查 1.表数据增删改查 2.表结构修改 三.Django ORM 字段 ...

  5. styled-components解决全局样式'injectGlobal' 废除的问题

    最新版的 styled-components v4 已经将原有的 injectGlobal() 方法替换成了 createGlobalStyle() ,而且用法也和之前的 injectGlobal 方 ...

  6. Base 64 & decodeURIComponent

    Base 64 & decodeURIComponent js btoa() & atob() let obj = [{"key":"q",&q ...

  7. 2019-04-04 Mybatis学习知识点

    1. 比较#和$的区别 #是占位符?,$是字符串拼接.因此使用$的时候,如果参数是字符串类型,那么要使用引号 尽量使用#而不是$ 当参数表示表名或列名的时候,只能使用$ 2. 多参数时候 配置文件中使 ...

  8. Vjudge Code

    Stylus @-moz-document url-prefix("https://cn.vjudge.net/"), url-prefix("https://vjudg ...

  9. python将PNG格式的图片转化成为jpg

    """ 先来说一下jpg图片和png图片的区别 jpg格式:是有损图片压缩类型,可用最少的磁盘空间得到较好的图像质量 png格式:不是压缩性,能保存透明等图 " ...

  10. 实用HTML5游戏资源

    awesome games Web-First游戏引擎协同构建令人惊叹的HTML5可视化和游戏 HTML5游戏开发者和技术传播者,华沙,波兰- @EnclaveGames独立工作室的创始人   代表作 ...