SpringBoot配置外部Tomcat並打war包

流煙默發表於2019-01-24

參考博文:SpringBoot整合外部Tomcat時啟動流程原始碼分析

SpringBoot應用預設以Jar包方式並且使用內建Servlet容器(預設Tomcat),該種方式雖然簡單但是預設不支援JSP並且優化容器比較複雜。故而我們可以使用習慣的外接Tomcat方式並將專案打War包。

【1】建立專案並打War包

① 同樣使用Spring Initializer方式建立專案

這裡寫圖片描述


② 打包方式選擇"war"

這裡寫圖片描述


③ 選擇新增的模組

這裡寫圖片描述


④ 建立的專案圖示

這裡寫圖片描述

有三個地方需要注意:

  • pom中打包方式已經為war;
  • 對比預設為jar的專案多了ServletInitializer類;
  • 專案結構沒有src/main/webapp,且沒有WEB/INF web.xml。

ServletInitializer類如下:

public class ServletInitializer extends SpringBootServletInitializer {

	@Override
	protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
		return application.sources(SpringbootwebprojectApplication.class);
	}

}

pom檔案如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>com.web</groupId>
	<artifactId>springbootwebproject</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>war</packaging>

	<name>springbootwebproject</name>
	<description>Demo project for Spring Boot</description>

	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.0.3.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
		<java.version>1.8</java.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<!--這裡修改了內建Tomcat的作用域-->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>


</project>

⑤ 補全專案結構

第一種方式,手動建立src/main/webapp, WEB/INF以及web.xml。

第二種方式,使用idea建立,步驟如下:

1.如下圖所示,點選專案結構圖示

這裡寫圖片描述

2.建立src/main/webapp

這裡寫圖片描述

3.建立web.xml

這裡寫圖片描述
這裡寫圖片描述


此時專案結構圖如下:

這裡寫圖片描述


【2】使用外部配置的Tomcat啟動專案

① 點選"Edit Configurations…"新增Tomcat。

這裡寫圖片描述


② 設定Tomcat、JDK和埠

這裡寫圖片描述


③ 部署專案

這裡寫圖片描述
這裡寫圖片描述


④ 啟動專案

這裡寫圖片描述


此時如果webapp 下有index.html,index.jsp,則會預設訪問index.html。

如果只有index.jsp,則會訪問index.jsp;如果webapp下無index.html或index.jsp,則從靜態資原始檔夾尋找index.html;如果靜態資原始檔夾下找不到index.html且專案沒有對"/"進行額外攔截處理,則將會返回預設錯誤頁面。

index.html顯示如下圖:

這裡寫圖片描述

相關文章