为什么在将其部署到外部tomcat时需要扩展`SpringBootServletInitializer`

时间:2018-01-01 07:32:20

标签: java tomcat spring-boot deployment

我们为什么要扩展SpringBootServletInitializer以便将SpringBoot应用程序运行到外部tomcat

如果没有扩展SpringBootServletInitializer它在嵌入式tomcat上运行那么为什么在将SpringBootServletInitializer部署到外部tomcat时需要扩展 <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v4.widget.SwipeRefreshLayout android:id="@+id/activity_main_swipe_refresh_layout" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.RecyclerView android:id="@+id/recycle_mall_list" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_centerVertical="true"/> </android.support.v4.widget.SwipeRefreshLayout> <RelativeLayout android:id="@+id/relative_layout_error" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="center" android:visibility="visible"> <include layout="@layout/wifi_error_layout" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" /> </RelativeLayout> </FrameLayout>

2 个答案:

答案 0 :(得分:6)

较旧的Servlet容器不支持Servlet 3.0中使用的 ServletContextInitializer 引导程序。您仍然可以在这些容器中使用Spring和Spring Boot,但是您需要将web.xml添加到应用程序并将其配置为通过 DispatcherServlet 加载 ApplicationContext

为了创建可部署的war文件,是提供 SpringBootServletInitializer 子类并覆盖其 configure 方法。这利用了Spring Framework的Servlet 3.0支持,并允许您在servlet容器启动时配置应用程序。通常,您更新应用程序的主类以扩展 SpringBootServletInitializer

function getCountHazardsToUser() {
$.ajax({
    async: true,
    url: web + "/NumberOfHazardsToUser",
    method: "GET",
    data: '{"userid":"' + localStorage.getItem("id") + '"}',
    dataType: "json",
    contentType: "application/json",
    success: function (data) {
        var res = data.d;
        hazardsNumber = res;
    },
    error: function () {
        hazardsNumber = -1;
    }
});

您可以参考以下链接

https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html

答案 1 :(得分:1)

以下是一些更多信息:

为了部署基于Servlet的网络应用程序(如Spring),您实际上需要提供传统的web.xml

我们也可以使用WebApplicationInitializer接口以编程方式执行相同的操作。根据文档

  

要在Servlet 3.0+环境中实现的接口   以编程方式配置ServletContext - 而不是(或   可能与传统的基于web.xml的方法结合使用。

由于SpringBoot建议使用JavaConfiguration而不是xml configuration

它使用JavaConfiguration而不是web.xml

它有SpringBootServletInitializer类,最终实现WebApplicationInitializer接口并覆盖其onStartup来配置。