千家信息网

springboot是怎样帮我们省去web.xml配置的

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章给大家介绍springboot是怎样帮我们省去web.xml配置的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述最开始使用原生的springmvc时,总是免不了有如下
千家信息网最后更新 2026年11月03日springboot是怎样帮我们省去web.xml配置的

这篇文章给大家介绍springboot是怎样帮我们省去web.xml配置的,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。

概述

最开始使用原生的springmvc时,总是免不了有如下xml配置

    spring    org.springframework.web.servlet.DispatcherServlet            contextConfigLocation        classpath:spring-servlet.xml        1    spring    /*      org.springframework.web.context.ContextLoaderListener         contextConfigLocation    classpath:config/applicationContext.xml

但是,切换到springboot之后,web.xml之类的繁琐的配置基本上都不见了。出于好奇研究了下springboot究竟帮我们做了什么,我们可以免于这样的繁琐配置。

Servlet3.0规范

首先研究的第一点,为什么web.xml不见了。刚开始使用原生servlet(不使用web框架),web.xml就是非常重要的一个配置,无论是servlet、filter、listener都需要在web.xml里面配置下。

但是在servlet3.0里,这个配置得到了简化。可以通过java配置(注解等)省去web.xml配置。

具体servlet3.0的规范这里就不讨论了,说下其中一个非常重要的类。javax.servlet.ServletContainerInitializer

这个类会在web容器启动阶段被回调,可以在onStartup方法里做一些servlet、filter、listener的注册等操作。

/**Interface which allows a library/runtime to be notified of a web application's startup phase and perform any required programmatic registration of servlets, filters, and listeners in response to it.*/public interface ServletContainerInitializer {    public void onStartup(Set> c, ServletContext ctx)        throws ServletException; }

springboot的实现

首先spring在META-INF/services下配置了这个类,让整个web容器启动后可以找到并启动这个类

ServletContainerInitializer配置

SpringServletContainerInitializer
/*** @HandlesTypes这个注解标明了该ServletContainerInitializer需要在启动时候处理哪些类,然后服务器会把找到的这些类传到onStartup的第一个参数里注意这里的类包括所配置类的子类,比如这里配置WebApplicationInitializer,启动之后,就会把这个WebApplicationInitializer的子类都传进去*/@HandlesTypes(WebApplicationInitializer.class)public class SpringServletContainerInitializer implements ServletContainerInitializer {            @Override    public void onStartup(Set> webAppInitializerClasses, ServletContext servletContext)            throws ServletException {        List initializers = new LinkedList();        //.... 省略容错的一些代码        initializers.add((WebApplicationInitializer) waiClass.newInstance());        //....     AnnotationAwareOrderComparator.sort(initializers);        for (WebApplicationInitializer initializer : initializers) {            initializer.onStartup(servletContext);        }    }}

startup的逻辑很简单,web容器启动后,调用所有WebApplicationInitializer的onStartup方法。

WebApplicationInitializer 的实现SpringBootServletInitializer
@Overridepublic void onStartup(ServletContext servletContext) throws ServletException {   //....    WebApplicationContext rootAppContext = createRootApplicationContext(            servletContext);   //...}
protected WebApplicationContext createRootApplicationContext(        ServletContext servletContext) {    //...    return run(application);}

一般使用Springboot的时候,都会继承一个类SpringBootServletInitializer,在这个类的onStartup方法中,启动了整个Spring容器。

本地启动springboot时,我们一般会写一个类似于这样的main方法。

上述分析也解释了为啥把springboot应用部署到机器上,tomcat能够找到springboot的入口,并启动它。

DispatcherServlet的配置

关于springboot如何加载类并启动的这里就不介绍了。
这里说明下究竟Springboot如何配置DispatcherServlet的

1)当类路径下存在DispatcherServlet时候,该配置生效。
2)这个配置会在DispatcherServletAutoConfiguration配置完之后再配置。

DispatcherServletAutoConfiguration配置

看到这里就是我们非常熟悉的springboot的使用了。springboot在DispatcherServletConfiguration这个类里对DispatcherServlet进行了配置以及注册。

服务器如tomcat在web应用启动后,加载并启动springboot,springboot通过@AutoConfiguration、@Bean、@Conditional等注解自动配置了DispatcherServlet。

关于springboot是怎样帮我们省去web.xml配置的就分享到这里了,希望以上内容可以对大家有一定的帮助,可以学到更多知识。如果觉得文章不错,可以把它分享出去让更多的人看到。

配置 容器 方法 时候 注解 重要 繁琐 内容 子类 就是 更多 服务器 帮助 应用 服务 研究 不错 好奇 代码 入口 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市人人互联网科技有限公司 互联网科技工作委员会副主任毛军 美国互联网保险保险科技 互联网是不是新科技 互联网科技垄断 重庆互联网络科技 华宇互联网科技 郑州华宇互联网科技 互联网科技公司有哪些 互联网科技创新企业排名 互联网 科技馆 团飞科技与伯堂互联网服务平台 宁夏众和广鑫互联网科技有限公司 宜昌元轩互联网科技有限公司 互联网科技实习生岗位 城市宝互联网科技有限公司 山东大美朱楼互联网科技有限公司 湖北辰鑫科技互联网 兰石爱特工业互联网科技分公司 互联网科技创新创业项目 广州淘业互联网络科技 科技平台互联网 科技服务与互联网 万达互联网科技 伴你行互联网科技有限公司 互联网企业和科技型企业 互联网新科技动漫ppt素材 新氧科技和美国互联网有关系吗 云南互联网科技学费 互联网科技快速发展优美句子
0