SpringMVC 的运行原理
0. 灵魂的拷问
问:SpringMVC 是什么?它有什么作用?
答:SpringMVC 的全称是 Spring Web Model-View-Controller,它是 Spring Framework 的其中一个模块,是Spring的一个子框架,拥有 Spring 的特性,如依赖注入等特性。SpringMVC 实现了 Web 模型中的 MVC 框架模式,通过把 Model,View,Controller 分离,把较为复杂的 web 应用分成逻辑清晰的几部分。这种种分层工作的办法简化了开发,更不易出错。让组内开发人员之间的配合更加方便。
问:SpringMVC 的运行流程是什么?
答:SpringMVC 的运行流程主要分为以下步骤(附图):

图1 SpringMVC 的运行架构示意图
(1) 客户端向服务端发送 url 请求;
(2) 服务端接到 url 请求,被 DispatcherServlet 匹配 的 url 会由 DispatcherServlet 处理,根据传入的逻辑 uri 调用 HandlerMapping 进行处理器的映射匹配,匹配成功返回一个包含了处理器信息(即 Controller)和拦截器(即 Intercepter)信息的 HandleExecutionChain 对象,匹配失败返回 null;
(3) DispatcherServlet 根据返回的 HEC 调用可用的 HandlerAdapter 执行 Controller 的方法,执行完毕向 DispatcherServlet 返回一个 ModelAndView 对象,该对象分为 Model 和 View 两个部分,其中 Model 是数据的 Map(即键-值对集合),包含了需要渲染的数据信息;View 是页面的模板,指明了数据渲染的格式。ModelAndView 不能直接渲染并返回浏览器,还需要进一步的解析;
(4) DispatcherServlet 得到 ModelAndView 后,调用 ViewResolver 进行视图解析得到处理后的 View 对象,最后 DispatcherServlet 把 View 对象渲染成页面视图传递给客户端浏览器。
问:我觉得你说的这些太浅了,能不能给点直击灵魂的介绍?
答:请移步 https://stackify.com/spring-mvc/ 去获取更多惊喜。
SpringMVC 的运行原理的更多相关文章
- Springmvc的运行原理 SpringMvc的优点
SpringMVC框架运行原理 1:客户端发送请求到前端控制器(DispatcherServlet),前端控制器根据请求信息(url),查询一个或多个HandlerMapping, 前端控制器,来决定 ...
- SpringMVC运行原理浅析
SpringMVC是主流的J2EEWEB层框架,SpringMVC是Sping家族中一个重要的产品.下面给出SpringMVC的运行原理.springmvc和spring无需通过中间层进行整合,spr ...
- SpringMVC运行原理
一.SpringMVC运行原理图 二.相关接口解释 DispatcherServlet接口: Spring提供的前端控制器,所有的请求都有经过它来统一分发.在DispatcherServlet将请 ...
- SpringMvc拦截器运行原理。
首先,先简单的说一下怎么配置SpringMvc的拦截器. 分两步,第一步先定义一个类,实现HandlerInterceptor接口. import javax.servlet.http.HttpSer ...
- springMVC源码分析--@ModelAttribute使用及运行原理
这一篇博客我们简单的介绍一下ModelAttribute的使用和运行原理. 1.首先@ModelAttribute是使用在方法或者上的,当使用在方法上时其作用于本身所在的Controller,在访问C ...
- springboot深入学习(二)-----profile配置、运行原理、web开发
一.profile配置 通常企业级应用都会区分开发环境.测试环境以及生产环境等等.spring提供了全局profile配置的方式,使得在不同环境下使用不同的applicaiton.properties ...
- SpringMVC的工作原理及MVC设计模式
SpringMVC的工作原理: 1.当用户在浏览器中点击一个链接或者提交一个表单时,那么就会产生一个请求(request).这个请求会携带用户请求的信息,离开浏览器. 2.这个请求会首先到达Sprin ...
- SpringMVC架构实现原理
SpringMVC架构实现原理 一.SpringMVC介绍 Spring mvc是一个基于mvc的web框架.其中核心类是DispatcherServlet,它是一个Servlet,顶层是实现的Ser ...
- iis6.0与asp.net的运行原理
这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客,学的有点零零散散,花了好长时间做了一个小结(虽然文字不多,但也花了不少时间呢),鄙人不才,难免有理解不道的地方,还望前辈们不吝赐教 ...
随机推荐
- C#轻量级通通讯组件StriveEngine —— C/S通信开源demo(2) —— 使用二进制协议 (附源码)
前段时间,有几个研究ESFramework通信框架的朋友对我说,ESFramework有点庞大,对于他们目前的项目来说有点“杀鸡用牛刀”的意思,因为他们的项目不需要文件传送.不需要P2P.不存在好友关 ...
- eclipse安装及配置pydev
1.首先安装jre,这里记住jre的安装目录,32位操作系统默认安装在“C:\Program Files (x86)\Java\jre1.8.0_91” 2.配置eclipse,这里使用的是压缩包不需 ...
- 【sql注入】简单实现二次注入
[sql注入]简单实现二次注入 本文转自:i春秋社区 测试代码1:内容详情页面 [PHP] 纯文本查看 复制代码 01 02 03 04 05 06 07 08 09 10 11 12 13 14 1 ...
- ubuntu 16.04 下安装动态链接库方法
一般先使用ldd 来查看该应用程序缺少什么东西,然后,再根据sudo apt install XXX 去安装相应的动态库. 假如没有对应的库,可以使用: sudo ln -s /usr/lib/lib ...
- 运维笔记--docker高效查看后台日志
场景描述: 应用程序运行在 Docker环境中,经常使用的查看后台日志的命令是:docker attach 容器名该命令优点:实时输出:不足之处:日志大量输出的时候,屏幕一闪而过,不便于调试,并且有一 ...
- conda添加多个版本的python
在conda下,新添加一个python环境,如下再添加一个python3.6conda create --name py36 python=3.6然后通过source activate py36来激活 ...
- Ocelot简易教程(四)之请求聚合以及服务发现
上篇文章给大家讲解了Ocelot的一些特性并对路由进行了详细的介绍,今天呢就大家一起来学习下Ocelot的请求聚合以及服务发现功能.希望能对大家有所帮助. 作者:依乐祝 原文地址:https://ww ...
- logstash笔记(二)——grok之match
官方文档: https://www.elastic.co/guide/en/logstash/current/plugins-filters-grok.html 基本语法: %{SYNTAX:SEMA ...
- app 性能
Android App优化之性能分析工具 https://www.jianshu.com/p/da2a4bfcba68 -------------- 系列文: 背景:Android App优化, 要怎 ...
- android 错误处理思维随笔
错误信息:An error occurred while preparing SDK package Android SDK Build-Tools 26.0.1 错误分析:大概率更新超时:小概率上次 ...