SpringMVC-简单总结
要学习一项技术,首先要知道, 它是什么, 为什么要用它 , 它由哪些东西组成, 每个东西是干什么的, 它们怎么综合在一起的
参考博客: 平凡希: 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-简单总结的更多相关文章
- SpringMVC简单配置
SpringMVC简单配置 一.eclipse安装Spring插件 打开help下的Install New Software 点击add,location中输入http://dist.springso ...
- SpringMVC简单入门
SpringMVC简单入门 与大家分享一下最近对SpringMVC的学习,希望本文章能对大家有所帮助. 首先什么是SpringMVC? Spring 为展现层提供的基于MVC设计理念的优秀的Web框架 ...
- SpringMVC简单实例(看起来有用)
SpringMVC简单实例(看起来有用) 参考: SpringMVC 基础教程 简单入门实例 - CSDN博客http://blog.csdn.net/swingpyzf/article/detail ...
- SpringMVC简单使用教程
一.SpringMVC简单入门,创建一个HelloWorld程序 1.首先,导入SpringMVC需要的jar包. 2.添加Web.xml配置文件中关于SpringMVC的配置 <!--conf ...
- eclipse建立springMVC 简单项目
http://jinnianshilongnian.iteye.com/blog/1594806 如何通过eclipse建立springMVC的简单项目,现在简单介绍一下. 工具/原料 eclip ...
- 基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请 ...
- Intellij IDEA +MAVEN+Jetty实现SpringMVC简单查询功能
利用 Intellij IDEA +MAVEN+Jetty实现SpringMVC读取数据库数据并显示在页面上的简单功能 1 新建maven项目,配置pom.xml <project xmlns= ...
- SpringMvc简单实例
Spring MVC应用一般包括4个步骤: (1)配置web.xml,指定业务层对应的spring配置文件,定义DispatcherServlet; (2)编写处理请求的控制器 (3)编写视图对象,例 ...
- springMVC 简单事例
本帖最后由 悲观主义者一枚 于 2015-1-31 17:55 编辑 使用SpringMvc开发Android WebService入门教程1.首先大家先创建一个JavaWeb项目2.然后加入Spri ...
- SpringMVC学习总结(四)——基于注解的SpringMVC简单介绍
SpringMVC是一个基于DispatcherServlet的MVC框架,每一个请求最先访问的都是 DispatcherServlet,DispatcherServlet负责转发每一个Request ...
随机推荐
- nginx学习路线
nginx:熟透,配置.rewrite.黑白名单.脚本.代理.优化等
- Java异步NIO框架Netty实现高性能高并发
原文地址:http://blog.csdn.net/opengl_es/article/details/40979371?utm_source=tuicool&utm_medium=refer ...
- QMainWindow class
Help on class QMainWindow in module PyQt5.QtWidgets: class QMainWindow(QWidget) | QMainWindow(pare ...
- .NET方法无限传参数技术
是否有这样的需求在创建函数时参数个数不固定,又不想使用重载,那么下面这个技术就比较适合. 相信你一定见过下面这的代码: ); Format 就是string的一个函数,第一个参数是固定的字符串类型,那 ...
- C#字符串和ASCII码的转换
//字符转ASCII码: public static int Asc(string character) { if (character.Length == 1) { System.Text.ASCI ...
- react-navigation使用之嵌套和跳转
1. 新版react-native已经将react-navigation作为官方版本发布,基础Demo可以从官方网站获得,比较困扰的问题是组件的嵌套和第二.第三页面的跳转. 2. 组件嵌套问题: 要在 ...
- 如何使用django操作数据库,向原有表中添加新的字段信息并建立一个多对多的关系?
(注:本人用的pycharm开发工具) 1.在你要添加新字段的app的 models.py 文件中添加需要新增的字段(book表新增authors字段并和author建立多对多关系,author表新增 ...
- ASP.NET Core 2.x On Ubuntu
安装.NET Core 首先需要安装.NET Core Runtime: https://www.microsoft.com/net/download 点击之后,根据您的Linux发行版不同,选择相应 ...
- (简单)华为Nova青春 WAS-AL00的USB调试模式在哪里开启的流程
就在我们使用Pc接通安卓手机的时候,如果手机没有开启usb开发者调试模式,Pc则无办法成功检测到我们的手机,在一些情况下,我们使用的一些功能较强的app好比之前我们使用的一个app引号精灵,老版本就需 ...
- django rest framework authentication
身份验证 身份验证是将传入请求与一组识别凭证(例如请求的用户或其签名的令牌)相关联的机制.然后,权限和限制策略可以使用这些凭据来确定请求是否应该被允许. REST framework 提供了许多开箱即 ...