把弹簧启动项目发布tomcat容器(包含发布到tomcat6的方法)

  

春季启动因为内嵌tomcat容器,所以可以通过打包为jar包的方法将项目发布,但是如何将弹簧启动项目打包成可发布到tomcat中战争的包项目呢?

  

1。既然需要打包成战争包项目,首先需要在砰的一声。xml文件中修改打包类型,将弹簧引导默认的& lt; packaging> jar修改为& lt; packaging> war形式;

  

2。其次弹簧引导的web项目中内嵌tomcat服务器,所以如果我们想要发布战争包到tomcat项目,要讲春天引导中内嵌的tomcat包依赖排除,不然产生冲突,打开下面代码中的注释即可。

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-web   & lt; !   & lt; exclusions>   & lt; exclusion>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-tomcat   & lt;/exclusion>   & lt;/exclusions>   ——比;   & lt;/dependency>      

有一点想说的是,如果本地开发的时候依然想要使用弹簧引导内嵌tomcat进行调试,添加如下依赖即可。

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-starter-tomcat   & lt; scope> provided   & lt;/dependency>      

3。弹簧引导发布jar包网络程序的入口是主要函数所在的类,使用@SpringBootApplication注解。但是如果战争包发布至tomcat,需要增加SpringBootServletInitializer子类,并覆盖它的配置方法,或者直接将主要函数所在的类继承SpringBootServletInitializer子类,并覆盖它的配置方法。代码举例如下,

        @SpringBootApplication   公开课DemoApplication延伸SpringBootServletInitializer {   @Override   保护SpringApplicationBuilder配置(   SpringApplicationBuilder应用程序){   返回application.sources (DemoApplication.class);   }   公共静态void main (String [] args) {   SpringApplication.run (DemoApplication.class, args);   }   }      

以上就完成了弹簧启动项目打包战争包的所有步骤,可以发布至tomcat7及其以上版本。

  

但是以上流程改造完春天引导打包战争包发布至tomcat6版本之后,浏览器访问项目地址会给404年出的错误?为什么呢,一头雾水,经过我一番查阅资料以及实验,得出以下结论,

  

首先弹簧引导支持的servlet容器如下,可以看出弹簧引导最低支持的servlet版本是3.0,但是tomcat6的servlet版本是2.5,这样的话上面的流程是无法支持tomcat6发布弹簧启动项目的,

  谷歌了

但是又一番,发现已经有人在解决这个问题了,https://github.com/dsyer/spring-boot-legacy

  

  

1。pom.xml中添加spring-boot-legacy的依赖,

        & lt; dependency>   & lt; groupId> org.springframework.boot   & lt; artifactId> spring-boot-legacy   & lt; version> 1.1.0.RELEASE   & lt;/dependency>      

2。手动替换网络。xml文件。但是在发布战争包中发现metricFilter提示空指针异常,我就简单粗暴的将滤过滤了,注释如下。所要替换的网络。xml文件的未知如下:{工程目录}/src/main/webapp/web - inf/web . xml

        & lt; & # 63; xml version=" 1.0 " encoding=" utf - 8 " & # 63;比;   & lt; web version=" 2.5 " xmlns=" http://java.sun.com/xml/ns/javaee "   xmlns: xsi=" http://www.w3.org/2001/XMLSchema-instance "   xsi: schemaLocation=" http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd”比;   & lt; context-param>   & lt; param-name> contextConfigLocation   & lt; param-value> com.example.DemoApplication   & lt;/context-param>   & lt; listener>   & lt; listener-class> org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener   & lt;/listener>   & lt; !   & lt; filter>   & lt; filter-name> metricFilter   & lt; filter-class> org.springframework.web.filter.DelegatingFilterProxy   & lt;/filter>   & lt; filter-mapping>   & lt; filter-name> metricFilter   & lt; url-pattern>/* & lt;/url-pattern>   & lt;/filter-mapping>   ——比;   & lt; servlet>   & lt; servlet-name> appServlet   & lt; servlet-class> org.springframework.web.servlet.DispatcherServlet

把弹簧启动项目发布tomcat容器(包含发布到tomcat6的方法)