浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程
MVC作为WEB项目开发的核心环节,正如三个单词的分解那样,Controller(控制器)将View(视图、用户客户端)与Model(javaBean:封装数据)分开构成了MVC,今天我们浅聊一下SpringMVC的相关组件以及通过源码了解器执行流程
SpringMVC的核心组件 :前端控制器 DispatcherServlet
我们需要先在web.xml里面配置DispatcherServlet,现在我给出两种配置方式。默认以及扩展配置
1. 默认配置方式
使用此种方式配置,springmvc配置文件位于WEB-INF下
① SpringMVC的配置文件默认位于WEB-INF下,默认名称为-servlet.xml
② 设置springMVC的核心控制器所能处理的请求的请求路径
** /:所匹配的请求可以是login或.html或.js或.css方式的请求路径,但是/不能匹配.jsp请求路径的请求**
<!-- 配置SpringMVC的前端控制器,对游览器发送的请求统一进行处理 默认配置如下:-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
2. 扩展方式配置
使用此种配置方式,可以将springmvc配置文件,设置到src/main/resource中
① 可通过init-param标签设置SpringMVC配置文件的位置和名称
② 通过load-on-startup标签设置SpringMVC前端控制器DispatcherServlet的初始化时间
<!-- 配置SpringMVC的前端控制器,对游览器发送的请求统一进行处理 扩展配置如下:-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 通过初始化参数指定SpringMVC配置文件的位置和名称 -->
<init-param>
<!-- contextConfigLocation为固定值 -->
<param-name>contextConfigLocation</param-name>
<!-- 使用classpath:表示从类路径查找配置文件,例如maven工程中的src/main/resources -->
<param-value>classpath:springMVC.xml</param-value>
</init-param>
<!--
作为框架的核心组件,在启动过程中有大量的初始化操作要做
而这些操作放在第一次请求时才执行,会严重影响访问速度
-->
<!-- 通过此标签将启动控制DispatcherServlet的初始化时间提前到服务器启动时 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!--
设置springMVC的前端控制器所能处理的请求的请求路径
/:所匹配的请求可以是login或.html或.js或.css方式的请求路径
但是/不能匹配.jsp请求路径的请求
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
==》 推荐大家使用扩展方式配置SpringMVC
使用扩展方式配置,可以指定其配置文件的位置和名称,更加灵活方便

SpringMVC在执行的时候用到的几个重要组件
HandlerMapping 处理器映射器
① 在SpringMVC中会有很多请求过来,每个请求都需要有一个Handler处理(Controller)
② HandlerMapping的作用便是找到请求向对应的处理器。HandlerAdapter 处理器适配器
HandlerMapping只是解析URL,通过映射找到对应的Controller,但是真正调用Controller层方法的是HandlerAdapterView Resolver 视图解析器
解析ModelAndView对象,根据逻辑名称找到视图,并把数据渲染到页面上
SpringMVC的工作流程可以分为几个步骤
用户发起请求,请求先被Servlet拦截转发给SpringMVC框架。
SpringMVC里面的DispatchServlet核心控制器,会接收到请求并转发给HandlerMapping
HandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller。
如果用户配置拦截器,就会按照顺序执行拦截器里面的preHandle方法
由HandlerAdapter执行相应的Contoller层方法,最终返回值被封装成一个ModelAndView对象(视图名称,和视图的模型数据)
视图解析器根据名称找到视图,然后把数据模型填充到视图里面再渲染到页面上
DispatcherServlet源代码解析执行流程
接下来,我将会进入到DispatcherServlet的源代码核心部分中带大家看一下其执行流程
package org.springframework.web.servlet.DispatcherServlet
这里,我只截取了最核心的部分,展示给大家,已经能足够展示其工作流程了

