浅聊一下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 ...
随机推荐
- 安装vue后 vue -V查不到版本号 添加环境变量没反应
萌新一枚,今天听老大说后续有项目要用vue,于是找教程自己先看看, 验证vue是否安装成功时,提示 'vue' 不是内部命令,也不是可运行的程序 有说把vue路径添加环境变量的,试了一下,不行(后来看 ...
- Java的先行发生原则
先行发生原则(Happens-Before)是Java内存模型定义的一个等效判断原则.依赖这个原则,我们可以通过几条简单规则判断数据是否存在竞争,线程是否安全,而不需要陷入Java内存模型苦涩难懂的定 ...
- 曲线艺术编程 coding curves 第七章 抛物线(Parabolas)
抛物线 Parabolas 原作:Keith Peters https://www.bit-101.com/blog/2022/11/coding-curves/ 译者:池中物王二狗(sheldon) ...
- 解决适用EntityFramework生成时报错“无法解析依赖项。"EntityFramework 6.4.4" 与 ' EntityFramework.zh-Hans 6.2.0 约束:EntityFramework(=6.2.0)'不兼容。"
起因:通过vs2022创建mvc项目时, 执行添加"包含视图的MVC5控制器(使用Entity Framework)时 点击添加,出现错误提示 解决方法: 在您的解决方案资源管理器中,右键 ...
- Grafana系列-GaC-1-Grafana即代码的几种实现方式
系列文章 Grafana 系列文章 Terraform 系列文章 概述 GaC(Grafana as Code, Grafana 即代码) 很明显是扩展自 IaC(Infrastructure as ...
- 尚医通-day14【创建订单】(内附源码)
页面预览 订单详情 订单列表 第01章-创建订单 生成订单分析 生成订单方法参数:就诊人id与 排班id 生成订单需要获取就诊人信息(微服务远程调用service-user) 获取排班信息与规则信息( ...
- Educational Codeforces Round 150 (Rated for Div. 2) A-E
比赛链接 A 代码 #include <bits/stdc++.h> using namespace std; using ll = long long; bool solve() { i ...
- Linux系统运维之负载均衡Tengine
一.介绍 Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到 ...
- SpringBoot定义优雅全局统一Restful API 响应框架完结撒花篇封装starter组件
之前我们已经,出了一些列文章. 讲解如何封统一全局响应Restful API. 感兴趣的可以看我前面几篇文章 (整个starter项目发展史) SpringBoot定义优雅全局统一Restful AP ...
- Vue 先初始化子组件再初始化父组件的方法(自定义父子组件mounted执行顺序)
写在前面: 本篇内容内容主要讲述了,在使用 Konva 进行开发过程中遇到的一些问题.(既然是组件加载顺序,主要牵扯到的就是,父子组件的关系,父子组件的生命周期) 众所周知,Vue中父子组件生命周期的 ...