springMVC课程笔记(一)springMVC架构原理分析
一、springMVC架构原理分析
1、先搞清楚什么是springMVC:
其实springMVC是spring框架中的一个模块,springMVC和spring无需通过中间整合层整合,SpringMVC是一个基于MVC的web框架。
来一张图直观展示下:
2、顺便普及下MVC的知识:MVC是一种设计模式,是前辈们总结出的一些优秀的代码管理使用经验。
MVC的 执行顺序如下图所示:(MVC在B/S系统下的执行顺序)
3、springMVC框架剖析
核心架构的具体流程步骤如下:(内容摘自:http://jinnianshilongnian.iteye.com/blog/1594806)
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返回响应给用户,到此一个流程结束。
根据上图自己总结执行步骤:
第一步:发起请求到前端控制器DispatcherServlet;
第二步:前端控制器请求HandlerMapping 查找Handler,通过xml配置或注解进行查找Handler;
第三步:处理器映射器HandleMapping向前端控制器返回Handle;
第四步:前端控制器调用处理器适配器去执行handle;
第五步:处理器适配器去执行handle;
第六步:handle执行完成,给处理器适配器返回ModelAndView;
第七步:处理器适配器向前端控制器返回一个ModelAndView,ModelAndView是springMVC框架的一个底层对象,包括model和view;
第八步:前端控制器请求视图解析器去进行试图解析,根据逻辑视图名解析成真正的视图;
第九步:视图解析器向前端控制器返回view;
第十步:前端控制器进行试图渲染,视图渲染将模型数据(ModelAndView中的数据)填充到request域;
第十一步:前端控制器向用户相应结果;
用到的组件:
1、前端控制器DispatcherServlet,作用是接受请求、相应结果,相对于转发器;减少了其他组件的耦合;
2、处理器映射器HandlerMapping ,作用是根据请求的URL查找handle;
3、处理器适配器HandleAdapter,作用是按照特定的规则(HandleAdapter要求的规则)去执行handle;
4、控制器handle又称为controller,作用是真正处理用户的请求;编写handle时要按照HandleAdapter的要求去做,这样适配器才能正确的执行handle;
4、视图解析器View resolver,作用是进行试图解析,根据逻辑视图名解析成真正的视图(view);
5、视图view,view是一个接口,实现类支持不同的view类型(jsp、freemarker、PDF。。。)
总结:只有3和5这俩个组件需要程序员编写,其他都是有xml配置文件配置(框架的牛逼性);
springmvc 一个请求从开始到结束的运行流程分析,如下图所示:
springMVC课程笔记(一)springMVC架构原理分析的更多相关文章
- springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定
springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...
- springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定
springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...
- springmvc学习笔记(10)-springmvc注解开发之商品改动功能
springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...
- SpringMvc框架MockMvc单元测试注解及其原理分析
来源:https://www.yoodb.com/ 首先简单介绍一下Spring,它是一个轻量级开源框架,简单的来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开 ...
- Struts2 学习笔记18 拦截器原理分析
我们来进行一下拦截器的原理分析,从Struts2的源代码开始,然后我们手动创建一个项目进行模拟.(源代码需要下载然后添加好才能看到)我们可以用Debug来读源码. 从doFilter开始执行,流程如图 ...
- [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.
前言:今天来回顾下SpringMVC的开发原理, 使用图文并茂的方式 来解析其中的内幕, 我相信懂了其中的运行机制后, 对于面试中SpringMVC大家都可以说so easy了. 一, 图示法 第二张 ...
- springMVC学习笔记(一)-----springMVC原理
一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...
- springMVC课程笔记(二)springMVC组件配置
1.springMVC的DispatcherServlet前段控制器配置,如下图所示在web.xml中配置如下内容: 2.在spring配置文件中,配置处理器适配器HandlerAdapter和映射器 ...
- SpringMVC(关于HandlerMapping执行流程原理分析)
请求过来先碰见中央调度器(前端调度器) //Determine handler for the current request; 对当前请求决定交给哪个handler, 当前请求地址过来 处理器执行链 ...
随机推荐
- VBA学习资料分享-2
想利用VBA自动创建/发送OUTLOOK邮件,可以借助MailItem的Body属性或HTMLBody属性,代码模板如下: Dim objOutlook As Outlook.Application ...
- 华为机试题:仿LISP
package com.nowcoder.huawei; import java.util.*; public class LISP { // 只通过80% // (+ (* 2 3) (^ 4)) ...
- C++ DLL导出的两种方式和链接的两种方式
第一种 导出方式 extern "C" _declspec(dllexport) int Plus(int x, int y); extern "C" _dec ...
- 嵌入式Linux应用开发完全手册读书笔记——常用的命令
嵌入式开发中常用的命令 grep命令 用法:grep [option] PATTERN [FILE...] 例如: 在内核目录下查找包含"request_irq"字样的文件 gre ...
- 如何处理请求返回的二进制数据流转化成xlsx文件?
/* fileName : 文件名 res:二进制流 */ function getOutExcel(fileName, res) { let blob = new Blob([res], { typ ...
- 表单重置时 <input type=“hidden”> 隐藏域不可被重置
可封装全局样式 .hide{ display:none; } 用 <input type="text" class="hide"/> 替代
- Redis入门(二)——基本操作
Redis作为独立的服务端,在Java中去操作redis需要通过Redis提供的jar z在这里特别申明,除了基本数据以及String外,其余对象,要想写入redis,必须序列化(即使是对象也要实现序 ...
- DAG及拓扑排序
1.有向无环图和拓扑排序 有向无环图(Directed Acyclic Graph,简称DAG):拓扑排序指的对DAG一个有序的线性排列.即每次选出一个没有入度的节点,然后输出该点并将节点和其相关连的 ...
- 浅析servlet
目录 Servlet简介 Servlet定义 Servlet的特点 Servlet底层原理 Servlet GenericServlet HttpServlet Servlet的生命周期 Servle ...
- 微信小程序实现连接蓝牙设备跑步APP
背景 微信小程序兴起,有变成超级APP的趋势,通过微信提供的小程序api,可以通过微信调用到手机原生的支持. 目标 通过微信小程序实现来实现跑步类App的功能. 需求分析 跑步类App需要的两个核心的 ...