SpringBoot默認支持Tomcat7及以上版本(SpringBoot默認支持servlet3.1版本及以上,Tomcat6只支持到servlet2.5 )
測試環境:jdk1.8 + tomcat7+SpringBoot2.1.0.M1 、 jdk1.8+ tomcat8.5+SpringBoot2.1.0.M1
1、在pom.xml文件中,把打包形式jar改為war
<packaging>war/<packaging>
2、在pom.xml文件下去除內置tomcat
這裡配置有兩種方法,一種是
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-web/<artifactid>
<exclusions>
<exclusion>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-tomcat/<artifactid>
這種方法會直接移除內置tomcat,即本地開發也需要用自己配置的tomcat才行,用main方法運行會報錯。可參考最後一步進行修改,使用自己配置的tomcat進行開發調試;
另一種方式是,添加
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-starter-tomcat/<artifactid>
<scope>provided/<scope>
這種方法依然可以使用內置的tomcat進行開發調試。
3、添加servlet-api的依賴
添加servlet-api有兩種方式,選其一即可
<dependency>
<groupid>javax.servlet/<groupid>
<artifactid>javax.servlet-api/<artifactid>
<version>3.1.0/<version>
<scope>provided/<scope>
<dependency>
<groupid>org.apache.tomcat/<groupid>
<artifactid>tomcat-servlet-api/<artifactid>
<version>8.0.36/<version>
<scope>provided/<scope>
4、修改啟動類
原先啟動SpringBoot是通過main方法啟動的,現在需要讓啟動類繼承SpringBootServletInitializer,並重寫configure方法,如
5、在pom.xml的build中添加項目打包後的名稱
6、打包部署
(1)、命令行打包
以命令行的形式進入到項目的目錄下,輸入如下命令(需在環境變量中配置maven路徑)
mvn clean package
出現如下圖示即說明打包成功
(2)、在eclipse中打包項目
右鍵點擊項目 - Run as - Maven build ,在彈窗中的Goals輸入package,點擊Run
即可自動打包。打包完成界面與命令行打包一致。
(3)、部署
打包文件在項目路徑下的target目錄裡面,如
放置到tomcat的webapps目錄下,即可直接運行,需要注意的是,訪問路徑需要加上項目名的路徑,如下圖
7、eclipse中移除內置tomcat,運行項目可能遇到的問題
在第二步的時候,如果採用第一種方法移除了內置tomcat的話,在項目中運行時就需要選擇Run on server了。然後選擇tomcat服務器(需tomcat7以上),這時候有可能會遇到下面的錯誤。
出現這個錯誤的解決方法是,右鍵點擊項目 - properties - Project Facets ,把Cloud Foundry Standalone Application的勾去掉。
接下去,就可以在eclipse中配置的tomcat上運行項目了。
8、讓springboot支持tomcat6的方法
springboot要支持servlet2.5,才可以在tomcat6中運行,讓springboot支持servlet2.5需用到spring-boot-legacy,該插件目前只支持到springboot2.0.3版本。
測試環境:tomcat6 + jdk 1.8 +Springboot 1.5.9.RELEASE
(1)、pom.xml中新增插件
在上面1-5步配置完後,繼續配置pom.xml。新增spring-boot-legacy依賴
<dependency>
<groupid>org.springframework.boot/<groupid>
<artifactid>spring-boot-legacy/<artifactid>
<version>1.1.0.RELEASE/<version>
(2)、在main目錄下新建webapp/WEB-INF/web.xml如下圖
(3)、複製下面內容到web.xml中,並配置啟動類的位置
<web-app>
<context-param>
<param-name>contextConfigLocation/<param-name>
<param-value>com.example.DemoApplication/<param-value>
<listener>
<listener-class>org.springframework.boot.legacy.context.web.SpringBootContextLoaderListener/<listener-class>
<servlet>
<servlet-name>appServlet/<servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet/<servlet-class>
<init-param>
<param-name>contextAttribute/<param-name>
<param-value>org.springframework.web.context.WebApplicationContext.ROOT/<param-value>
<load-on-startup>1/<load-on-startup>
<servlet-mapping>
<servlet-name>appServlet/<servlet-name>
<url-pattern>//<url-pattern>
(4)、打包部署,參照上面第6步
到此,導出的war包即可在tomcat6中運行。
閱讀更多 拿渣仨泰舉 的文章