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

news2025/1/13 22:15:26

文章目录

    • 一、前置知识
    • 二、项目部署
      • 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 包中已经包含这些文件。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Web安全】SQL 注入攻击技巧详解:UNION 注入(UNION SQL Injection)

【Web安全】SQL 注入攻击技巧详解&#xff1a;UNION 注入&#xff08;UNION SQL Injection&#xff09; 引言 UNION注入是一种利用SQL的UNION操作符进行注入攻击的技术。攻击者通过合并两个或多个SELECT语句的结果集&#xff0c;可以获取数据库中未授权的数据。这种注入技术要…

docker安装rabbit后访问报错最佳的几种解决方案

错误通常是由于RabbitMQ的安全配置导致的&#xff0c;RabbitMQ默认配置允许的用户仅能通过localhost访问。这通常出现在RabbitMQ的guest用户上&#xff0c;guest用户默认只能从localhost登录&#xff0c;而无法从其他IP地址进行远程访问。 解决方法&#xff1a; 1. **创建一个…

计科高可用服务器架构实训(防火墙、双机热备,VRRP、MSTP、DHCP、OSPF)

一、项目介绍 需求分析&#xff1a; &#xff08;1&#xff09;总部和分部要求网络拓扑简单&#xff0c;方便维护&#xff0c;网络有扩展和冗余性&#xff1b; &#xff08;2&#xff09;总部分财务部&#xff0c;人事部&#xff0c;工程部&#xff0c;技术部&#xff0c;提供…

spark汇总

目录 描述运行模式1. Windows模式代码示例 2. Local模式3. Standalone模式 RDD描述特性RDD创建代码示例&#xff08;并行化创建&#xff09;代码示例&#xff08;读取外部数据&#xff09;代码示例&#xff08;读取目录下的所有文件&#xff09; 算子DAGSparkSQLSparkStreaming…

Linux - 什么是线程和线程的操作

线程概念 什么是线程: 线程&#xff08;Thread&#xff09;是操作系统能够进行运算调度的最小单位. 它被包含在进程之中, 是进程中的实际运作单位. 一个进程可以包含多个线程. 进程 : 线程 1 : n (n > 1). 进程是系统分配资源的基本单位. 线程则是系统调度的基本单位. 在…

