之前使用 SpringBoot 所做的开发,都是将项目打包成 Jar 的,但是如果是作为一个 Web 项目,最好是将项目打包成 War。

1. Jar 包和 War 包的区别

1、概念

jar 包:JAR 包是类的归档文件,JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。

war 包: war 包是 JavaWeb 程序打的包,war 包里面包括写的代码编译成的 class 文件,依赖的包,配置文件,所有的网站页面,包括 html,jsp 等等。一个 war 包可以理解为是一个 web 项目,里面是项目的所有东西。

2、目录结构

jar 包里的 com 里放的就是 class 文件,配置文件,但是没有静态资源的文件,大多数 JAR 文件包含一个 META-INF 目录,它用于存储包和扩展的配置数据,如安全性和版本信息。

而 war 包里的 WEB-INF 里放的 class 文件和配置文件,META-INF 和 jar 包作用一样,war 包里还包含静态资源的文件

3、总结起来就是有两点不同:

war 包和项目的文件结构保持一致,jar 包则不一样。

jar 包里没有静态资源的文件(index.jsp)

4、部署项目的区别

部署普通的 spring 项目用 war 包就可以,部署 springboot 项目用 jar 包就可以,因为 springboot 内置 tomcat。

2. 创建 SpringBoot 项目(Packaging 方式指定为 war)

在 IntelliJ IDEA 中点击 File -> New -> Project...,选择 Spring Initializr,点击 Next,如下:

在 Project Metadata 界面输入 Group 和 Artifact,注意要将 Packaging 由默认的 Jar 改为 War,如下:

在 Dependencies 界面,勾选 Web 下的 Spring Web 和 Template Engines 下的 Thymeleaf,如下:

注:在 SpringBoot 项目中访问 html 文件时,必须添加 Thymeleaf 依赖,否则无法找到 html 文件,如果在这里没有勾选 Thymeleaf,可以在创建项目后在 pom.xml 中手动加入 Thymeleaf 依赖,如下:

    org.springframework.boot    spring-boot-starter-thymeleaf

输入项目名称,点击 Finish 完成,如下:

项目创建完成后,pom.xml 文件的内容如下:

<?xml version="1.0" encoding="UTF-8"?>         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">    4.0.0            org.springframework.boot        spring-boot-starter-parent        2.2.6.RELEASE                com.springboot    web    0.0.1-SNAPSHOT    war    web    Demo project for Spring Boot            1.8                            org.springframework.boot            spring-boot-starter-thymeleaf                            org.springframework.boot            spring-boot-starter-web                            org.springframework.boot            spring-boot-starter-tomcat            provided                            org.springframework.boot            spring-boot-starter-test            test                                                org.junit.vintage                    junit-vintage-engine                                                                                org.springframework.boot                spring-boot-maven-plugin                        

3. SpringBoot Jar 项目和 SpringBoot War 项目的差别

项目创建完成后,来看一下 SpringBoot Jar 项目和 SpringBoot War 项目的差别,注意这些差别也是创建 SpringBoot Jar 项目之后要将项目改成 SpringBoot War 方式打包的关键。

1、pom.xml 中的 packaging 的是 war 而不是 jar,如下:

2、pom.xml 文件中含有一个 spring-boot-starter-tomcat 的依赖,如下:

这个依赖的作用,按网上的说法是排除 SpringBoot 中内置的 Tomcat 的。

另外,按网上的说法,排除 SpringBoot 中内置的 Tomcat 还有另一种实现方式,如下:

也就是在 spring-boot-starter-web 依赖中加上上图中红线框中的内容。

3、继承 org.springframework.boot.web.servlet.support.SpringBootServletInitializer 实现 configure 方法

从项目的目录结构看,相比 Jar 项目,War 项目在启动类 Application 同级的目录下多了一个 ServletInitializer 类,如下:

ServletInitializer 类继承 SpringBootServletInitializer 类,其内容如下:

package com.springboot.web;import org.springframework.boot.builder.SpringApplicationBuilder;import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;public class ServletInitializer extends SpringBootServletInitializer {    @Override    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {        return application.sources(WebApplication.class);    }}

另外,按网上的说法,除了上面单独写一个 ServletInitializer 类外,还可以在启动类 Application 中继承 SpringBootServletInitializer 类并实现 configure 方法,如下:

以上是 SpringBoot War 项目和 Jar 项目的差别,同时也是将 Jar 打包方式改为 War 打包方式的三个步骤。

