SpringBoot的web.xml文件在哪里?

数据仓库的复用性:设计和构建一个高复用性的数仓 数据仓库的复用性是指在数据仓库的设计和使用过程中,能够实现数据、模型、流程、工具等多个层面的重复利用,减少重复开发,提高开发效率,降低维护成本,并增强灵活性和可扩展性。 阅读详情

每天叫醒你的不是闹钟,而是梦想

01

追溯web.xml

  • 远古时期,使用servlet做web开发的时候,我们需要配置web.xml文件;

  • 近代时期,使用springMVC做web开发的时候,我们需要配置web.xml文件;

  • 现代时期,使用SpringBoot做web开发的时候,我们不需要配置web.xml文件

       这是为什么呢?

02

web.xml干了什么?

要了解SpringBoot为什么不需要配置web.xml文件,我们首先要知道web.xml干了什么,是不是SpringBoot用了什么其他文件代替?

首先我们要从servlet讲起,在servlet-api2.5的时候,我们要注册一个servlet需要引入web.xml,我们需要对每一个请求进行一个类的映射;直到servlet-api3.0的发布,我们注册一个servlet就简单了,只需要引入一个@WebServlet注解。

接着我们进入spring+springmvc(2.5)时代,依旧需要使用web.xml,我们可以了解一下这个时候的web.xml配置文件的内容。

我们去Spring官网查看关于SpringMVC模块提供的web.xml内容

首先是ContextLoaderListener类,该类是指定Spring要加载的配置文件,加载我们的spring配置文件。而在spring的配置文件中,会有

<context:component-scan base-package="com.zero "/>
该行代码的作用是扫描业务类(service,dao层的注解)

接着是我们的DispatcherServlet,该作用是加载spring-mvc的配置文件,在spring-mvc的配置文件中

<context:component-scan base-package="com.zero.controller"></context:component-scan>
该行代码是扫描映射类(controller的注解)

接着是

<load-on-startup>1<load-on-startup>
该配置表示容器启动的时候执行DispatcherServlet的init方法

最后是

