首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在web.xml中实现ServletContainerInitializer的类

在Web应用程序中,ServletContainerInitializer是一种扩展机制,允许开发人员在Web应用程序启动时自动执行一些初始化任务。要实现ServletContainerInitializer,需要在web.xml中进行配置。

首先,需要创建一个实现ServletContainerInitializer接口的类。例如:

代码语言:java
复制
public class MyServletContainerInitializer implements ServletContainerInitializer {
    @Override
    public void onStartup(Set<Class<?>> c, ServletContext ctx) throws ServletException {
        // 在这里执行初始化任务
    }
}

接下来,需要在web.xml中进行配置。在web.xml中,需要添加一个<absolute-ordering>元素,并在其中添加一个<others>元素。然后,需要在<absolute-ordering>元素中添加一个<listener>元素,指定实现ServletContainerInitializer接口的类。例如:

代码语言:xml
复制
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

   <absolute-ordering>
        <others/>
       <listener>
           <listener-class>com.example.MyServletContainerInitializer</listener-class>
        </listener>
    </absolute-ordering>

    <!-- 其他配置 -->

</web-app>

在这个例子中,com.example.MyServletContainerInitializer是实现ServletContainerInitializer接口的类的完整类名。在Web应用程序启动时,Servlet容器会自动执行这个类的onStartup方法,从而实现自动执行初始化任务的功能。

需要注意的是,ServletContainerInitializer的实现类必须在Web应用程序的类路径中,并且必须在Web应用程序的lib目录中。如果实现类不在类路径中,或者不在lib目录中,Servlet容器将无法找到并执行它。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

SpringMvc(二)HandlesTypes源码

, 应用web.xml,还有jar包里web.xml **找到应用中所有的ServletContainerInitializer实现:**将应用目录下META-INF/services/javax.servlet.ServletContainerInitializer...标注实现生成映射:**如果该实现有@HandlesTypes注解,则将注解里value作为key,该实现ServletContainerInitializer实现)添加到value,存入typeInitializerMap...key匹配,匹配上就把当前class(也就是HandlesTypes.value实现)添加到initializerClassMapvalue; 到这里,typeInitializerMap工作也就完成了...= ServletContainerInitializer实现集合(需要传入当前key类型实现), 对应功能: initializerClassMap :存储应用初始化程序及需要参数对象类型...实现,并把当前class作为参数类型存到initializerClassMap,待后面启动时,直接获取。

