Spring 项目 基于 Tomcat容器进行部署

文章目录

    • 一、前置知识
    • 二、项目部署
      • 1. 将写好的 Spring 项目先打包成 war 包
      • 2. 查看项目工件(Artifact)是否存在
      • 3. 配置 Tomcat
        • 3.1 添加一个本地 Tomcat 容器
        • 3.2 将项目部署到 Tomcat
      • 4. 运行项目

尽管市场上许多新项目都已经转向 Spring Boot,但对于一些老旧的 Spring 项目,尤其是维护期较长、涉及多个业务的系统,依然需要开发者掌握如何将这些项目正确地部署到 Tomcat 容器中。因此,撰写这篇文章的目的就是为了帮助开发者和运维人员能够在面对老的 Spring 项目时,快速而准确地完成部署任务。

一、前置知识

在传统的 Java Web 项目中,静态资源(如 HTML/CSS/JS/图片等)通常存放在项目的 webapp 目录下。Tomcat 作为常用的 Servlet 容器,会将 webapp 目录作为默认的 Web 应用根目录,并会直接暴露其中的静态文件。

  • 默认行为
    如果在 webapp 目录中存放了资源(例如 webapp/images/logo.png),则可以通过以下 URL 直接访问:

    http://localhost:8080/images/logo.png
    

二、项目部署

1. 将写好的 Spring 项目先打包成 war 包

首先,使用 IDE 或者命令行工具将 Spring 项目打包为 WAR 文件。这个过程将创建一个包含所有 Web 应用内容(包括静态资源、配置文件等)的归档包。

image-20250109100040542

打包完成后,请确认目标路径中确实产生了 .war 文件。

提示:如果使用 Maven,需要在 pom.xml 中将 <packaging>jar</packaging> 改为 <packaging>war</packaging>

2. 查看项目工件(Artifact)是否存在

在某些 IDE(例如 IntelliJ IDEA)中,项目打包后的产物(.war.jar)会被称为 Artifact。因此,在部署到 Tomcat 前,需要先检查该 Artifact 是否已经正常生成。

image-20250109100300580

如果工件(Artifact)不存在,需要手动创建。常见步骤:

  1. 打开 IntelliJ IDEA 的 Project StructureArtifacts
  2. 点击左上角的 “+” 号,选择 “Web Application: Archive (或 exploded)”。
  3. 将你项目的 webapp 目录或输出配置到对应的 Artifact 中。

下面是一个在 IntelliJ IDEA 中创建 webapp 对应源模块作为工件的操作演示:

recording

小提示:创建好以后,名称可以改成与你想要的 Context Path 相匹配的名称,这样前端或其他调用者就可以使用对应路径访问。

3. 配置 Tomcat

当 Artifact 准备完毕后,就可以将此 Artifact 部署到 Tomcat 容器中进行运行或调试。

3.1 添加一个本地 Tomcat 容器

在 IntelliJ IDEA 中,打开 RunEdit Configurations → 点击 “+” 号,选择 Tomcat ServerLocal

image-20250109101333089

在弹出的配置窗口中:

image-20250109101429013

  • 指定 Tomcat 安装目录
    你需要事先下载并解压 Tomcat(可从 Tomcat 官网 获取),然后将解压路径填入 Tomcat Home
  • 选择合适的 JDK
    Tomcat 9 及以上版本通常兼容 JDK 8 或 11,具体根据你项目中使用的 Java 版本来决定。
3.2 将项目部署到 Tomcat

在配置好的 Tomcat Server 设置中,切换到 “Deployment” 选项卡:

image-20250109101832158

点击 “+” → Artifact,选择你在步骤 2 中创建或已有的 .war 文件(或 exploded 形式):

recording

  • Context Path
    在弹出的对话框里,你可以手动设置访问路径,例如 /myapp/demo
    若设置为 /,则相当于部署到根路径,下次访问就不需要带上项目名。

注意:如果你改变了 Artifact 的名称,最终在 Tomcat 中也可以将 Context Path 手动设置为你想要的值。这两者相辅相成,但在实际生产环境中,需要根据前端或接口约定来决定合适的 Context Path。

配置完成后,你可以在 “Deployment” 页面上看到该 Artifact 已经被添加到 Tomcat。

访问的 URL 地址示例
如果 Tomcat 默认端口为 8080,并且 Context Path 设置为 /intelligenceCommand,那么访问路径往往形如:

http://localhost:8080/intelligenceCommand/

image-20250109103942160

