Spring之消失的web.xml

本文探讨了随着Servlet3.0的出现和Spring的发展,web.xml逐渐被淘汰的过程。重点讲解了ServletContainerInitializer接口在servlet容器初始化中的作用,以及Spring如何通过SpringServletContainerInitializer和WebApplicationInitializer支持动态注册DispatcherServlet。同时,介绍了AbstractDispatcherServletInitializer和AbstractContextLoaderInitializer如何协助实现DispatcherServlet的注册和初始化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我从网上找了一张web项目的目录结构,如下:

是不是很熟悉的赶脚^-^ 

几年之前这是当之无愧的主流,但是随着技术的发展,servlet3.0、springboot的诞生,基于xml配置的web项目一去不复返了,取而代之的是springboot。今天不谈springboot是如何玩的,今天的主题是web.xml是如何消失的。因为当下主流的技术就是spring全家桶,探究的目的也是spring是如何让web.xml消失的。springmvc中的核心是DispacherServlet,在使用的时候会在web.xml中配置<servlet>标签,那么当web.xml消失了,DispacherServlet如何注册到容器中的呢?解决了这个问题也就能回答web.xml消失的原因了。

Servlet3.0

从servlet3.0开始,支持ServletContainerInitializer接口,也就是说提供了一种通过代码层面来初始化servlet容器的方式,比如注册servlet、listener、filter。官方文档中关于ServletContainerInitializer的介绍如下:

ServletContainerInitializer 类通过 jar services API 查找。对于每一个应用,应用启动时,由容器创建一个 ServletContainerInitializer 实例。框架提供的 ServletContainerInitializer 实现必须绑定在 jar 包的 META-INF/services 目录中的一个叫做 javax.servlet.ServletContainerInitializer 的文件,根据 jar services API, 指定 ServletContainerInitializer 的实现。 除 ServletContainerInitializer 外,我们还有一个注解—HandlesTypes。在 ServletContainerInitializer 实现上的 HandlesTypes 注解用于表示感兴趣的一些类,它们可能指定了 HandlesTypes 的 value 中的注解(类型、方 法或自动级别的注解),或者是其类型的超类继承/实现了这些类之一。

简单来说,只要在jar中的特定目录文件下配置ServletContainerInitializer的实现类,servlet容器在启动的过程中就会去调用这个实现类,从而可以达到注册servlet、listener、filter的功能,那么web.xml的用处完全可以被取代了。

spring-web包

对于使用spring很熟悉的朋友肯定知道,在开发web应用时spring-web包是必不可少的,来看看这个包的目录结构

是不是很惊喜?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值