一、背景讲述,为什么需要支持这种场景?
在实际应用中,通过各种构建工具如Maven或Gradle来生成JAR文件或WAR文件,以便方便地进行打包和部署。SpringBoot默认提供内嵌的tomcat,所以打包直接生成jar包,用java -jar
命令就可以启动。但是,有时候更希望一个tomcat来管理多个项目,这种情况下就需要项目是war格式的包,而不是jar格式的包。
二、 Jar包和War包傻傻分不清楚
2.1 Jar包介绍
别人写好的类,并且打包好了,你可以用这些jar包。引入到你的项目中,然后你就可以直接使用这些jar包中的类还有属性了,这类jar包一般放在lib目录下。
-
Java Archive,Java 归档文件,JAR文件(Java Archive)
-
通常包含一个或多个Java类文件和相关资源文件,如图像、声音等。
-
它们主要用于将Java类库、应用程序和插件打包并分发给其他开发人员和使用者。
-
与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。
-
JavaSE程序可以打包成Jar包
-
JAR 文件格式,以流行的 ZIP 文件格式为基础。
-
与ZIP文件的区别,Jar可用于:
- 压缩和发布
- 部署和封装库、组件和插件程序
- 被编译器和JVM工具直接使用
-
JAR中包含特殊文件:manifests 和部署描述符,作用:指示工具,如何处理特定的JAR
2.2 War包介绍
war包是javaweb程序打的包,一个war包可以理解为一个web项目,里面是项目的所有东西
- WAR文件(Web Archive)
- 一种特殊类型的JAR文件,专门用于将Web应用程序打包并部署到Java Web服务器上。
- Sun提出的一种web应用程序格式,可以直接运行的web模块
- 与JAR类似,是很多文件的压缩包。
- 使用场景:用于网站中,打成包部署到容器中
- Tomcat中的WAR包:将war包放置在其\webapps\目录下,然后启动Tomcat,这个包就会自动解压,就相当于发布了。
- WAR包中的文件按照一定目录结构来组织。
- WAR文件必须有一个名为Web-INF的目录,其中包含Web应用程序的配置文件和类文件。
- war包里面包含什么内容呢?WAR文件通常包含,
- 代码编译成的class文件
- 依赖的包
- 配置文件
- 所有的网站页面、Web资源文件(JSP、Servlet、HTML、CSS、JS文件)
三、如何部署war包到Tomcat(将war文件放到webapps文件夹中)
1)使用场景:开发打war包给测试,比如说,现在测试拿到一个war包,名字叫test.war。
2) 打开Tomcat的安装路径 ,假设是“D:\Tomcat\apache-tomcat-7.0.68”
3)进入到 webapps文件夹中,把 test.war放到 webapps文件夹。
3)启动Tomcat。
如果不需要更改配置文件:到这一步就可以了。
在浏览器输入“http:localhost:tomcat_port/test即可打开test项目的 index.jsp页面(port是自己的端口号)。
如果test项目没有index.jsp页面,那就需要打开其他相应的页面。
四、基于SpringBoot将项目打包成war包,并且部署到Tomcat中具体步骤
SpringBoot同样提供了解决方案,只需要简单的几步更改就可以了,这里提供maven项目的解决方法:
主要步骤:
(1)修改启动类,继承SpringBootServletInitializer,重写configure方法
(2)修改pom文件。增加package标签以及新增dependencies
4.1 步骤1:继承SpringBootServletInitializer,并重写configure方法
将项目的启动类Application.java,继承SpringBootServletInitializer,并重写configure方法
@SpringBootApplication
public class Application extends SpringBootServletInitializer {
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(Application.class);
}
public static void main(String[] args) throws Exception {
SpringApplication.run(Application.class, args);
}
}
4.2 步骤2:增加package标签
步骤2: 在pom.xml文件中,project下面增加package标签
<packaging>war</packaging>
4.3 步骤3:增加Tomcat依赖
步骤3:在pom.xml文件中,dependencies下面添加
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
只需要以上3步就可以打包成war包,并且部署到tomcat中了。
需要注意的是,这样部署的request url,需要在端口后,加上项目的名字,才能正常访问。
SpringBoot更加强大的一点就是:即便项目是以上配置,依然可以用内嵌的tomcat来调试,启动命令和以前没变,还是:mvn spring-boot:run。
如果需要在StringBoot中加上request前缀,需要在application.properties中添加server.contextPath=/prefix/
即可。
其中prefix为前缀名。这个前缀会在war包中失效,取而代之的是war包名称,如果war包名称和prefix相同的话,那么调试环境和正式部署环境就是一个request地址了。
注意: 配置完过后,可能会出现无法在Idea Intellij运行报错的情况。与
public static void main(String[] args) {
SpringApplication.run(Application.class, args);
}
此配置出现冲突.但是不影响maven打包。
如果要在idea运行测试,建议注释之前的配置。或者打包(war)放到本地tomcat启动测试.