4. 运行项目

最后,点击 IntelliJ IDEA 上方的绿色运行按钮(或 Debug 按钮),启动本地 Tomcat。若控制台没有报错,说明部署成功,项目就能通过浏览器访问。

image-20250109102848965

  • 控制台输出:

    如果看到如下信息,表示服务器已正常启动:

    image-20250109104621817

  • 访问测试
    在浏览器中输入 http://localhost:8080/myapp(若 Context Path 是 myapp),就能看到你的应用首页或者相关接口数据,说明部署成功。

常见问题

  1. 端口占用问题:如果 8080 端口被占用,你需要在 Tomcat 中修改端口或者关闭占用 8080 的应用。
  2. 资源无法访问 404:检查静态资源是否正确放在 webapp 目录下,并且确认在 .war 包中已经包含这些文件。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/953014.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【学习笔记】数据结构(十一)

外部排序 文章目录 外部排序11.1 外存信息的存取11.2 外部排序的方法11.3 多路平衡归并的实现 - 增加k11.4 置换-选择排序 - 减少m11.5 最佳归并树 外部排序 指的是大文件的排序&#xff0c;即待排序的记录存储在外存储器 上&#xff0c;在排序过程中需进行多次的内、外存之间的…

《跟我学Spring Boot开发》系列文章索引❤(2025.01.09更新)

章节文章名备注第1节Spring Boot&#xff08;1&#xff09;基于Eclipse搭建Spring Boot开发环境环境搭建第2节Spring Boot&#xff08;2&#xff09;解决Maven下载依赖缓慢的问题给火车头提提速第3节Spring Boot&#xff08;3&#xff09;教你手工搭建Spring Boot项目纯手工玩法…

【Linux笔记】Day1

基于韩顺平老师课程记录&#xff1a; https://www.bilibili.com/video/BV1Sv411r7vd 安装CentOS 给CentOS手动分区 分为三个区&#xff1a; boot分区&#xff08;给1G就行&#xff09; 交换分区&#xff08;和内存相关&#xff0c;这里和虚拟机的内存2G一致&#xff09; …

【网络】:网络编程套接字

目录 源IP地址和目的IP地址 源MAC地址和目的MAC地址 源端口号和目的端口号 端口号 VS 进程ID TCP协议和UDP协议 网络字节序 字符串IP和整数IP相互转换 查看当前网络的状态 socket编程接口 socket常见API 创建套接字 绑定端口号 发送数据 接收数据 sockaddr结构…

使用 Multer 上传图片到阿里云 OSS

文件上传到哪里更好&#xff1f; 上传到服务器本地 上传到服务器本地&#xff0c;这种方法在现今商业项目中&#xff0c;几乎已经见不到了。因为服务器带宽&#xff0c;磁盘 IO 都是非常有限的。将文件上传和读取放在自己服务器上&#xff0c;并不是明智的选择。 上传到云储存…

【端云一体化】云函数的使用

前言 为丰富HarmonyOS对云端开发的支持、实现端云联动&#xff0c;DevEco Studio以Cloud Foundation Kit&#xff08;云开发服务&#xff09;为底座、在传统的“端开发”基础上新增“云开发”能力&#xff0c;开发者在创建工程时选择合适的云开发工程模板&#xff0c;即可在De…

YARN 架构组件及原理

一、YARN 体系架构 YARN&#xff08;Yet Another Resource Negotiator&#xff0c;另一种资源协调者&#xff09; 是 Hadoop 2.0 中的资源管理系统&#xff0c;它的基本设计思想是将 MRv1 中的 JobTracker拆分成了两个独立的服务 &#xff1a;一个全局的资源管理器 ResourceMa…

C# GDI+的DrawString无法绘制Tab键的现象

【啰嗦2句】 现在用C#的人很少了吧&#xff1f;GDI更少了吧&#xff1f;所以这个问题估计也冷门。没关系&#xff0c;分享给特定需要的人也不错。 【问题现象】 工作中开发了一个报告编辑器&#xff0c;实现图文排版等功能&#xff0c;用着没什么问题&#xff0c;直到有一天…

最近在盘gitlab.0.先review了一下docker

# 正文 本猿所在产品的代码是保存到了一个本地gitlab实例上&#xff0c;实例是别的同事搭建的。最近又又又想了解一下&#xff0c;而且已经盘了一些了&#xff0c;所以写写记录一下。因为这个事儿没太多的进度压力&#xff0c;索性写到哪儿算哪儿&#xff0c;只要是新了解到的…

