news 2026/9/4 7:38:42

SpringBoot-1-2-MVC 的配置工作环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot-1-2-MVC 的配置工作环境

引言:

上篇文章我们建立了springboot的基本认知:通过“自动配置”和“起步依赖”来简化Spring应用的搭建。本篇我们一起来理解Web开发中最核心的模块(Spring MVC),深入理解为什么我们几乎不需要任何配置,就能够在SpringBoot中运行一个完整的Web应用。

1.依赖

在传统的Spring MVC项目中,我们需显式引入spring-webmvc\servlet-api 等多个坐标,且需谨慎处理各版本间的兼容性,稍有不慎便会引发依赖冲突。
而在Spring Boot中,只需引入一个起步依赖:

<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency>

引入之后,就直接具备完整的Web开发能力。`spring-boot-starter-web`本身不是一个具体的库,他是一个依赖集合(代表或者说替换上面的多种依赖),其内部声明了一组经过相关测试和版本相互兼容的依赖,具有Web开发的全部基础组件。

其中包括:SpringMVC框架、嵌入式tomcat、Jackson、其他相关(参数检验、静态资源处理等)

a.spring-boot-starter-web大致模块

spring-boot-starter-web ├── Spring MVC │ ├── spring-web │ └── spring-webmvc ├── Embedded Tomcat │ └── spring-boot-starter-tomcat ├── Jackson │ ├── jackson-databind │ ├── jackson-core │ └── jackson-annotations └── 其他 Web 相关依赖 ├── spring-boot-starter(核心启动器) ├── spring-boot-starter-json(包含 Jackson) ├── spring-boot-starter-validation(可选,但常用) └── 其他

其中:

`spring-web`:提供基础的Web功能。

`spring-webmvc`:实现完整的SpringMvc框架,包括Controller、DispatcherServlet、视图解析等。

`spring-boot-starter-tomcat`:引入Tomcat的内嵌版本,使得Web应用可以作为一个独立的java进程运行。

`Jackson`:当前流行的JSON处理库,SpringBoot默认使用它来处理HTTP请求和相应中的JSON数据。无论是接收JSON还是发送JSON,Jackson都会进行相关的序列化和反序列化。

注:spring-boot-starter-web是一个精心设计的组合依赖,我们只需引入它即可获得一套完整的、版本兼容的 Web 开发环境,无需再为底层依赖的版本选择耗费精力。

2.SpringBoot整合SpringMVC

学习SpringBoot记住核心思想:`默认`,你不写我就默认。很多东西没有手动配置,SpringBoot会根据当前项目依赖和环境,完成默认配置。

先说答案,答案就是自动配置

SpringBoot启动的时候,会扫描类路径下的各种条件,发现依赖,就自动应用相应的配置。

其中SpringMVC核心的自动配置类:`webMvcAutoConfiguration`,该类会根据当前项目环境,自动配置一下相关内容:

注册一个前端控制器(DispatcherServlet)

配置`RequestMappingHandlerMapping`和`RequestMappingHandlerAdapter`

配置消息转换器(包括JSON转换器(Jackson))

配置静态资源处理、异常机制处理、视图解析

等等。

注:我们目前只需要记住SpringBoot通过自动配置,为SpringMVC提供了开箱即用的默认行为。

a.SpringMVC默认配置

当我们使用SpringBoot整合SpringMVC的时候,SpringBoot会根据当前项目环境,为SpeingMVC提供默认环境。也就是上面:你不写我就默认配置,按照默认规则帮你配置。

它提供了哪些默认配置呢,除了上面提到的

注册一个前端控制器(DispatcherServlet)·······等,还使用了如下配置。

(1).默认使用嵌入式tomcat

这就意味我们并不需要单独下载安装一个tomcat服务器,然后打包放到外部服务器上了。同时Tomcat服务器作为一个普通的java库打包进我的应用JAR文件中,当运行JAR包的时候,SpringBoot会启动内嵌的Tomcat服务器,然后将SpringMVC部署到这个容器中。

相关好处:无需外部部署容器、环境一致性(每个应用自带相同版本的Tomcat)、微服务友好(每个微服务独立运行)

(2).默认端口

SpringBoot默认的Web服务器端口是8080,启动后直接可以通过http://localhost:8080(127.0.0.1:8080)访问。

如果需要修改端口需要添加或修改配置文件可能叫application.properties或是application.yml

在properties:

server.port=8081

在yml中:

server: port: 8081

然后重启应用,更换端口后就可以访问了。

除了上面介绍的配置之外,SpringBoot 还提供了大量其他配置项。

除了使用配置文件进行配置之外,SpringBoot 也支持通过Java 配置类对项目进行配置。

例如最常见的配置,配置DispatcherServlet的映射路径。默认是`/`,如果设置`/Long`,则表示所有请求都需要以`/Long`开头才能被MVC处理。

注:`servlet*`->配置Tomcat/Web Servlet本身