4. SpringBoot 的 html 页面

在项目目录结构的 main/resources/templates 下创建一个 welcome.html 文件,如下:

welcome.html 文件的内容如下:

          第一个 SpringBoot HTML页面        

Welcome to Spring Boot!!!

然后在配置文件 application.yml 中添加 thymeleaf 相关的配置,如下:

server:  port: 8080spring:  thymeleaf:    prefix: classpath:/templates/

接着创建 controller/WecomeController.java 类,实现跳转到 welcome.html 的接口,如下:

package com.springboot.web.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;import java.util.HashMap;@Controllerpublic class WelcomeController {    @RequestMapping("/welcome")    public String welcomeHtml(HashMap map) {        map.put("parameter", "欢迎进入 HTML 页面");        return "/welcome";    }}

直接在 IntelliJ IDEA 中运行,然后在浏览器地址栏输入 http://localhost:8080/welcome,显示如下:

5. 打包生成 war 文件,部署到 Tomcat

展开右侧边栏的 Maven Projects,双击 web/Lifecycle 下的 package,如下:

编译结束没有出错,就会在项根目录下的 target 文件夹下看到生成的 war 文件 web-0.0.1-SNAPSHOT.war,如下:

将 web-0.0.1-SNAPSHOT.war 上传至云服务器的 tomcat-web 目录下的 webapps 目录,然后用下面的命令创建 tomcat 容器,同时将当前目录下的 webapps/web-0.0.1-SNAPSHOT.war 挂载到容器内的 /usr/local/tomcat/webapps/web-0.0.1-SNAPSHOT.war,如下:

[root@VM_0_14_centos tomcat-web]# docker run -d -p 8080:8080 --name tomcat-web --network my-network -v $PWD/logs:/usr/local/tomcat/logs -v $PWD/webapps/web-0.0.1-SNAPSHOT.war:/usr/local/tomcat/webapps/web-0.0.1-SNAPSHOT.war tomcat:9.0.33-jdk8-openjdk[root@VM_0_14_centos tomcat-web]# docker psCONTAINER ID     IMAGE                  COMMAND          CREATED        STATUS         PORTS               NAMES7fa7ab090217     tomcat:9.0.33-jdk8-openjdk   "catalina.sh run"   4 seconds ago    Up 3 seconds     0.0.0.0:8080->8080/tcp   tomcat-web[root@VM_0_14_centos tomcat-web]#

然后打开浏览器,在地址栏输入 http://212.64.47.192:8080/web-0.0.1-SNAPSHOT/welcome,就可以访问到 welcome.html 页面了,如下:

注意,上面的 URL 与直接在 IntelliJ IDEA 中运行时是不同的,必须在 RequestMapping 的 /welcome 前面带上 war 文件的名称,即 web-0.0.1-SNAPSHOT。因为在 Tomcat 容器创建后,在 webapps 目录内会将 web-0.0.1-SNAPSHOT.war 解压得到一个 web-0.0.1-SNAPSHOT 目录,如下:

root@0bfd6dcbe71d:/usr/local/tomcat# ls webapps/ -lhatotal 19Mdrwxr-xr-x  1 root root  4.0K Apr  1 14:34 .drwxr-sr-x  1 root staff 4.0K Oct 19 02:16 ..drwxr-xr-x  3 root root  4.0K Oct 19 02:16 ROOTdrwxr-xr-x 15 root root  4.0K Oct 19 02:16 docsdrwxr-xr-x  6 root root  4.0K Oct 19 02:16 examplesdrwxr-xr-x  5 root root  4.0K Oct 19 02:16 host-managerdrwxr-xr-x  5 root root  4.0K Oct 19 02:16 managerdrwxr-x---  5 root root  4.0K Apr  1 14:34 web-0.0.1-SNAPSHOT-rw-r--r--  1 root root   19M Apr  1 14:33 web-0.0.1-SNAPSHOT.warroot@0bfd6dcbe71d:/usr/local/tomcat#

