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

参考博客: 平凡希: 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. 最新 robot framework安装

    相信大家对robot framework并不陌生,它是一个基于Python语言,用于验收测试和验收测试驱动开发(ATDD)的通用测试自动化框架=,提供了一套特定的语法,并且有非常丰富的测试库. Pyt ...

  2. js创建对象,放进js集合

    var list=[]; for (var i=0;i<nodes.length;i++){ if(nodes[i].type=='user'){ person=new Object(); pe ...

  3. Python支付宝在线支付API

    一.蚂蚁金服开发平台申请测试账号 a. 登陆蚂蚁金服开放平台https://open.alipay.com/platform/manageHome.htm,在“开发中心”—“研发服务”下拉处选择沙箱作 ...

  4. 启用shopt 选项实现不使用 CD 命令进入目录/文件夹

    众所周知,如果没有 cd 命令,我们无法 Linux 中切换目录.这个没错,但我们有一个名为 shopt 的 Linux 内置命令能帮助我们解决这个问题. shopt 是一个 shell 内置命令,用 ...

  5. 我对DFS的理解

    我对DFS的理解 [何为DFS] 深度优先搜索(Depth-First-Search),简称DFS.是一种常见搜索算法.其方法是从原点不断一条路扩散,当无路可走时回退来走下一条路,直至找到目标或遍历. ...

  6. 使用redis可能出现的问题

    1)缓存与数据库双写不一致 2)缓存雪崩 3)缓存穿透 由于缓存中不存在某个key,所有的请求都会落到数据库上,会对数据库造成很大压力,甚至崩溃 一个简单的方案是将不存在的数据也缓存起来(value值 ...

  7. gRPC源码分析(c++)

    首先需要按照grpc官网上说的办法从github上下载源码,编译,然后跑一跑对应的测试代码.我分析的代码版本为v1.20.0. 在cpp的helloworld例子中,client端,第一个函数是创建c ...

  8. 微信小程序爬坑

    1.app.json配置信息是怎样的? { "pages":[ "pages/页面1/页面1", "pages/页面2/页面2", ], & ...

  9. DAY18、常用模块

    一.random:随机数1.(0,1) 小数:random.random()2.[1,10] 整数:random.randint(1,10)3.[1,10) 整数:random.randrange(1 ...

  10. 买房安全无忧 l 龙光集团与光大银行二手房资金监管战略合作!

    二手房买卖中,担心购房过程中房款交易的安全以致买方不敢先付款.卖方不敢先过户的现象比比皆是.近日,龙光集团与光大银行形成战略合作伙伴,联合推出“二手房交易资金监管”业务,彻底改变了二手房交易的付款模式 ...