基于YOLOv8的高空无人机小目标检测系统(python+pyside6界面+系统源码+可训练的数据集+也完成的训练模型

目标检测系统【环境搭建过程】&#xff08;GPU版本&#xff09;-CSDN博客 摘要 本文提出了一种基于YOLOv8算法的高空无人机小目标检测系统&#xff0c;利用VisDrone数据集中的7765张图片&#xff08;6903张训练集&#xff0c;862张验证集&#xff09;进行模型训练&#xff0c;…

apollo内置eureka dashboard授权登录

要确保访问Eureka Server时要求输入账户和密码&#xff0c;需要确保以下几点&#xff1a; 确保 eurekaSecurityEnabled 配置为 true&#xff1a;这个配置项控制是否启用Eureka的安全认证。如果它被设置为 false&#xff0c;即使配置了用户名和密码&#xff0c;也不会启用安全认…

一学就废|Python基础碎片,文件读写

文件处理是指通过编程接口对文件执行诸如创建、打开、读取、写入和关闭等操作的过程。它涉及管理程序与存储设备上的文件系统之间的数据流&#xff0c;确保数据得到安全高效的处理。 Python 中的文件模式 打开文件时&#xff0c;我们必须指定我们想要的模式&#xff0c;该模式…

【计算机网络】lab7 TCP协议

&#x1f308; 个人主页&#xff1a;十二月的猫-CSDN博客 &#x1f525; 系列专栏&#xff1a; &#x1f3c0;计算机网络_十二月的猫的博客-CSDN博客 &#x1f4aa;&#x1f3fb; 十二月的寒冬阻挡不了春天的脚步&#xff0c;十二点的黑夜遮蔽不住黎明的曙光 目录 1. 实验目的…

Ollama VS LocalAI:本地大语言模型的深度对比与选择指南

随着人工智能技术的快速发展&#xff0c;大语言模型逐渐成为多个行业的重要工具。从生成内容到智能问答&#xff0c;大模型展现了强大的应用潜力。然而&#xff0c;云端模型的隐私性、使用成本和网络依赖等问题也促使更多用户关注本地化解决方案。Ollama 和 LocalAI 是近年来备…

Python中定位包含特定文本信息的元素

目录 一、为什么需要定位包含文本信息的元素 二、使用Selenium定位包含文本的元素 1. 使用find_element_by_link_text 2. 使用find_element_by_partial_link_text 3. 使用XPath定位包含文本的元素 4. 使用CSS选择器定位包含文本的元素 三、使用BeautifulSoup定位包含文本…

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

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

OpenCV的对比度受限的自适应直方图均衡化算法

OpenCV的对比度受限的自适应直方图均衡化&#xff08;CLAHE&#xff09;算法是一种图像增强技术&#xff0c;旨在改善图像的局部对比度&#xff0c;同时避免噪声的过度放大。以下是CLAHE算法的原理、步骤以及示例代码。 1 原理 CLAHE是自适应直方图均衡化&#xff08;AHE&…

【赵渝强老师】什么是NoSQL数据库?

随着大数据技术的兴起&#xff0c;NoSQL数据库得到了广泛的应用。NoSQL的全称是Not Only SQL&#xff0c;中文含义是不仅仅是SQL。它泛指所有的非关系型数据库&#xff0c;即&#xff1a;在NoSQL数据库中存储数据的模型可能不是二维表的行和列。NoSQL数据库不遵循关系型数据库范…

Linux第一个系统程序---进度条

进度条---命令行版本 回车换行 其实本质上回车和换行是不同概念&#xff0c;我们用一张图来简单的理解一下&#xff1a; 在计算机语言当中&#xff1a; 换行符&#xff1a;\n 回车符&#xff1a;\r \r\n&#xff1a;回车换行 这时候有人可能会有疑问&#xff1a;我在学习C…

于交错的路径间:分支结构与逻辑判断的思维协奏

大家好啊&#xff0c;我是小象٩(๑ω๑)۶ 我的博客&#xff1a;Xiao Xiangζั͡ޓއއ 很高兴见到大家&#xff0c;希望能够和大家一起交流学习&#xff0c;共同进步。* 这一节内容很多&#xff0c;文章字数达到了史无前例的一万一&#xff0c;我们要来学习分支与循环结构中…

【学习笔记】理解深度学习和机器学习的数学基础:数值计算

深度学习作为人工智能领域的一个重要分支&#xff0c;其算法的实现和优化离不开数值计算。数值计算在深度学习中扮演着至关重要的角色&#xff0c;它涉及到如何在计算机上高效、准确地解决数学问题。本文将介绍深度学习中数值计算的一些关键概念和挑战&#xff0c;以及如何应对…

DolphinScheduler自身容错导致的服务器持续崩溃重大问题的排查与解决

01 问题复现 在DolphinScheduler中有如下一个Shell任务&#xff1a; current_timestamp() { date "%Y-%m-%d %H:%M:%S" }TIMESTAMP$(current_timestamp) echo $TIMESTAMP sleep 60 在DolphinScheduler将工作流执行策略设置为并行&#xff1a; 定时周期调度设置…

Python学习(三)基础入门(数据类型、变量、条件判断、模式匹配、循环)

目录 一、第一个 Python 程序1.1 命令行模式、Python 交互模式1.2 Python的执行方式1.3 SyntaxError 语法错误1.4 输入和输出 二、Python 基础2.1 Python 语法2.2 数据类型1&#xff09;Number 数字2&#xff09;String 字符串3&#xff09;List 列表4&#xff09;Tuple 元组5&…

LLM - Llama 3 的 Pre/Post Training 阶段 Loss 以及 logits 和 logps 概念

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/145056912 Llama 3 是 Meta 公司发布的开源大型语言模型&#xff0c;包括具有 80 亿和 700 亿参数的预训练和指令微调的语言模型&#xff0c;支持…