71120
  • 【重要】Springweb.xml配置原理说明

    Spring原理说明: // 方式零:就在实现改,用哪个改哪个 // new出来,耦合性太强,依赖于具体实现,如果我具体实现变了,那么这里接口代码也得跟着变,这样不好。...IUserDao dao = new IUserDaoImpl();  // private IUserDao dao = new IUserDaoImplForOracle();  // 方式一:不在实现修改...,工厂改forName参数 // private IUserDao dao = BeanFactory.newInstance().getUserDao();  // 方式二:不在工厂修改...,配置文件修改,拿到是代理对象,让代理对象帮我生成,我去这是最懒方式啊!...// 所以Springweb.xml就是配置实现了一个实现了ServletContextListener接口监听器。

    64330

    深入Spring Boot (十五):web.xml去哪了

    或更高版本,服务器会在启动时候路径下查找javax.servlet.ServletContainerInitializer接口实现,执行实现onStartup方法用于配置Servlet容器...;如果ServletContainerInitializer接口实现使用@HandlesTypes注解声明了感兴趣或接口,那么这个感兴趣及其子类或接口实现就会被设置到Set<Class<...文件,这个文件内容是ServletContainerInitializer接口实现全路径,例如com.example.demo.MyServletContainerInitializer,下面实现一个简单...Spring3.1SpringServletContainerInitializer实现ServletContainerInitializer接口,同时相应jar包META-INF/services...,所以,支持Servlet3.0+容器启动时会自动扫描classpath下WebApplicationInitializer接口实现,并将这些实现传递给onStartup方法第一个参数。

    1.8K50

    Spring揭秘--寻找遗失web.xml

    那时,还离不开 web.xml 配置, xml 文件编写繁琐 servlet 和 filter 配置。...实现,并且容器将 WEB-INF/lib 目录下 JAR 包都交给该类 onStartup() 方法处理,我们通常需要在该实现上使用 @HandlesTypes 注解来指定希望被处理...而方法入参 Set<class<class</class</class 这么声明一个 ServletContainerInitializer 实现,web 容器并不会识别它,所以,需要借助 SPI...寻找 spring ServletContainerInitializer 实现并不困难,可以迅速定位到 SpringServletContainerInitializer 该实现。...,实际上一开始我各种 ServletContainerInitializer 实现打了断点,最终定位到,根本没有运行到 SpringServletContainerInitializer 内部,

    1.3K31

    SpringMVC基本使用关于DisptacherServlet关于ServletContainerInitializer最简单配置接收参数路径变量表单变量

    ,我们会在web.xml配置SpringMVC,然后SpringMVC会根据web.xml配置初始化DisptacherServletservlet3.0之后,出现了ServletContainerInitializer...,可以项目启动最开始时,会自动扫描实现ServletContainerInitializer接口,对Servlet、Listener、Filter进行动态注册,利用此技术,可以通过实现ServletContainerInitializer...,往后面看)ServletContainerInitializer作用和web.xml差不多,都是部署servlet,listener,filter,只是一个是用java代码配置,一个用xml配置实现了...ServletContainerInitializer接口上要注解上@HandlesTypes(//要动态注册class,一定要是Servlet或者Listener或者Filter)ServletContainerInitializer...接口中只有一个方法onStart(Set,ServletContext)当应用启动时候,会调用onStart方法,参数Set就是@HandlesTypes,意味着这些可以被动态注册实现动态注册核心方法

    1.1K60

    WebApplicationInitializer向左,ServletContextInitializer向右

    如果第三方实现ServletContainerInitializer接口,并且在其META-INF/目录下services文件声明了该实现,那么Servlet容器可以借助JDKServiceLoader...探测到所有第三方实现,然后Servlet容器将ServletContext对象依次传递给第三方实现onStartup()方法(不用头疼ServletContext对象获取问题了,Servlet容器直接传给你...WebApplicationInitializer接口是Spring为第一种部署模式量身打造一个接口,即它只能应用于外置Servlet容器,大家可以Intellj IDEADEBUG运行一个Spring...实现呢?...其中方式三和方式四,方式四更贴近Spring风格,而方式三是Servlet API 3.0引入一种原生方式;如果大家深挖方式四的话,其实底层原理依然是通过方式三实现

    78430

    spring mvc基于编码配置原理

    我们配置DispatcherServlet最典型是使用web.xml文件。...它可以充分利用编译器,在编译期间检查出配置错误,另外,这增强了配置灵活性和可控性,你可以启动过程自定义需要检查验证条件。...Spring mvc是跟着更底层接口标准servlet走,servlet3+以后引入ServletContainerInitializer接口,这为去web.xml,基于代码配置提供了一种途径: public...>> c, ServletContext ctx) throws ServletException; } SpringSpringServletContainerInitializer 实现了该接口...META-INF/services/javax.servlet.ServletContainerInitializer,文件内声明实现,进而调用其onStartup方法,如果以后我们要自己实现ServletContainerInitializer

    909100

    精尽Spring MVC源码分析 - 寻找遗失 web.xml

    实现了 Servlet 接口 Servlet 容器可用于处理请求并发送响应。...实现,并且容器将 WEB-INF/lib 目录下 JAR 包都交给该类 onStartup() 方法处理,我们通常需要在该实现上使用 @HandlesTypes 注解来指定希望被处理...ServletContainerInitializer 实现,Web 容器并不会识别它,需要借助 SPI 机制来指定该初始化,通过项目 ClassPath 路径下创建 META-INF/services...,无论是 web.xml 配置,还是 Servlet3.0 ServletContainerInitializer 和 SpringBoot 加载流程都没有太大关联。...一个比较核心,一般我们可以从中获取到那些注册容器托管 Bean,而这篇文章,主要分析便是它在内嵌容器实现:org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext

    63330

    web.xml配置  关于web.xml配置

    web.xml文件继承   ${CATALINA_HOME}\conf\web.xml内容,相当于写到了每个项目的web.xml,它是所有web.xml父文件。...每个完整JavaWeb应用中都需要有web.xml,但我们不知道所有的web.xml文件都有一个共同父文件,它在Tomcatconf/web.xml路径。 conf/web.xml 进行覆盖,那么默认主页为index.html、index.html、index.jsp 关于web.xml配置<url-pattern...http://localhost:8080/we/index时[假设我部署webapps目录下项目名为we] 就会匹配到我们指定,即/index然后一步一步找到对应<...Path 4.我们可以通过使用*.do来过滤请求, 这样如果我们页面请求添加后缀名.do就可以避免对静态资源过滤了,也就不需要对静态资源做特殊处理了

    1.4K10

    关于web.xml配置

    http://localhost:8080/we/index时[假设我部署webapps目录下项目名为we] 就会匹配到我们指定,即/index然后一步一步找到对应 那我们输入URL:http://localhost:8080/we/index又是如何与/index匹配呢?...是我们Servlet地址,我们称为Servlet Path,这里就是需要与我们匹配内容 注:/index后边我们还可以跟其他信息,例如:/index?...name=admin&pass=admin 这是其中一种明文表示方式 标签*使用 我们知道写时有一种通配符使用写法,即* 1.当我使用<url-pattern...Path 4.我们可以通过使用*.do来过滤请求, 这样如果我们页面请求添加后缀名.do就可以避免对静态资源过滤了,也就不需要对静态资源做特殊处理了

    52820

    【小家Spring】探讨注解驱动Spring应用机制,详解ServiceLoader、SpringFactoriesLoader使用(以JDBC、spring.factories为例介绍SPI)

    前言 之前一篇文章【小家Spring】Spring注解驱动开发—Servlet 3.0整合Spring MVC(不使用web.xml部署描述符,使用ServletContainerInitializer...,返回一个ServiceLoader实现,而ServiceLoader实现了Iterable接口,所以可以通过ServiceLoader来遍历所有配置文件定义实例。...(继承或者实现放在ServletContainerInitializer接口集合参数c传递进来。...如果不定义处理类型,或者应用不存在相应实现,则集合参数c为null 这一实现了SCI(全名:ServletContainerInitializer接口,如果做为独立包发布,在打包时,会在JAR...(); } } // 这一步就是Tomcat专门寻找,并且执行Servlet规范`ServletContainerInitializer`所有的实现 /*

    1.9K42

    【SpringBoot源码解析】第三章:SpringBoot通过打成war包方式是如何启动

    关于SPI可以去了解我另一篇文章 Java SPI 机制详解 SPIspringboot应用 我们看spring-web这个项目的spi文件javax.servlet.ServletContainerInitializer...ServletContainerInitializer 是 Servlet 3.0 新增一个接口,主要用于容器启动阶段通过编程风格注册Filter, Servlet以及Listener,以取代通过web.xml...文件,那么Tomcat等容器启动时候就会去调用所有实现onStartup方法。...,其本质上是利用了Servlet3.0规范Tomcat启动时会去调用ServletContainerInitializer接口onStartup方法,同时把使用注解@HandlesTypes中标注接口实现作为参数传入到...onStartup,并依次调用其实现onStartup方法。

    91930
    领券