打包tomcat没有xml文件_Spring Boot 项目打包 War 并部署到 Tomcat相关推荐

  1. spring boot 项目打成war包部署到服务器

    这是spring boot学习的第二篇了,在上一篇已经整合了spring boot项目了,如果还有小伙伴没有看得可以先去看第一篇 基础整合spring boot项目 到这里的小伙伴应该都是会整合基本的 ...

  2. springboot项目识别不了pom.xml文件_Spring Boot Web 项目教程,Spring Boot的环境配置

    这节课,我们来学习一下SpringBoot的环境配置,在SpringBoot中,所有的配置都写在application.properties中: 我们启动项目,默认端口是8080,我们现在给他配置一个 ...

  3. IDEA右键快捷创建Xml文件模板 IDEA如何创建xml文件 Spring boot项目xml配置类模板

    可扩展标记语言,标准通用标记语言的子集,简称XML.是一种用于标记电子文件使其具有结构性的标记语言. 在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如 ...

  4. SpringBoot微服务项目构建war包 部署排除指定jar

    文章目录 一.构建war包部署SpringBoot项目 二.构建war包 2.1. 适用范围 2.2. 构建war包 三.部署排除指定jar 3.1. 下载排除插件 3.2. 搜索部署排除指定jar ...

  5. 将Spring Boot项目打包成jar包war包

    任务一:将Spring Boot项目打包成jar包 1.在pom.xml文件中添加依赖 2.通过cmd命令行来进行打包jar包(首先进入项目的目录中) 3.进入项目中的target目录下查看包 4.使 ...

  6. spring项目搭建云服务器,Spring Boot项目打包并部署到云服务器

    Spring Boot项目打包并部署到云服务器 一.云服务器的环境 OS: CentOS 7 Jdk 1.8 Spring Boot自动集成Tomcat,不需要单独配置 二.本地Spring Boot ...

  7. Spring Boot项目打包Docker镜像

    Spring Boot项目打包Docker镜像 1.编写 Dockerfile 文件 2.加入 spring boot 根路径, 进行 mvn package 打包 3.打包上传项目并解压 4.进入 ...

  8. mvn打包并部署本地tomcat_Maven项目打包成war包部署到Tomcat的方法

    Maven项目打包成war包部署到Tomcat的方法 有关于 Maven 项目的打包部署,我这里用的是 Eclipse 编辑器,以此来做个简单的记录. 实践环境 操作系统: Windows IDE: ...

  9. 解决tomcat中temp文件夹出现项目的副本的情况

    解决tomcat中temp文件夹出现项目的副本的情况 TomcatMyeclipseXMLGoogle  在最近开发过程中出现过这样的情况,当我在myeclipse发布项目的时候,在tomcat的te ...

最新文章

  1. 轻松解决Windows7声卡驱动不全问题
  2. 深入讨论PHP5对象复制技术
  3. 四位先行进位电路逻辑表达式_四位超前进位加法器
  4. Linux Sendfile的优势
  5. 将应用程序集成为Heroku附加组件
  6. 2016/1/4 学习笔记 数据类型转换 注释 语句
  7. LeetCode - Easy - 119. Pascal‘s Triangle II
  8. android 队列执行动画,Android 重学系列 渲染图层-图元缓冲队列初始化
  9. 微软Windows 11正式发布!(附安装教程)
  10. EXCEL 2016常用知识--Excel基础操作
  11. java 毫秒转分钟和秒_java - 将毫秒转换为分钟和秒? - 堆栈内存溢出
  12. 在马来西亚如何回国?
  13. 课程设计 --- 黑白棋中的 AI
  14. Android DataBinding RecyclerView AAPT: error: attribute adapter (aka......) not found.
  15. Roboware-studio使用笔记
  16. STM32+ESP8266+MQTT微信小程序SoftAP一键配网接入腾讯物联网平台
  17. 数据分析Power BI案例:餐饮数据分析与可视化
  18. 服务器插在显示屏上不亮,主机正常运行,但显示屏不亮,我将教您如何自行解决!...
  19. windows无法访问共享(linux,smb)
  20. 宋词:一剪梅,雨打梨花深闭门。唐寅

热门文章

  1. Learn OpenGL (一):打开窗口
  2. Revit结构2021-2022从零到精通
  3. 怎么编写段错误(Segmentation fault)的程序
  4. 二叉树:二叉搜索树的创建和插入
  5. STL模拟实现1.0 -- list和iterator模拟实现和简单分析
  6. 【代码笔记】Web-CSS-CSS id和Class选择器
  7. 服务器 主动 推送 客户端浏览器 消息***
  8. 我的JavaScript学习笔记
  9. python操作mysql数据库实现增删改查
  10. cocos2d-x注意事项(十)Lua发展飞机战争-4-创建主角