【问题标题】:Spring Boot WAR deploymentSpring Boot WAR 部署
【发布时间】:2019-04-30 20:28:34
【问题描述】:

如何在我的 Spring 2.1.4 Boot 应用程序(打包为 WAR)中控制我是创建 servlet 3.1 还是 4.0 Web 应用程序。通常,当使用 web.xml Web 应用程序描述符时,Web 应用程序上的属性会宣布正在使用的规范版本。在没有 web.xml(我的情况)的 Spring WebApplicationInitializer 应用程序中,没有这样的广告。

仅仅是使用 servlet 3.1 的特性并将它们部署到容器中并希望它能正常工作的问题吗?

【问题讨论】:

    标签: java spring spring-boot


    【解决方案1】:

    web.xml 文件是可选的,因为 Servlet 3 和 Java EE 6 引入了 @WebServlet@WebFilter@WebListener 等注释。

    但是,没有办法在 web.xml 之外使用 WebApplicationInitializer 声明此信息,因此无论如何您都必须包含该文件并指定版本。

    【讨论】:

    • 容器如何知道没有 web.xml 的 WAR 文件是否使用了其实现不支持的功能?例如,如果容器是 3.1 兼容的,它是否只会在运行时失败时才发现 WAR 包含 4.0 功能?如果是这样,则应在规范中更新注释以宣传 WAR 文件所需的规范,就像 web.xml 当前所做的那样。
    【解决方案2】:

    在发布这个问题一年多之后,我发现 maven 通过声明为依赖项的特定 API 的存在来做出这样的决定。例如,如果您的 Pom 文件中有 javax.servlet:javax.servlet-api:4.0.1 依赖项,maven 将假定一个 servlet 4.0 容器。我相信 Spring boot 不支持这一点,但我认为它应该。作为旁注,M2eclipse 插件也以这种方式工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-03-10
      • 2018-12-05
      • 2016-08-11
      • 2020-06-17
      • 2018-05-18
      • 1970-01-01
      • 1970-01-01
      • 2015-09-03
      相关资源
      最近更新 更多