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

嵌入式Tomcat两次调用WebApplicationInitializer

嵌入式Tomcat是指将Tomcat服务器嵌入到应用程序中,以便在应用程序中直接启动和管理Tomcat服务器。而WebApplicationInitializer是一个接口,用于配置和初始化Servlet容器上下文,以及在应用程序启动时执行一些自定义的初始化操作。

嵌入式Tomcat的两次调用WebApplicationInitializer的过程如下:

  1. 第一次调用: 在应用程序启动时,嵌入式Tomcat会扫描应用程序中的类路径,查找实现了WebApplicationInitializer接口的类。当找到这样的类时,Tomcat会调用其onStartup方法,并传入一个ServletContext对象作为参数。开发人员可以在这个方法中进行一些初始化操作,例如注册Servlet、Filter、Listener等。
  2. 第二次调用: 当应用程序的Servlet容器上下文初始化完成后,嵌入式Tomcat会再次调用实现了WebApplicationInitializer接口的类的onStartup方法。这次调用的目的是让开发人员有机会在Servlet容器上下文初始化完成后执行一些额外的操作,例如注册额外的Servlet、Filter、Listener等。

嵌入式Tomcat的优势:

  • 简化部署:嵌入式Tomcat可以将应用程序和Tomcat服务器打包在一起,使得部署变得更加简单和便捷。
  • 轻量级:相比于独立安装的Tomcat服务器,嵌入式Tomcat更加轻量级,占用资源更少。
  • 灵活性:嵌入式Tomcat可以根据应用程序的需要进行定制和配置,提供更灵活的部署和管理方式。

嵌入式Tomcat的应用场景:

  • 单体应用程序:适用于传统的单体应用程序,可以将Tomcat嵌入到应用程序中,实现一站式部署和管理。
  • 微服务架构:对于采用微服务架构的应用程序,可以将每个微服务的Tomcat嵌入到相应的服务中,实现独立部署和管理。

腾讯云相关产品和产品介绍链接地址:

  • 云服务器(CVM):提供弹性计算能力,可用于部署嵌入式Tomcat和应用程序。详情请参考:https://cloud.tencent.com/product/cvm
  • 云数据库MySQL版:提供稳定可靠的数据库服务,可用于存储应用程序的数据。详情请参考:https://cloud.tencent.com/product/cdb_mysql
  • 云原生容器服务(TKE):提供容器化应用程序的部署和管理能力,可用于部署嵌入式Tomcat和应用程序。详情请参考:https://cloud.tencent.com/product/tke
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

微服务架构Day05-SpringBoot之Servlet

旧版 配置嵌入式Servlet容器 SpringBoot默认使用Tomcat作为嵌入式Servlet容器 如何定制和修改Servlet容器相关配置 1.在配置文件中定制和修改Servlet容器有关的配置...,只要是嵌入式Servlet容器工厂,后置处理器就会工作. 3.后置处理器从容器中获取所有嵌入式容器处理器定制器,调用嵌入式容器处理器定制器中的方法对嵌入式容器处理器进行配置 嵌入式Servlet容器启动原理...容器中获取嵌入式Servlet容器工厂组件,当该组件存在时,Tomcat嵌入式Servlet容器工厂创建对象,后置处理器就获取所有定制器来定制Tomcat嵌入式Servlet容器的配置 7.使用Tomcat...2.将嵌入式Tomcat指定为provided 3.编写一个SpringBootServletInitializer的子类,并调用configure方法,传入SpringBoot应用主程序 4...>>中,为WebApplicationInitializer类型的类创建实例 4.每一个WebApplicationInitializer调用自己的onStartup方法启动 5.SpringBootServletInitializer

