欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Boot项目部署到外部Tomcat

程序员文章站 2022-05-24 15:29:31
...

说明

Spring Boot自带Tomcat插件,可以直接编写启动类,开启Tomcat服务,但是在实际开发中,服务器一般是已经建好了的,由专人维护,因此不能用Spring Boot自带的Tomcat,而是应将我们的Spring Boot项目打包成war发布到外部的服务器如Tomcat

开发环境

MyEclipse2017、JDK 1.8、Tomcat 7.0.77

开发步骤

1 搭建Spring Boot项目

首先需要在MyEclipse搭建一个Spring Boot项目,可以参考我的上一篇文章 MyEclipse搭建Spring Boot

首先给出项目结构:

Spring Boot项目部署到外部Tomcat

2 配置pom.xml文件

需要去除Tomcat插件、添加thymeleaf依赖、unbescape依赖,配置Tomcat版本、打包的war名称等等,笔者都有注释

<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/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>yunlingfly</groupId>
	<artifactId>MavenSpringBoot</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	
	<!-- 继承父包 -->
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>1.5.3.RELEASE</version>
		<relativePath></relativePath>
	</parent>

	<name>MavenSpringBoot Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-tomcat</artifactId>
			<scope>provided</scope><!-- 去除Spring Boot自带的Tomcat插件 -->
		</dependency>

		<!--  <dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>-->

		<!-- thymeleaf包含上面注释了的依赖 -->
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-thymeleaf</artifactId>
		</dependency>
		
		<!-- 没有下面这句会报NoClassDefFoundError: org/unbescape/html/HtmlEscape错误 -->
		<dependency>
			<groupId>org.unbescape</groupId>
			<artifactId>unbescape</artifactId>
			<version>1.0</version>
		</dependency>
		
		<!-- 测试工具配置 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<!-- 配置低版本Tomcat,否则需8.5以上版本,请根据自己的Tomcat版本配置 -->
	<properties>
		<tomcat.version>7.0.77</tomcat.version>
	</properties>

	<build>
		<finalName>MavenSpringBoot</finalName>
		<plugins>
			<!-- war部署使用 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<configuration>
					<warName>MavenSpringBoot</warName><!-- 设置打包后war包的名字 -->
				</configuration>
			</plugin>
		</plugins>
	</build>
</project>
3 编写程序

1)启动类:SpringBootTest.java

程序的入口启动,需要继承SpringBootServletInitializer、重写configure方法(启动类只能有一个,不能放在根目录default package,并且需要位于其他类同级目录或最上级目录,这样启动类才能调用其他类,我放在了同级目录,请参照上面的项目结构贴图)

package test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.support.SpringBootServletInitializer;

// @SpringBootApplication声明让spring boot自动给程序进行必要的配置
@SpringBootApplication
public class SpringBootTest extends SpringBootServletInitializer {

	public static void main(String[] args) {
		SpringApplication.run(SpringBootTest.class, args);
	}
	
    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(SpringBootTest.class);
    }
}

2)控制类:TemplateController.java

用于配置拦截前缀和转向等

package test;

import java.util.Map;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
public class TemplateController {
	// 配置拦截前缀
	@RequestMapping("/hello")
	public String hello(Map<String, Object> map) {
		map.put("hello", "from TemplateController.helloHtml");
		// 使用thymeleaf省略文件位置/templates/和后缀.html
		return "/hello";
	}
}

3)配置类与配置文件:Config.java与application.properties

用于配置WebMVC适配器

package test;

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;

@Configuration
@EnableWebMvc
public class Config extends WebMvcConfigurerAdapter{
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
}

在/src/main/resources文件夹下新建application.properties文件,用于配置上下文和thymeleaf

#配置上下文
server.contextPath=/MavenSpringBoot
#配置错误页面的请求路径
#error.path=/error

#配置thymeleaf文件位置
spring.thymeleaf.prefix=classpath:/templates/
#配置thymeleaf后缀
spring.thymeleaf.suffix=.html
spring.thymeleaf.mode=HTML5
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.content-type=text/html
#开发时关闭缓存,否则你必须重新运行spring-boot的main()方法才能看到页面更改的效果。
spring.thymeleaf.cache=false
说明:Maven资源文件的约定目录结构 
Maven的资源文件目录:/src/java/resources
spring-boot项目静态文件目录:/src/java/resources/static
spring-boot项目模板文件目录:/src/java/resources/templates

spring-boot静态首页的支持,即index.html放在以下目录结构会直接映射到应用的根目录下:

classpath:/META-INF/resources/index.html
classpath:/resources/index.html
classpath:/static/index.html
calsspath:/public/index.html

4)前端页面:在/src/main/resources文件夹下新建templates文件再在templates文件夹下新建hello.html与index.html,注意引入thymeleaf

hello.html:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"><!-- 注意引入thymeleaf -->
    <head>
        <title>Hello World!</title>
    </head>
    <body>
        <h1 th:inline="text">Hello.v.2</h1>
        <p th:text="${hello}"></p>
    </body>
</html>

index.html:

<!DOCTYPE HTML>
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org"
      xmlns:sec="http://www.thymeleaf.org/thymeleaf-extras-springsecurity3"><!-- 注意引入thymeleaf -->
<head lang="en">
<meta charset="UTF-8" />
<title>index</title>
</head>
<body>
	你好
</body>
</html>
4 部署

项目右键Run As->Maven clean(清除缓存),然后Run As->Maven install(打包成war)

Spring Boot项目部署到外部Tomcat

之后就可以在target文件夹下找到打包好的war文件(再次生成可以直接将target下的该war删除,然后右键Run As->Maven clean,Run As->Maven install即可再次生成修改过的war包)

Spring Boot项目部署到外部Tomcat

将该war包放入Tomcat的webapps文件夹下,运行Tomcat,Tomcat自动解压war文件后,笔者以自己机器的Tomcat 7.0.77为例(本机),打开浏览器输入http://127.0.0.1:8080/MavenSpringBoot/hello即可看到效果,最后附上笔者的完整war包供参考,CSDN下载:https://download.csdn.net/download/weixin_38187317/10279091

Spring Boot项目部署到外部Tomcat

注:localhost与127.0.0.1与本机IP的区别(百度):

1、127.0.0.1是回送地址,指本地机,一般用来测试使用。回送地址是本机回送地址(Loopback Address),即主机IP堆栈内部的IP地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。
2、localhost是本地DNS解析的127.0.0.1的域名,这个你打开本机的hosts文件就可以看到,一般位于c:\windows\system32\driver\etc下,一般在最后有这么一行:
127.0.0.1        localhost
而这个localhost你可以随意更改,如果改成百度,新浪之类的www.baidu.com重启你再试一下,就会发现很有意思了。
3、本机IP则指你连到网络上的IP地址,可以是内网地址,当然也可能是公网IP,这个就是你实际利用TCP/IP协议与网上计算机通信时使用的IP了。