一、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架构原理分析的更多相关文章

  1. springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定

    springmvc学习笔记(12)-springmvc注解开发之包装类型參数绑定 标签: springmvc springmvc学习笔记12-springmvc注解开发之包装类型參数绑定 需求 实现方 ...

  2. springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定

    springmvc学习笔记(13)-springmvc注解开发之集合类型參数绑定 标签: springmvc springmvc学习笔记13-springmvc注解开发之集合类型參数绑定 数组绑定 需 ...

  3. springmvc学习笔记(10)-springmvc注解开发之商品改动功能

    springmvc学习笔记(10)-springmvc注解开发之商品改动功能 标签: springmvc springmvc学习笔记10-springmvc注解开发之商品改动功能 需求 开发mappe ...

  4. SpringMvc框架MockMvc单元测试注解及其原理分析

    来源:https://www.yoodb.com/ 首先简单介绍一下Spring,它是一个轻量级开源框架,简单的来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开 ...

  5. Struts2 学习笔记18 拦截器原理分析

    我们来进行一下拦截器的原理分析,从Struts2的源代码开始,然后我们手动创建一个项目进行模拟.(源代码需要下载然后添加好才能看到)我们可以用Debug来读源码. 从doFilter开始执行,流程如图 ...

  6. [SpringMVC]SpringMVC学习笔记一: springmvc原理及实例解析.

    前言:今天来回顾下SpringMVC的开发原理, 使用图文并茂的方式 来解析其中的内幕, 我相信懂了其中的运行机制后, 对于面试中SpringMVC大家都可以说so easy了. 一, 图示法 第二张 ...

  7. springMVC学习笔记(一)-----springMVC原理

    一.什么是springmvc springMVC是spring框架的一个模块,springMVC和spring无需通过中间整合层进行开发. springMVC是一个基于mvc的web框架. Sprin ...

  8. springMVC课程笔记(二)springMVC组件配置

    1.springMVC的DispatcherServlet前段控制器配置,如下图所示在web.xml中配置如下内容: 2.在spring配置文件中,配置处理器适配器HandlerAdapter和映射器 ...

  9. SpringMVC(关于HandlerMapping执行流程原理分析)

    请求过来先碰见中央调度器(前端调度器) //Determine handler for the current request; 对当前请求决定交给哪个handler, 当前请求地址过来 处理器执行链 ...

随机推荐

  1. SvcUtil.exe工具生成客户端代理类

    1.以管理员身份运行vs下命令工具: 2.运行代码示例:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>svcutil http: ...

  2. 关于页面数据未保存改变路由(beforeunload,beforeRouteLeave)

    一下内容为笔者个人理解,如有出入还请大佬指出不胜感激 页面有数据未保存,用户离开页面分为两种 1 . 直接关闭浏览器标签 或者点击浏览器后退按钮 离开当前页面 2. 在页面内改变路由,或则刷新页面(不 ...

  3. 页面加载完毕后调用js方法进行布局操控 已实验

    页面加载完毕后调用js方法进行布局操控 已实验 $(function(){ var check1 = $("[id$=SMS]").is(':checked'); var bl=$ ...

  4. java web开发跨域问题

    分布式环境,前后端分离背景下跨域问题 1.1 设置页面document.domain去把2个页面之间的跨域交互统一 一级域名相同的情况下 调用者和页面提供者进行一个协调 页面提供者要在document ...

  5. 30K以上的高薪Java程序员所需技能大汇总

    总所周知,Java是目前使用最为广泛的网络编程语言之一. 它具有简单,面向对象,稳定,与平台无关,解释型,多线程,动态等特点. 一般的JAVA程序员或许只需知道一些JAVA的语法结构就可以应付了.但要 ...

  6. RobHess的SIFT环境配置

    平台:win10 x64 +VS 2015专业版 +opencv-2.4.11 + gtk_-bundle_2.24.10_win32 参考博客:https://www.cnblogs.com/cql ...

  7. 前端使用 node-gyp 构建 Native Addon

    前端轮子千千万, 但还是有些瓶颈, 公司需要在前端调用自有 tcp 协议, 该协议只有 c++ 的封装版本. 领导希望可以直接调该模块, 不要重复造轮子. 实话说我对 C 还有点印象, 毕竟也是有二级 ...

  8. 修改office2019安装位置,自定义安装需要的功能

    更新:2019.5.30楼主本人本次重装系统后装office2019再次测试,没有任何问题,没认真看文章,自己胡乱一同操作,导致各种问题的,出了错就就瞎评论,说博主误导人,对你们这种人就是呵呵.左转不 ...

  9. E - GCD HDU - 2588

    The greatest common divisor GCD(a,b) of two positive integers a and b,sometimes written (a,b),is the ...

  10. Angular Multiple HTTP Requests with RxJS

    原文:https://coryrylan.com/blog/angular-multiple-http-requests-with-rxjs ----------------------------- ...