40310
  • Spring Boot如何支持嵌入式Servlet容器

    Spring Boot支持Tomcat、Jetty和Undertow三种Servlet容器嵌入到Web应用程序中,开发者使用starter即可方便嵌入,默认情况下,嵌入服务器的访问端口为8080。...容器初始化 嵌入式容器不会直接执行Servlet 3.0+ javax.servlet.ServletContainerInitializer或org.springframework.web.WebApplicationInitializer...如果你需要执行容器初始化,可以通过实现注册一个org.springframework.web.WebApplicationInitializer Bean。...当使用嵌入式容器时,可以通过@ServeltComponentScan启用@WebServlet,@WebFilter和@WebListener注解。...错误处理:错误页面的位置server.error.path ssl http压缩 Spring Boot尽量统一不容器的配置,但是有些配置是容器特有的,这种情况下可以使用容器特有配置,如server.tomcat

    94920

    【小家Spring】Spring注解驱动开发---Servlet 3.0整合Spring MVC(不使用web.xml部署描述符,使用ServletContainerInitializer)

    源码如下(它关心的是WebApplicationInitializer的子类们): @HandlesTypes(WebApplicationInitializer.class) public class...特别注意的是: 按照上面的配置,我偶然的发现了,RootConfig仍然还是去扫描了我的controller,导致我的controller被扫描了两次,怎么回事呢???...附:Tomcat监听多端口 / SpringBoot监听多端口 今天有同事问”Spring Boot依赖的Embedded的Tomcat能不能同时监听多个端口?...学问就在这个s,说明SpringBoot铁定是支持监听多个端口的~~~~ 先看看单体的Tomcat容器:stand-alone的tomcat当然是可以的。...Tomcat启动日志里也可以看出端倪 ? 再看看SpringBoot的嵌入式容器:它使用了使用了Embedded Tomcat

    2.9K30

    踩坑-Tomcat(servlet)在启动(加载)是执行两次

    不知道大家在使用Tomcat时,有没有遇到过运行或者启动项目时,页面被执行了两次的问题。 可能发生过,但是你没有发现。 首先看一下问题是怎么样的。...我发现,这不是之间将i变成了2,而是add()方法被调用两次! 可是代码里面明明只调用一次啊? 我去浏览器搜索相关案例,发现还真有几例,哈哈哈,浏览器万能。...经过一系列排查,发现是Tomcat针对你的项目运行了两次。 原因 为什么会运行两次呢?...,结果,Tomcat就会加载两次。...总的来说,就是Tomcat的sever.xml的配置做了一次无用功,导致运行了两次。 如何解决? 首先,我们有三种方法,我们一个个说。

    1.4K10

    重学SpringBoot系列之嵌入式容器的配置与应用

    重学SpringBoot系列之嵌入式容器的配置与应用 嵌入式容器的运行参数配置 调整SpringBoot应用容器的参数两种配置方法 配置文件方式 常用配置参数 tomcat性能优化核心参数 自定义配置类方式...Reactor NIO多线程模型 切换为 Jetty Server 切换到undertow 嵌入式容器详细参考文章 打war包部署到外置tomcat容器 修改打包方式 排除内置tomcat的依赖 新增加一个类继承...当我们添加了spring-boot-starter-web依赖后,默认会使用Tomcat作为嵌入式Web容器,不需要我们单独部署,将web应用打成jar包即可运行。...文件刚开始的位置,如下: ---- 排除内置tomcat的依赖 我们使用外置的tomcat,自然要将内置的嵌入式tomcat的相关jar排除。...注意,如果您正在构建WAR文件并部署它,则需要WebApplicationInitializer。如果你喜欢运行一个嵌入式Web服务器,那么你根本不需要这个。

    1.7K10

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

    javax.servlet.ServletContainerInitializer接口分析可知,SpringServletContainerInitializer的onStartup方法会在web应用启动的时候被调用...initializer : initializers) { // 调用实现类的onStartup方法 initializer.onStartup(servletContext...接口,所以AbstractAnnotationConfigDispatcherServletInitializer子类的onStartup方法会在web应用启动的时候被调用,创建DispatcherServlet...ServletContextInitializer接口使用编程的方式配置Servlet3.0+的ServletContext,它不会被Servlet容器启动时自动调用,它的生命周期由Spring管理。...下面以代码运行在Tomcat7+的版本为例,当SpringBoot项目代码运行的时候,无论是内嵌Tomcat还是将代码打成war部署到外部Tomcat,代码都会运行到SpringApplication.run

    1.8K50
    领券