SpringBootServletInitializer在WAR部署中的重要性

2024-01-05

我已经完成了一些教程并了解到ApplicationContext负责管理在spring应用程序中创建的所有bean。当将 WAR 部署到 servlet 容器时,必须扩展SpringBootServletInitializer从文档中可以看出一个固执己见的 WebApplicationInitializer,用于从传统 WAR 部署运行 SpringApplication。将 Servlet、Filter 和 ServletContextInitializer bean 从应用程序上下文绑定到服务器.

有人可以帮我理解上面这行的意思吗? ServletContext 初始化器与 SpringBootServletInitializer 有何关系?为什么 servlet 容器不能自己创建 ServletContext ?如果是这种情况,我们如何在使用 SpringBootServletInitializer 之后获得 Tomcat 以编程方式创建的 SpringApplication 的 ServletContext 引用?


当您运行嵌入式应用程序服务器时,Web 应用程序使用静态主入口点。主要入口点通常如下所示:

public static void main(final String[] args) {
    SpringApplication.run(Application.class, args);
}

or this:

public static void main(final String[] args) {
    SpringApplication   springApplication   = new SpringApplicationBuilder(Application.class)
        .properties("spring.main.banner-mode=log")
        .build();

    springApplication.run(args);
}

两者都使用 SpringApplication.run 方法来扫描、配置和运行 Web 应用程序。

静态 main 对应用程序服务器没有任何意义。相反,我们添加一个 SpringBootServletInitializer 实现,该实现依次实现 WebApplicationInitializer 接口。

在 Servlet 3.0+ 环境中实现的接口,以便以编程方式配置 ServletContext — 与传统的基于 web.xml 的方法相反(或可能与其结合)。

SpringServletContainerInitializer 将自动检测此 SPI 的实现,SpringServletContainerInitializer 本身由任何 Servlet 3.0 容器自动引导。有关此引导机制的详细信息,请参阅其 Javadoc。

SpringServletContainerInitializer 由 Servlet 3.0+ 容器引导,并执行 WebApplicationInitializer.onStartup(ServletContext context) 方法来配置 ServletContext。

  1. 我们实现 SpringServletContainerInitializer 来定义要运行的 SpringApplication[s]。
  2. 应用服务器可以自己创建ServletContext,只是不能自己配置ServletContext。
  3. 为什么要访问 ServletContext? Spring 将为您处理配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SpringBootServletInitializer在WAR部署中的重要性 的相关文章

随机推荐