`spring.mvc*`->配置SpringMVC框架

分类可以帮我们快速定位哪里出现错误。

3.MVC配置的相关入口

在SpringBoot中负责MVC自动配置的类是WebMvcAutoConfiguration。

一般步骤是:

Spring Boot ↓ WebMvcAutoConfiguration ↓ Spring MVC 自动配置

默认情况下SpringBoot会加载WebMvcAutoConfiguration,需要满足以下条件:

- 类路径下存在DispatcherServlet和Servlet类(引入依赖spring-webmvc)。

- 应用是Web应用。

- 没有自定义WebMvcConfigurationSupport类型的Bean(解释如下图)。

满足以上条件,SpringBoot就会使用默认配置。

WebMvcConfigurationSupport ↑ │ 继承 │ DelegatingWebMvcConfiguration (由 @EnableWebMvc 导入)

父类(WebMvcConfigurationSupport)是SpringMVC的基础配置类。

子类(DelegatingWebMvcConfiguration)专门收集并调用所有WebMvcConfigurer实现。

原因:在WebMvcAutoConfiguration大多数方法都标注了条件注解,如`@ConditionalOnMissingBean(WebMvcConfigurationSupport.class)`

表示如果容器中存在WebMvcConfigurationSupport的Bean,则对应的自动配置逻辑将不会执行。

而如果在自定义的配置类上加入注解`@EnableWebMvc`,其中`@EnableWebMvc`定义如下:

@Import(DelegatingWebMvcConfiguration.class) public @interface EnableWebMvc {}

他导入了`DelegatingWebMvcConfiguration`而且`DelegatingWebMvcConfiguration`继承`WebMvcConfigurationSupport`。综上,如果我们的配置类加上`@EnableWebMvc`Spring容器中就会存在一个`WebMvcConfigurationSupport`的Bean,所以SpringBoot中对应的自动配置逻辑就不会执行。

最终执行结果:SpringBoot的默认MVC自动配置全部退让,你的配置类完全控制配置,没有配置的部分不会自动补齐。

如何完全接管自动配置类:

- 继承WebMvcConfigurationSupport重写方法。

- 实现WebMvcConfigurer接口(定制接口,实现个性化配置)+@EnableWebMvc

合并配置

不使用@EnableWebMvc注解,而是实现WebMvcConfigurer,只需要自定义类实现该类后就可以自定义配置了,只需要重写对应的方法(配置),对于没有重写的配置则使用默认配置。

总结:

通过本文分析可知,spring-boot-starter-web起步依赖结合WebMvcAutoConfiguration自动配置类,是 Spring Boot 简化 Web 开发的基石。我们不仅了解了它默认集成了 Tomcat、Jackson 和 Spring MVC 核心组件,更深入剖析了@EnableWebMvc与 WebMvcConfigurer在自定义配置时的本质区别

掌握了这些底层逻辑,你就能在遇到配置失效时快速定位问题。接下来,我们将基于这套已配置好的 MVC 环境,探讨日常开发中绕不开的请求参数校验(Validation)全局异常处理

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/4 7:38:26

基于SpringBoot的甜品商城的开发(源码+文档+讲解视频)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/4 7:37:52

基于深度学习的驾驶员状态检测:从CNN-LSTM模型到实时部署全流程解析

简介&#xff1a;本资源是一套面向本科毕业设计与课程设计的深度学习实战项目&#xff0c;聚焦驾驶员多状态智能识别场景&#xff0c;解决疲劳驾驶、分心、饮酒、疾病等关键安全风险的实时判别问题&#xff0c;适合计算机视觉、人工智能方向初学者及进阶学习者开展模型复现与工…

作者头像 李华
网站建设 2026/9/4 7:37:52

Bridging-IDDQ-Path Delay故障模型深入剖析

Bridging/IDDQ/Path Delay故障模型深入剖析 一、从Stuck-at到高级故障模型 在集成电路测试领域,故障模型(Fault Model)是连接物理缺陷(Defect)与逻辑测试向量之间的抽象桥梁。传统的Stuck-at故障模型自20世纪70年代提出以来,一直是工业界ATPG(Automatic Test Pattern …

作者头像 李华
网站建设 2026/9/4 7:37:49

全球七大洲SHP轮廓数据:从获取验收到GIS与Web地图实战应用

简介&#xff1a;本资源为全球七大洲标准地理轮廓矢量数据集&#xff0c;面向GIS初学者、地理信息专业学生及地图可视化从业者&#xff0c;解决基础空间分析与底图构建中缺乏权威大洲边界数据的问题。压缩包共7个文件&#xff08;1.13MB&#xff09;&#xff0c;包含.shp&#…

作者头像 李华
网站建设 2026/9/4 7:37:04

基于SpringBoot的个人成长足迹与数据分析系统(毕设源码+文档)

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/4 7:35:34

验证工具落地指南:从环境准备到生产集成的稳定运行路径

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华