一、概述
代码编写完成后,需要部署到服务器,但部署到服务器对文件格式是有要求,原生的源代码目前是无法支持直接部署到服务器上的。目前有两种主要的文件格式War包和Jar包
,通过一定的机制将源代码变成War包或Jar包,就可以部署到服务器上进行运行。因此,我们必须了解两种文件格式的机制,区别以及应用场景
。
二、War包
War包,全称Web Application Archive
,是Sun提出的一种web应用程序格式。它实际上是一个可以直接运行的web模块,主要用于网站。War包是对项目文件夹进行打包后的结果,其中包含Web项目代码、资源文件、页面(如JSP/HTML)、静态资源(如js、css、图片等)以及WEB-INF目录下的配置文件和运行环境
。在发布时,只需将War包直接放在Tomcat等Web服务器的webapp目录下,然后重启服务即可运行此项目。
2.1 Tomcat机制
Tomcat目录结构: 主要涉及到webapps目录,专门用于存放部署的项目工程
。
在webapps中建立文件夹(项目应用). 例如:HelloProject。 层级目录结构为:
HelloProject: --> 项目名称
WEB-INF: --> 存放项目的核心内容
classes: --> 用于存放Java代码编译后的.class文件
lib: --> 用于存放依赖的Jar文件
web.xml配置文件 --> Web项目全局配置文件.
hello.html --> 静态资源
上述是SSM时代的产物,到了SpringBoot时代,默认是Jar包,但是若想打包成War包,需要进行以下配置:
1. pom.xml配置修改
<packaging>war</packaging>
2. 添加依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<!--排除SpringBoot内置的Tomcat干扰-->
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<!--添加servlet-api依赖,用来打war包-->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
3. 启动类修改
-- 继承SpringBootServletInitializer类
-- 重写configure方法
@SpringBootApplication
public class SpringtestDemoApplication extends SpringBootServletInitializer {
public static void main(String[] args) {
SpringApplication.run(SpringtestDemoApplication.class, args);
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(SpringtestDemoApplication.class);
}
}
最终生成的War包为:
Tomcat部署: 生成war包后,将war包放到Tomcat的webapps目录下,然后启动Tomcat服务器就完成了部署,项目可以被访问到。URL访问路径
为:
URL包括四个部分:协议、主机、端口和资源路径
http: //localhost: 8080 /项目名/资源uri
协议 域名或主机名 端口号 资源路径
整体的访问流程为:
三、Jar包
Jar包,全称Java Archive
,中文名为Java归档文件。它是一种与平台无关
的文件格式,可以将多个文件组合成一个压缩文件。Jar包不仅用于压缩和发布,还用于部署和封装库、组件和插件程序,并可以被编译器和JVM等工具直接使用。SpringBoot项目默认是Jar包,主要流程为:
1. 设置Maven打包插件。使用下述插件可以将应用打包个一个可执行的jar包
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
2. 使用java -jar直接运行即可
四、两者区别和联系
扩展性
:Jar包默认是Tomcat容器;War包可以放在不同的容器(Tomcat, Jetty, Underdo)中,更加灵活。简单性
:jar包可直接通过java -jar来运行;War包需要放到Tomcat下的webapps目录下,启动Tomcat才能运行。应用场景
:rest服务或前后端分离的服务,比较适合Jar包。因为若包含css,js以及html文件,每次小改动后,Jar包都需要重新打包,而war包仅需要覆盖旧的css,js文件即可。
实际环境中,一般都是前后端分离的项目开发,一般都是Jar包。