Spring Boot项目部署到外部Tomcat
说明
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
首先给出项目结构:
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)
之后就可以在target文件夹下找到打包好的war文件(再次生成可以直接将target下的该war删除,然后右键Run As->Maven clean,Run As->Maven install即可再次生成修改过的war包)
将该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
注: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了。
上一篇: idea中springboot用外部tomcat启动报错java.lang.NoClassDefFoundError: javax/el/ELManager的解决办法
下一篇: Linux stat获取文件类型
推荐阅读
-
基于Flyway实现简化Spring Boot项目部署
-
Docker Compose部署项目到容器-基于Tomcat和mysql的商城项目(附源码和sql下载)
-
Spring Boot项目添加外部Jar包以及配置多数据源的完整步骤
-
Spring框架学习笔记(6)——阿里云服务器部署Spring Boot项目(jar包)
-
Spring Boot Gradle发布war到tomcat的方法示例
-
Spring boot项目部署到云服务器小白教程详解
-
Vue项目部署在Spring Boot出现页面空白问题的解决方案
-
Eclipse环境下如何配置Tomcat(把项目部署到Tomcat服务器上)
-
vue项目部署到nginx/tomcat服务器的实现
-
Web项目打成war包部署到tomcat时报MySQL Access denied for user 'root'@'localhost' (using password: YES)错误解决方案(推)