强制Spring Boot在web.xml中使用servlet映射

时间:2017-03-02 16:24:41

标签: spring-boot jar tomcat7 web.xml servlet-3.0

我目前正在尝试将现有的动态Web项目转移到Spring启动项目,它使用web.xml进行servlet映射。我知道spring会忽略web.xml文件,春天使用现有web.xml的正确方法应该是什么?是的,我仍然需要坚持使用web.xml来完成这个项目。

我对此有点新意,请指导我!谢谢!

2 个答案:

答案 0 :(得分:1)

我认为您需要坚持使用web.xml,因为您的容器使用的是旧版本的Servlet而不是3.0。

Spring Boot基于Servlet 3.0构建。您必须更新主类以扩展SpringBootServletInitializer并覆盖configure方法,该方法告诉spring使用其Servlet 3.0支持。像Tomcat这样的嵌入式容器需要Servlet 3.0,所以如果你想在嵌入式容器的开发过程中启动项目(包括JUnit测试),我认为,据我所知,唯一的方法就是将web.xml重写为Servlet 3.0 java配置。但是,如果您真的想在旧容器中部署应用程序,您仍然可以使用spring-boot-legacy模块。它允许您将web.xml用于旧容器;你唯一要做的就是添加 您的web.xml中的org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener

有关在旧容器中部署战争的更多信息,请查看Spring Boot的official documentation

  

Spring Boot使用Servlet 3.0 API初始化ServletContext   (注册Servlets等),因此您不能使用相同的应用程序   Servlet 2.5容器中的框。但是可以运行一个   带有一些特殊工具的旧容器上的Spring Boot应用程序。   如果你包括org.springframework.boot:spring-boot-legacy作为   依赖(分别维护到Spring Boot的核心和   目前可在1.0.2.RELEASE获得,您需要做的就是   创建一个web.xml并声明一个上下文监听器来创建   应用程序上下文以及过滤器和servlet。

答案 1 :(得分:0)

这是一个非常古老的问题,但我目前处于相同的情况,我将分享我的经验。

我扩展了SpringBootServletInitializer类来创建我的@SpringBootApplication,默认情况下它将包含你的web.xml配置。我仍然可以声明或编辑现有的servlet映射,它将被考虑在内。