浅聊一下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在执行的时候用到的几个重要组件

  1. HandlerMapping 处理器映射器

    ① 在SpringMVC中会有很多请求过来,每个请求都需要有一个Handler处理(Controller)

    ② HandlerMapping的作用便是找到请求向对应的处理器。

  2. HandlerAdapter 处理器适配器

    HandlerMapping只是解析URL,通过映射找到对应的Controller,但是真正调用Controller层方法的是HandlerAdapter

  3. View Resolver 视图解析器

    解析ModelAndView对象,根据逻辑名称找到视图,并把数据渲染到页面上

SpringMVC的工作流程可以分为几个步骤

  1. 用户发起请求,请求先被Servlet拦截转发给SpringMVC框架。

  2. SpringMVC里面的DispatchServlet核心控制器,会接收到请求并转发给HandlerMapping

  3. HandlerMapping负责解析请求,根据请求信息和配置信息找到匹配的Controller。

  4. 如果用户配置拦截器,就会按照顺序执行拦截器里面的preHandle方法

  5. 由HandlerAdapter执行相应的Contoller层方法,最终返回值被封装成一个ModelAndView对象(视图名称,和视图的模型数据)

  6. 视图解析器根据名称找到视图,然后把数据模型填充到视图里面再渲染到页面上

DispatcherServlet源代码解析执行流程

接下来,我将会进入到DispatcherServlet的源代码核心部分中带大家看一下其执行流程

package org.springframework.web.servlet.DispatcherServlet

这里,我只截取了最核心的部分,展示给大家,已经能足够展示其工作流程了

如果这篇文章对大家理解SpringMVC的工作流程有了一定帮助,希望兄弟一键三连,再次感谢大家!!!

浅聊一下SpringMVC的核心组件以及通过源码了解其执行流程的更多相关文章

  1. 通过源码了解ASP.NET MVC 几种Filter的执行过程

    一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神的工作,而且很多人觉得平时根本不需要知道这些,会用就行了.其实阅读源 ...

  2. Linux下通过源码编译安装程序

    本文简单的记录了下,在linux下如何通过源码安装程序,以及相关的知识.(大神勿喷^_^) 一.程序的组成部分 Linux下程序大都是由以下几部分组成: 二进制文件:也就是可以运行的程序文件 库文件: ...

  3. 通过源码了解ASP.NET MVC 几种Filter的执行过程 在Winform中菜单动态添加“最近使用文件”

    通过源码了解ASP.NET MVC 几种Filter的执行过程   一.前言 之前也阅读过MVC的源码,并了解过各个模块的运行原理和执行过程,但都没有形成文章(所以也忘得特别快),总感觉分析源码是大神 ...

  4. 在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 从 ...

  5. Kafka详解六:Kafka如何通过源码实现监控

    问题导读: 1.kafka的消费者组的消费偏移存储,kafka支持两个版本?        2.ConsumerOffsetChecker类的作用是什么?        3.Kafka如何通过源码实现 ...

  6. 通过源码编译安装VIM

    开发中使用的是Ubuntu 12.04 LTS,通过sudo apt-get install vim安装的版本较低,不支持YCM,所以,用源码编译并安装最新的Vim. 卸载旧版本的Vim: sudo ...

  7. echarts 通过源码方法 传入对应data数据获取分割步长值

    通过源码方法获取这里的分割数字长度 /** * Quantity of a number. e.g. 0.1, 1, 10, 100 * * @param {number} val * @return ...

  8. 通过源码安装PostgresSQL

    通过源码安装PostgresSQL 1.1 下载源码包环境: Centos6.8 64位 yum -y install bison flex readline-devel zlib-devel yum ...

  9. 如何通过源码包的方式在linux安装python36

    背景: python34的安装非常简单,直接用yum就可以安装,但是安装最新版的python36通过yum方式是不行的,需要通过源码包进行安装 具体步骤如下: 1.安装openssl静态库[pip3安 ...

  10. SpringMVC源码剖析1——执行流程

    SpringMVC源码剖析1——执行流程 00.SpringMVC执行流程file:///C:/Users/WANGGA~1/AppData/Local/Temp/enhtmlclip/Image.p ...

随机推荐

  1. Python潮流周刊#3:PyPI 的安全问题

    你好,我是豌豆花下猫.这里记录每周值得分享的 Python 及通用技术内容,部分为英文,已在小标题注明.(标题取自其中一则分享,不代表全部内容都是该主题,特此声明.) 文章&教程 1.掌握Py ...

  2. Docker-Compose快速搭建LNMP

    Docker-Compose 1.安装Docker sudo apt -y install docker.io docker version 查看版本号 docker help 查看帮助文档 2.更换 ...

  3. JSON第二

    HTML DOM 节点在 HTML DOM 中,所有事物都是节点.DOM 是被视为节点树的 HTML. TML 文档中的所有内容都是节点:整个文档是一个文档节点每个 HTML 元素是元素节点HTML ...

  4. CANoe_系统变量的创建过程

    在Canoe中创建系统变量,可以用于定义和管理与CAN网络通信相关的参数和配置.遵循以下步骤: 1.打开Canoe 启动Canoe软件. 2.打开项目 在Canoe的菜单栏中,选择"File ...

  5. Vue跨域配置异常采坑:Request failed with status code 401

    本地用Express作为服务端,前端Vue项目配置跨域代理,调用服务端api接口始终报错"Request failed with status code 401".原来发现是端口3 ...

  6. SpringBoot RabbitMQ 实战解决项目中实践

    1 基础预览 1.1 环境准备 Springboot 1.5.6.RELEAS Springcloud Dalston.SR2 1.2 交换机类型 交换机是用来发送消息的AMQP实体.交换机拿到一个消 ...

  7. PHP file_put_contents()写入配置文件

    php把提交的数据写入到配置文件中 在后台可以设置网站的基本信息,例如:title,keywords,copyright.等信息,这些信息只是一条数据,存入数据库耗费资源,直接写入到php文件中. 创 ...

  8. 除了参数,ref关键字还可以用在什么地方?

    <老生常谈:值类型 V.S. 引用类型>中花了很大的篇幅介绍ref参数针对值类型和引用类型变量的传递.在C#中,除了方法的ref参数,我们还有很多使用ref关键字传递引用/地址的场景,本篇 ...

  9. Jmeter压测实战:Jmeter二次开发之自定义函数

    1 前言 Jmeter是Apache基金会下的一款应用场景非常广的压力测试工具,具备轻量.高扩展性.分布式等特性.Jmeter已支持实现随机数.计数器.时间戳.大小写转换.属性校验等多种函数,方便使用 ...

  10. 可视化容器管理工具-portainer.io使用

    续docker日常使用指南 背景 当我们开始使用docker后,我们的机器上镜像和容器会越来越多,或者有时候我们有多台开发机的时候,单纯使用命令行去管理镜像和容器就变得麻烦了,这时,我们就可以选择一些 ...