如果这篇文章对大家理解SpringMVC的工作流程有了一定帮助,希望兄弟一键三连,再次感谢大家!!!
浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程的更多相关文章
- 通过源码了解ASP.NET MVC 几种Filter的执行过程
一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...
- Linux下通过源码编译安装程序
本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...
- 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”
通过源码了解ASP.NET MVC 几种Filter的执行过程 一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...
- 在centos6.7通过源码安装python3.6.7报错“zipimport.ZipImportError: can't decompress data; zlib not available”
在centos6.7通过源码安装python3.6.7报错: zipimport.ZipImportError: can't decompress data; zlib not available 从 ...
- Kafka详解六:Kafka如何通过源码实现监控
问题导读: 1.kafka的消费者组的消费偏移存储,kafka支持两个版本? 2.ConsumerOffsetChecker类的作用是什么? 3.Kafka如何通过源码实现 ...
- 通过源码编译安装VIM
开发中使用的是Ubuntu 12.04 LTS,通过sudo apt-get install vim安装的版本较低,不支持YCM,所以,用源码编译并安装最新的Vim. 卸载旧版本的Vim: sudo ...
- echarts 通过源码方法 传入对应data数据获取分割步长值
通过源码方法获取这里的分割数字长度 /** * Quantity of a number. e.g. 0.1, 1, 10, 100 * * @param {number} val * @return ...
- 通过源码安装PostgresSQL
通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...
- 如何通过源码包的方式在linux安装python36
背景: python34的安装非常简单,直接用yum就可以安装,但是安装最新版的python36通过yum方式是不行的,需要通过源码包进行安装 具体步骤如下: 1.安装openssl静态库[pip3安 ...
- SpringMVC源码剖析1——执行流程
SpringMVC源码剖析1——执行流程 00.SpringMVC执行流程file:///C:/Users/WANGGA~1/AppData/Local/Temp/enhtmlclip/Image.p ...
随机推荐
- * daemon not running; starting now at tcp:5037
今日使用weeplus run android时 看错误提示 ,是5037端口的问题 * daemon not running; starting now at tcp:5037 于是找到查看端口的 ...
- 反向传播(Backpropagation)相关思想
在前面我们学习了SVM损失函数和softmax损失函数,我们优化权重矩阵w的具体思路便是让损失函数最小化,还记得损失函数的定义吗? 没错,损失函数长这样,其中,Wj为权重矩阵的第j个列向量,xi为第i ...
- Java的jps命令使用详解
jps命令简介 jps(Java Virtual Machine Process Status Tool)是JDK提供的一个可以列出正在运行的Java虚拟机的进程信息的命令行工具,它可以显示Java虚 ...
- linux 递归和函数实验
递归 作用:自己调用自己 1.例子:阶乘 2.遍历目录下所有文件 函数 1.函数能够接受一个参数,参数为用户名: 判断一个用户是否存在 如果存在,就返回此用户的shell 和 UID :并返回正常状态 ...
- 20个Golang片段让我不再健忘
前言 本文使用代码片段的形式来解释在 go 语言开发中经常遇到的小功能点,由于本人主要使用 java 开发,因此会与其作比较,希望对大家有所帮助. 1. hello world 新手村的第一课,毋庸置 ...
- linux awk文本
目录 一.awk概念 二.awk的工作过程 三.awk字符 四.内置变量 五.getline 六.awk的精准筛选 七.例子演示 八.实验演示 一.awk概念 1.概念:awk 是一个功能强大的编辑 ...
- 前端Vue自定义顶部搜索框 热门搜索 历史搜索 用于搜索跳转使用
前端Vue自定义顶部搜索框 热门搜索 历史搜索 用于搜索跳转使用, 下载完整代码请访问uni-app插件市场地址:https://ext.dcloud.net.cn/plugin?id=13128 效 ...
- ASP.NET Core 6框架揭秘实例演示[40]:基于角色的授权
ASP.NET应用并没有对如何定义授权策略做硬性规定,所以我们完全根据用户具有的任意特性(如性别.年龄.学历.所在地区.宗教信仰.政治面貌等)来判断其是否具有获取目标资源或者执行目标操作的权限,但是针 ...
- 保护数据隐私:深入探索Golang中的SM4加密解密算法
前言 最近做的项目对安全性要求比较高,特别强调:系统不能涉及MD5.SHA1.RSA1024.DES高风险算法. 那用什么嘞?甲方:建议用国产密码算法SM4. 擅长敏捷开发(CV大法)的我,先去Git ...
- springboot下拦截器的单例模式写法
最近在学习springboot的时候,要把用户登录的做一个拦截,又想到了不采用new对象方式,于是想到使用单例模式来进行构造拦截器对象,所以下面看代码. (不知道这个是不是要写成单例模式,也许是我最近 ...