春秋云镜——initial

初步认识内网渗透流程 thinkphp外网打点 打开环境后尝试登陆无果&#xff0c;用fscan扫一下看看 fscan.exe -h 39.99.224.87 发现是think PHP漏洞 补充&#xff1a; fscan&#xff1a;一款内网综合扫描工具&#xff0c;方便一键自动化、全方位漏扫扫描。支持主机存活探测、端…

【C++】string的关系运算与比较分析

博客主页&#xff1a; [小ᶻ☡꙳ᵃⁱᵍᶜ꙳] 本文专栏: C 文章目录 &#x1f4af;前言&#x1f4af;基础知识&#xff1a;C 中的 string 关系运算器1. 关系运算器概述2. 字符串比较的本质 &#x1f4af;代码解析与扩展代码例一&#xff1a;相等比较代码解析输出 代码例二&a…

Qt C++读写NFC标签NDEF网址URI

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.1d292c1biFgjSs&ftt&id615391857885 #include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include "QLibrary" …

NVIDIA Clara平台助力医学影像处理:编程案例与实践探索(上)

一、引言 1.1 研究背景与意义 在现代医学领域,医学影像技术已然成为疾病诊断、治疗方案制定以及疗效评估的关键支柱。从早期的 X 射线成像,到如今的计算机断层扫描(CT)、磁共振成像(MRI)、正电子发射断层扫描(PET)等先进技术,医学影像为医生提供了直观、精准的人体内…

【硬件介绍】Type-C接口详解

一、Type-C接口概述 Type-C接口特点&#xff1a;以其独特的扁头设计和无需区分正反两面的便捷性而广受欢迎。这种设计大大提高了用户的使用体验&#xff0c;避免了传统USB接口需要多次尝试才能正确插入的问题。Type-C接口内部结构&#xff1a;内部上下两排引脚的设计虽然可能不…

【数据结构】第1天之Java中的数据结构

前言 众所周知&#xff0c;程序数据结构算法&#xff0c;可见数据结构的重要性。 在Java中&#xff0c;数据结构通常指的是Java集合框架中的类和接口。 Java集合框架提供了一套标准的数据结构&#xff0c;例如列表、集合、映射表等&#xff0c;以及相应的实现类。 今天要分享的…

Open FPV VTX开源之默认MAVLink设置

Open FPV VTX开源之默认MAVLink设置 1. 源由2. 准备3. 连接4. 安装5. 配置6. 测试6.1 启动wfb-ng服务6.2 启动wfb-ng监测6.3 启动QGroundControl6.4 观察测试结果 7. 总结8. 参考资料9. 补充9.1 telemetry_tx异常9.2 DEBUG串口部分乱码9.3 PixelPilot软件问题9.4 偶尔启动卡住 …

Spring Boot 和微服务:快速入门指南

&#x1f496; 欢迎来到我的博客&#xff01; 非常高兴能在这里与您相遇。在这里&#xff0c;您不仅能获得有趣的技术分享&#xff0c;还能感受到轻松愉快的氛围。无论您是编程新手&#xff0c;还是资深开发者&#xff0c;都能在这里找到属于您的知识宝藏&#xff0c;学习和成长…

Redis 为什么要引入 Pipeline机制?

在 Redis 中有一种 Pipeline&#xff08;管道&#xff09;机制&#xff0c;其目的是提高数据传输效率和吞吐量。那么&#xff0c;Pipeline是如何工作的&#xff1f;它又是如何提高性能的&#xff1f;Pipeline有什么优缺点&#xff1f;我们该如何使用 Pipeline&#xff1f; 1、…

Cesium小知识:粒子系统的参数详解

Cesium 的粒子系统通过 ParticleSystem 类提供了一套丰富的参数来控制粒子的生成、行为和外观。以下是这些参数的详细说明,帮助你更好地理解和使用 Cesium 的粒子系统。 基本参数 image (String) - 粒子图像的URL路径。这个图像是每个粒子在渲染时使用的纹理。 startColor (Co…

【数据结构-堆】力扣1834. 单线程 CPU

给你一个二维数组 tasks &#xff0c;用于表示 n​​​​​​ 项从 0 到 n - 1 编号的任务。其中 tasks[i] [enqueueTimei, processingTimei] 意味着第 i​​​​​​​​​​ 项任务将会于 enqueueTimei 时进入任务队列&#xff0c;需要 processingTimei 的时长完成执行。 现…