gpt4 book ai didi

spring - SpringBootServletInitializer在WAR部署中的重要性

转载 作者:行者123 更新时间:2023-12-04 17:32:55 25 4
gpt4 key购买 nike

我浏览了一些教程,了解到 ApplicationContext 负责管理在 spring 应用程序中创建的所有 beans。当要将 WAR 部署到 servlet 容器时,必须扩展 SpringBootServletInitializer 并且从文档中可以看出一个自以为是的 WebApplicationInitializer,用于从传统 WAR 部署运行 SpringApplication。将应用上下文中的 Servlet、Filter 和 ServletContextInitializer bean 绑定(bind)到服务器

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

最佳答案

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

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

或者这个:

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 应用程序。

static main 对应用服务器没有任何意义。相反,我们添加了一个 SpringBootServletInitializer 实现,它依次实现了 WebApplicationInitializer 接口(interface)。

Interface to be implemented in Servlet 3.0+ environments in order to configure the ServletContext programmatically -- as opposed to (or possibly in conjunction with) the traditional web.xml-based approach.

Implementations of this SPI will be detected automatically by SpringServletContainerInitializer, which itself is bootstrapped automatically by any Servlet 3.0 container. See its Javadoc for details on this bootstrapping mechanism.

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

  1. 我们实现 SpringServletContainerInitializer 来定义要运行的 SpringApplication[s]。
  2. 应用服务器可以自己创建ServletContext,只是不能自己配置ServletContext。
  3. 为什么要访问 ServletContext? Spring 将为您处理配置。

关于spring - SpringBootServletInitializer在WAR部署中的重要性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57919717/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com