<url-mapping>/*<url-mapping>
拦截请求

总结:web.xml需要做的事情就是 加载spring配置文件,加载springmvc文件,注册一个servlet,拦截请求。

03

SpringMVC5用java代码替代了web.xml

那么我们将刚刚的Spring官网上的内容往上翻

我们可以看到这段代码,上面的最后一行文档告诉我们:

以下Java配置实例注册并初始化DispacherServlet,由Servlet容器自动给检测,也就是说,在SpringMVC5的时候,已经由Java代码代替了web.xml配置文件,那么我们来了解一下官网的这段代码。

public class MyWebApplicationInitializer implements WebApplicationInitializer {


 @Override
 public void onStartup(ServletContext servletCxt) {


   // Load Spring web application configuration 加载spring配置文件
  AnnotationConfigWebApplicationContext ac = new AnnotationConfigWebApplicationContext();
  ac.register(AppConfig.class);
  ac.refresh();


  // Create and register the DispatcherServlet 创建和注册DispatcherServlet
  DispatcherServlet servlet = new DispatcherServlet(ac);
  ServletRegistration.Dynamic registration = servletCxt.addServlet("app", servlet);


  registration.setLoadOnStartup(1); //<load-on-startup>1</load-on-startup>
  registration.addMapping("/app/*"); //<url-pattern>/app/*</url-pattern>
 }
}

所以在spring5的时候,web.xml配置文件已经完全被Java代码取代。这其实就是一个过渡。

在该配置中,我们可以看到的是MyWebApplicationInitializer 实现了WebApplicationInitializer 这个接口,然后在onStartup方法中实现了配置,那么也就是说WebApplicationInitializer 的实现类只要调用了onStartup方法就可以进行一些初始化。

那么其实在servlet-api3.1的标准中定义了一个规范,如果你想要启动容器的时候定义这么一个配置,那么你需要在某个文件夹下(/META-INF/services/javax.servlet.ServletContainerInitializer)定义一个容器时会回调的类,这个类必须要实现ServletContainerInitializer接口,那么在web容器启动时就会做一些初始化工作,而这些初始化工作是在onStartup方法中执行的。

接下来我们看一下ServletContainerInitializer接口

根据注释:为了支持可以不使用web.xml。提供了ServletContainerInitializer这个接口,该接口通过SPI机制,当web容器启动的时候,会自动添加相应jar包下找到META-INF/services/javax.servlet.ServletContainerInitializer文件中的实现类,将他们实例化。

于是我们找到了这个文件,该文件下有一个实现类,我们进入这个实现类

@HandlesTypes(WebApplicationInitializer.class)
public class SpringServletContainerInitializer implements ServletContainerInitializer {


 @Override
 public void onStartup(@Nullable Set<Class<?>> webAppInitializerClasses, ServletContext servletContext)
 throws ServletException {

     List<WebApplicationInitializer> initializers = new LinkedList<>();

     if (webAppInitializerClasses != null) {
     for (Class<?> waiClass : webAppInitializerClasses) {
        if (!waiClass.isInterface() && !Modifier.isAbstract(waiClass.getModifiers()) &&
           WebApplicationInitializer.class.isAssignableFrom(waiClass)) {
         try {
             initializers.add((WebApplicationInitializer)
             ReflectionUtils.accessibleConstructor(waiClass).newInstance());
           }catch (Throwable ex) {
             throw new ServletException("Failed to instantiate WebApplicationInitializer class", ex);
         }
        }
     }
 }

那么该实现类就会通过SPI机制,在web容器加载的时候会自动被调用,类上的@handlesTypes注解,它的作用是将感兴趣的一些类注入到ServletContainerInitializerde接口中,而这个类的方法就会扫描到WebApplicationIntializer的实现类,调用它的onStartup方法,从而起到了web.xml的作用。因为我们上面已经说过:WebApplicationInitializer 的实现类只要调用了onStartup方法就可以进行一些初始化,也就是加载了web.xml配置。

Unity类银河恶魔城学习记录1-10 PlayerWallJump源代码 P37 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释,可供学习Alex教程的人参考 阅读详情

相关推荐

FSL软件安装

FSL软件安装

huang_tianyuan的博客 2630

Spring Boot实现web.xml功能

通过上述介绍我们了解到,在Spring Boot应用中,我们可以通过注解和编程两种方式实现web.xml的功能,包括如何创建及注册Servlet、Filter以及Listener等。至于具体采用哪种方式,大家可以根据自己的喜好自行选择。

ttyy1112的专栏 5134

【Mac+CLion+STM32+JLink】从零到一:在macOS上构建高效STM32开发与调试工作流

本文详细介绍了在macOS上使用CLion、STM32CubeMX和JLink搭建高效STM32开发与调试工作流的完整指南。从环境准备、CLion深度配置到STM32CubeMX工程实战,再到JLink烧录避坑和串口调试技巧,帮助开发者快速掌握Mac平台下的嵌入式开发全流程。

weixin_28278377的博客 254

web 容器 中执行 runtime.getruntime()_深入分析Spring 与 Spring MVC容器

1、Spring MVC WEB配置Spring Framework本身没有Web功能,Spring MVC使用WebApplicationContext类扩展ApplicationContext,使得拥有web功能。那么,Spring MVC是如何在web环境中创建IoC容器呢?web环境中的IoC容器的结构又是什么结构呢?web环境中,Spring IoC容器是怎么启动呢?以Tomcat为例,...

weixin_39725885的博客 198

避坑指南:Vue2中使用TinyMCE5常见问题解决方案(含PowerPaste插件异常处理)

本文针对Vue2项目中集成TinyMCE 5富文本编辑器时遇到的高频疑难问题,提供了一套深度实战解决方案。内容涵盖环境搭建、资源路径配置、图片与视频上传处理、以及替代PowerPaste插件的自定义粘贴清理方案,旨在帮助开发者有效规避常见陷阱,构建稳定可靠的内容编辑功能。

weixin_29012677的博客 154

手把手教你用EGM96模型校正DEM数据(含在线工具推荐)

本文详细介绍了如何使用EGM96地球重力场模型校正DEM数据中的高程偏差。通过对比WGS84椭球面与大地水准面的差异,解释了校正原理,并提供了从在线工具快速验证到Python脚本批量处理的全流程实战指南,帮助GIS开发者和数据分析师确保高程数据基准一致,提升空间分析精度。

ttt77的博客 1007

关于spring boot的web.xml

spring boot项目为什么没有web.xml servlet3.0规范中,可以通过java配置(注解等)代替web.xml,spring boot就是使用java代替了web.xml。 其中javax.servlet.ServletContainerInitializer负责web容器启动阶段被回调,在onStartup方法里注册servlet、filter、listener等。 sprin......

生而为人我很抱歉 2万+

Vue3 - 详细实现调用浏览器摄像头拍照并生成图片预览,支持将抓拍的图像保存到用户本地或上传到服务器、调取前置摄像头和后置摄像头,开启摄像头并进行拍照,vue实现调用摄像头,电脑或手机调用摄像头拍照

vue3,nuxt3,摄像头,vue3网站打开摄像头拍照,vue3项目调用摄像头实现拍照功能,拍照后怎么保存,照相后上传到后端服务器,开启摄像头黑屏,如何默认后置摄像头,网页开启电脑摄像头并照相,前置拍照,vue3如何调用手机摄像头进行拍摄,拒绝权限后不再弹出了,微信公众号网页,摄像头报错,拍照左右镜像反了,浏览器不兼容怎么办,vue3调用电脑端摄像头实时拍照,解决调用摄像头权限无法弹出,打不开摄像头,Vue3如何调用手机的摄像头,调用本地摄像头实现拍照,浏览器不弹摄像头权限了,如何不使用https运行测试

🏆 前端领域优质创作者 8653

SpringBoot之web.xml文件

web.xml的作用 还记得我们在写Java Web的时候吗,那个时候需要Web工程都需要在WEB-INF下,放置一个web.xml文件,其大概格式如下: <?xml version="1.0" encoding="UTF-8"?> <web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

猎户星座 6268

结构力学本构模型:复合材料模型:复合材料热力学行为技术教程_2024-08-07_06-54-53.Tex

热塑性复合材料是一种由热塑性树脂基体和增强纤维组成的复合材料。与热固性复合材料不同,热塑性复合材料在加热时可以软化,冷却时硬化,这一过程可以重复进行,因此它们具有可回收和可再加工的特性。热塑性树脂,如聚酰胺(尼龙)、聚碳酸酯、聚醚醚酮(PEEK)等,与碳纤维、玻璃纤维等增强材料结合,可以制备出具有高强度、高刚度和良好耐热性的复合材料。热粘弹性理论是研究材料在温度变化和时间依赖性载荷作用下的变形和应力响应。复合材料,由于其独特的微观结构,展现出复杂的热粘弹性行为。

808

基于风机和水轮机互补发电系统的Simulink仿真

随着全球对清洁能源的需求不断增长,风力发电和水力发电作为两种重要的可再生能源发电方式,受到了广泛关注。风机和水轮机互补发电系统结合了两者的优势,能够在不同的自然条件下稳定地输出电能,提高能源利用效率和供电可靠性。本文将详细介绍风机和水轮机互补发电的原理,包括风力发电原理、水力发电原理以及两者互补的机制和优势,并通过相关数学公式进行深入分析。水轮机也有其特定的特性曲线,包括流量 - 水头曲线、功率 - 流量曲线等。在不同的水头和流量条件下,水轮机的输出功率会发生变化。

平时工作较为繁忙,私信消息一般晚上回复,谢谢大家~~ 167

web 容器 中执行 runtime.getruntime()_SpringBoot的web.xml文件在哪里?

每天叫醒你的不是闹钟,而是梦想01追溯web.xml远古时期,使用servlet做web开发的时候,我们需要配置web.xml文件;近代时期,使用springMVC做web开发的时候,我们需要配置web.xml文件;现代时期,使用SpringBoot做web开发的时候,我们不需要配置web.xml文件 这是为什么呢?02web.xml干了什么?要了解SpringBoot为什么...

weixin_39580727的博客 149

基于YOLOv26的护栏损坏检测系统原理讲解

本文介绍了一种基于YOLOv26深度学习的护栏损坏检测系统。该系统通过车载摄像头或固定监控采集道路护栏图像,利用改进的YOLOv26算法实现高效准确的损坏检测。系统采用分层架构设计,包含数据采集、检测处理、分析评估和应用服务四个层次,能够自动识别变形、断裂、缺失等五种常见损坏类型,并评估损坏严重程度。相比传统人工检测方法,该系统大幅提高了检测效率和准确性,降低了人工成本和安全风险。关键技术包括多尺度特征融合、注意力机制和自适应非极大值抑制等创新设计,使系统在复杂道路环境下仍能保持稳定的检测性能。

一键难忘的博客 327

IDEA-springboot+pom.xml添加依赖+web文件夹添加显示

maven可以快速的创建一个项目骨架,无需手动去创建诸多,一个项目里面的各个常规的文件已经配置。且maven提供多种骨架模版,可以创建不同项目类型,我以idea工具创建web项目 ...

weixin_44767053的博客 5547

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

idea xml文件变普通文件了_SpringBoot的web.xml文件在哪里?

每天叫醒你的不是闹钟,而是梦想01追溯web.xml远古时期,使用servlet做web开发的时候,我们需要配置web.xml文件;近代时期,使用springMVC做web开发的时候,我们需要配置web.xml文件;现代时期,使用SpringBoot做web开发的时候,我们不需要配置web.xml文件 这是为什么呢?02web.xml干了什么?要了解SpringBoot为什么...

weixin_39994296的博客 466

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

springboot项目识别不了pom.xml文件_Spring Boot Web 项目教程,Spring Boot的环境配置

这节课,我们来学习一下SpringBoot的环境配置,在SpringBoot中,所有的配置都写在application.properties中:我们启动项目,默认端口是8080,我们现在给他配置一个8088:server.port=8088运行启动类,然后在浏览器地址栏访问上一节中的控制器:启动成功了。然后访问这个Controllerpackage com.example.demo.control...

weixin_36166714的博客 1404

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

idea SpringBoot自动生成webapp目录和web.xml文件

File->Project Structure->Project Settings->Modules->Web

zdj18166896501的博客 641

idea创建spring boot项目,及初建项目未生成web.xml文件解决

1、new project 2、选择JDK版本,工具默认会选中本地安装的版本,选择Spring Initializr,然后点击next。 3、填写项目组名及唯一性标识名,填写完成后记得修改最下面一行的报名,默认包名会将组名和唯一性标识名组合在一起,这样会导致包名可能过长,可以根据需要自己修改。填写完成后点击next。 4、选择要引入的插件,这里选择spring web,点击next。 5、选择放项目的本地磁盘的文件夹,点击finish;这样一个spring boot项目就创建好了。 6、有时创建的

zf_csdn123的博客 1813

SpringBoot 2.x web项目 Idea 生成 webapp文件夹 及 web.xml

web项目 Idea 生成 webapp文件夹 及 web.xml 第一步: 第二步: 第三步: 设置/生成webapp 文件夹并指定路径 第四步: 设置/生成web.xml 文件并指定路径 第五步: 点击ok ...

mqy224512的博客 760

Spring Boot项目中pom.xml文件各标签详解

在Spring Boot工程中,pom.xml文件是maven项目的配置基础,它让我们的项目自动导入了很多相关的依赖,下面以我曾经开发过的一个简单项目中的pom.xml文件为例,对文件配置进行部分注释。

Dululuya 5662

spring boot 传参记录,WEB端传入服务端,接口传值去 xml 文件

web 端传值去服务端 url 传参法 前端 url: '/api/adminsmautoseacher/updatefun?id=' + arr.join(',') + '&confUrl=publicSeacher&funcName=' + funcName + '&funcDesc=' + funcDesc, 后端接收 pdateFun(@RequestParam(...

shiXiaoChenblog的博客 546

Springboot2--pom.xml文件解析

前言 pom.xml文件是maven项目用来导入依赖和控制版本的文件,我们来看一下Springboot中的pom.xml文件 一、版本控制 继承父项目 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.

weixin_43233653的博客 1001

Spring boot 的pom.xml文件配置

正在学习spring boot ,配置pom.xml文件记录一下建立一个spring boot 文件1.新建maven project 项目2.编写项目名3.配置pom.xml文件配置代码:&lt;parent&gt;        &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt;        &lt;artifactId&gt;sp...

IT_C_Language的博客 1898

idea 的spring boot添加web.xml 文件

右边倒数第二个按钮 点击+,添加即可

qq_43649282的博客 537

springboot整合ssm的pom文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-...

WCD128的博客 563

使用idea快速创建SpringBoot项目

通过idea快速创建的SpringBoot项目的pom.xml中已经导入了我们选择的web的起步依赖的坐标 <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSche...

坚持去坚持。 2845
上一篇: 看完这篇SpringBoot配置原理,你就自己手写一个吧
下一篇: 金九银十: Hibernate快速入门到一级缓存
新时代Java农民工
博客等级 码龄7年 16粉丝 116原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值