IDEA 中 Tomcat 部署 Java Web 项目(Maven 多模块 非 Maven 通用版)

引言

Java Web 开发中,Tomcat 是最常用的 Servlet 容器,而项目类型通常分为 Maven 管理(依赖自动处理、多模块聚合) 和 非 Maven 纯手工管理(手动引入 jar 包、配置项目结构)。本文覆盖 两种项目类型 的 Tomcat 部署全流程,从 IDEA 配置到问题排查,手把手教你打通开发到运行的闭环,解决 90% 部署痛点!

一、环境准备(通用基础)

1. 核心环境

  • JDK:确保安装 JDK 1.8+(示例用 1.8 Oracle OpenJDK),通过 java -version 验证。
  • Tomcat:本地安装 Tomcat 8.5+(如 apache-tomcat-8.5.29),记住安装目录(后续配置用)。
  • IDEA:旗舰版或社区版(社区版需手动配置部分功能,本文以旗舰版为例)。

二、场景 1:Maven 多模块 Java Web 项目部署

1. 项目特征

  • 含 pom.xml,通过 Maven 管理依赖和多模块(如父模块 hami_parent + 子模块 hami_protal)。
  • 构建流程:clean → install 自动编译、打包,适合复杂聚合项目。
  •  依次为每个部分添加本地tomcat-server

       修改名字,热部署,端口号,jdk都不要填错

      

这里添加相应的 

点击apply ->ok  运行tomcat

(2)Maven 构建:生成 War 包
  • 右侧打开 Maven 面板,找到父模块(如 hami_parent [root]):
    • 先双击 Lifecycle → clean(清理旧构建产物)。
    • 再双击 Lifecycle → install(编译代码 → 打包成 war → 安装到本地仓库)。
  • 控制台输出 BUILD SUCCESS 后,检查子模块 target 目录,生成 xxx.war 和 xxx.war exploded(部署用解压包)。

(3)将生成的war包与jar包一并复制到tomcat的webapps路径下
 

(4)配置server.xml文件 

将下面的代码插入到server.xml文件中,注意这是我们自定义的<Service>,要与 自带的分开,防止嵌套

<Service name="Catalina1"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8083" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8011" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_console-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina2"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8084" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8012" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_file-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service><Service name="Catalina3"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8085" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8013" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="hami_protal-1.0-SNAPSHOT" path="/" reloadable="true"/></Host></Engine></Service>

 (5)启动tomcat

发现我们的端口号启动成功:

并且 webapps目录下生成了相应的war,jar包目录,现在我们就可以 url直接访问我们的项目

 

 

这就说明部署成功了 

三、场景 2:非 Maven Java Web 项目部署(以 BookShop 为例)

1. 项目特征

  • 无 pom.xml,手动管理 jar 包(如 commons-codec-1.9.jar 放 WEB-INF/lib)。
  • 需手动配置项目结构、依赖、Web 模块,适合简单 Demo 或旧项目迁移。

2. 关键配置步骤

(1)Project Structure 全流程配置
  • 打开 File → Project Structure,按以下标签逐步配置:
① Project 标签(基础环境)
  • Name:项目名(如 BookShop)。
  • SDK:选 JDK 1.8
  • Language level:选 8 - Lambdas, type annotations
② Modules 标签(模块与依赖)
  • 选项目模块(如 BookShop):
    • Sources:标记 src 为源码目录(蓝色),test 为测试目录(绿色,可选)。
    • Dependencies
      • 点击 + → JARS or directories,引入 WEB-INF/lib 下的所有 jar 包(如 commons-codec-1.9.jarmysql-connector-java-5.1.5.jar)。
③ Facets 标签(Web 模块识别)
  • 点击 + → Web,关联项目的 web.xml(路径:WebContent/WEB-INF/web.xml):
    • 确认 Deployment Descriptors 中 web.xml 路径正确。
    • 配置 Web Resource Directories(如 WebContent 目录,作为静态资源根路径)。
④ Artifacts 标签(部署产物配置)
  • 点击 + → Web Application: Exploded → From Modules...,选项目模块(如 BookShop):
    • 生成 BookShop:war exploded(解压后的 Web 应用目录,用于 Tomcat 部署)。
    • 检查 Output Layout,确保 WEB-INF/classes(编译输出)和 WEB-INF/lib(jar 包)已包含。

 选中自己的项目

2)Tomcat Server 配置(与 Maven 项目类似)
  • 顶部 Run → Edit Configurations → 新建 Tomcat Server → Local
    • Server 标签:同 Maven 项目(选 Tomcat 目录、JDK、端口)。
    • Deployment 标签
      • 点击 + → Artifact,选 BookShop:war exploded(非 Maven 项目的解压部署包)。
    • 热部署:同 Maven 项目(选 Update classes and resources)。

(3)启动验证

  • 启动 Tomcat 后,访问 http://localhost:8085/BookShop/(路径与 Application context 一致),验证页面或接口。

3.将项目部署到tomcat

   在idea部署项目之后会产生一个classes文件夹,找到里面的_war_exploded文件夹

复制到tomcat的webapps里

配置server.xml文件

 

  <Service name="Catalina1"><!-- 每个项目的端口号也要进行区分,保证不被占用 --><Connector port="8088" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" URLEncoding="UTF-8"/><!-- 这里的AJP端口同样也要进行区分 --><Connector port="8010" protocol="AJP/1.3" redirectPort="8443" secretRequired=""/><Engine name="Catalina1" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps"unpackWARs="true" autoDeploy="true"><Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"prefix="localhost_access_log" suffix=".txt"pattern="%h %l %u %t &quot;%r&quot; %s %b" /><!-- 这里是想要部署的对应项目的名称 --><Context docBase="qcby2502_war_exploded" path="/" reloadable="true"/></Host></Engine></Service>

 启动tomcat,查看日志 8088端口启动成功

验证:

 

部署成功了

四、总结

  • Maven 项目:依赖管理便捷,适合复杂多模块,通过 clean/install 自动构建,部署流程更标准化。
  • 非 Maven 项目:需手动配置依赖和结构,适合简单场景或旧项目,重点关注 Facets 和 Artifacts 配置。

无论哪种类型,掌握 Tomcat 热部署 和 Project Structure 核心配置 是关键!遇到问题先检查日志(IDEA 控制台 + Tomcat catalina.out),结合本文解决方案,部署效率直接拉满~

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

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

相关文章

当建筑学会“行走”:MiC建筑如何重塑医疗空间

当塔吊林立的工地被智能化工厂取代&#xff0c;当混凝土现浇的轰鸣被精密模块的无声拼接覆盖&#xff0c;建筑行业正经历着自钢筋混凝土革命以来最深刻的范式转移。模块化集成建筑&#xff08;MiC&#xff09;技术&#xff0c;这场以“制造组装”为核心的新型工业化浪潮&#x…

计算机网络八股第二期

计算机网络八股第二期 1.讲一讲从输入网址到网页显示之间发生了什么&#xff08;从网络的角度&#xff09; 想想一下你从网店买一本书&#xff0c;从输入网址到网页显示其实和你从网店买一本书差不多&#xff0c;网店发给你的是实体而网络传输的是文字&#xff0c;图片等等资…

FPGA基础 -- Verilog 的值变转储文件(VCD:Value Change Dump)

Verilog 的“值变转储文件&#xff08;VCD&#xff1a;Value Change Dump&#xff09;”&#xff0c;这是一项在仿真调试中至关重要的技术&#xff0c;可以帮助你“看见”RTL中每个信号随时间的变化过程。 一、什么是 Verilog 的值变转储文件&#xff08;VCD&#xff09; VCD …

流水灯芯片74HC138 → 74HC164 → 74HC595核心功能、引脚作用及芯片定位

一、74HC138&#xff1a;精准的“8选1开关” 核心作用 用3根控制线&#xff08;A0-A2&#xff09;实现8路严格单选&#xff0c;同一时刻仅1路输出低电平&#xff08;其他7路高电平&#xff09;。 &#x1f4cc; 本质&#xff1a;二进制地址译码器&#xff0c;不是数据寄存器。…

鸿蒙Next仓颉语言开发实战教程:懒加载

今天要分享的是仓颉开发语言中的懒加载。 先和初学者朋友们解释一下什么是懒加载。懒加载在代码中叫做LazyForEach&#xff0c;看到名字你一定能猜到它和ForEach的功能类似。只不过和ForEach的一次性加载所有数据不同&#xff0c;懒加载会根据屏幕可使区域按需加载数据&#x…

Linux 内核同步管理全解:原理 + 实战 + 考点

&#x1f525; 推荐&#xff1a;《Yocto项目实战教程&#xff1a;高效定制嵌入式Linux系统》 京东正版促销&#xff0c;欢迎支持原创&#xff01; 链接&#xff1a;https://item.jd.com/15020438.html 一、为什么需要同步机制&#xff1f; Linux 是一个支持 多核并发 抢占式调…

效果成本双突破!快手提出端到端生成式推荐系统OneRec!

近日&#xff0c;快手推荐模型团队提出了一个端到端生成式推荐系统OneRec&#xff0c;该系统采用Encoder-Decoder架构&#xff0c;引入了基于奖励机制的偏好对齐方法&#xff0c;借助强化学习增强模型效果&#xff0c;可在奖励模型引导下直接生成契合用户偏好的视频内容。通过极…

flex布局 项目属性

<!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>flex布局 项目属性</title> <link href"css/k.css" rel"stylesheet" /> </head> <bod…

SpringBoot扩展——应用Web Service!

应用Web Service Web Service是一个SOA&#xff08;面向服务的编程&#xff09;架构&#xff0c;这种架构不依赖于语言&#xff0c;不依赖于平台&#xff0c;可以在不同的语言之间相互调用&#xff0c;通过Internet实现基于HTTP的网络应用间的交互调用。Web Service是一个可以…

EasyExcel学习笔记

EasyExcel学习 一、EasyExcel简介 一、EasyExcel是什么 EasyExcel是一个基于Java的简单、省内存的读写Excel的阿里开源项目。在尽可能节约内存的情况下支持读写百M的Excel。 官网&#xff1a;https://easyexcel.opensource.alibaba.com/ 学习Easyexcel前需要了解导入和导出…

day4课程

1整体认识和路由配置 2二级分类面包屑导航实现 3基础商品列表渲染 4列表筛选功能实现 5列表无限加载功能实现 6定制路由滚动行为 7详情页整体认识和路由配置 8详情页基础数据渲染 9详情页基础组件封装和数据渲染 10适配不同title和数据列表 11小图切换大图 12滑块跟随鼠标移动 …

kubeadm worker节点加入master失败

文章目录 1、操作2、问题现象3、问题原因4、问题解决4.1、重新生成token4.2、重新生成hash值 5、验证 1、操作 执行以下命令&#xff0c;让worker节点加入到master节点 kubeadm join 103.123.222.241:6443 --token vxe3v1.wzpnks8v1vbbtsu0 --discovery-token-ca-cert-hash s…

二十二、【用户管理与权限 - 篇四】后端权限定义:模型与 API 实现

【用户管理与权限 - 篇四】后端权限定义:模型与 API 实现 前言准备工作第一部分:设计并创建 `Permission` 模型第二部分:更新 `Role` 模型以关联 `Permission`第三部分:生成并应用数据库迁移第四部分:创建 Serializers第五部分:创建 ViewSets第六部分:注册 API 路由第七…

猜数字小游戏微信流量主小程序开源

这个智力小游戏采用了数字华容道的玩法&#xff0c;玩家需要通过移动数字方块&#xff0c;将数字按顺序排列完成游戏。代码严格遵循微信小程序的目录结构&#xff0c;包含以下部分&#xff1a; 完整的小程序配置文件&#xff08;app.js、app.json、app.wxss&#xff09; 游戏页…

探秘阿里云EBS存储:云计算的存储基石

一、引言 在云计算时代&#xff0c;数据如同企业的生命线&#xff0c;数据存储的重要性不言而喻。随着企业数字化转型的加速&#xff0c;海量数据的存储与高效管理成为亟待解决的问题。云存储以其卓越的灵活性、可扩展性和成本效益&#xff0c;逐渐成为众多企业的首选方案。在…

音视频之H.264的可伸缩编码SVC

系列文章&#xff1a; 1、音视频之视频压缩技术及数字视频综述 2、音视频之视频压缩编码的基本原理 3、音视频之H.264/AVC编码器原理 4、音视频之H.264的句法和语义 5、音视频之H.264/AVC解码器的原理和实现 6、音视频之H.264视频编码传输及其在移动通信中的应用 7、音视…

Anaconda安装env,yml一直卡在Solving environment:不动

如果在使用conda env creat -f env.yml时候&#xff0c;anaconda一直卡住&#xff0c;如下 可以尝试下面操作。 conda config --set solver libmamba # 使用libmamba引擎&#xff08;Conda≥22.11&#xff09; conda env create -f env.yaml # 重新尝试

榕壹云婚恋相亲系统:ThinkPHP+UniApp打造高效婚配平台

引言 在数字化浪潮下,婚恋相亲行业正加速向线上迁移。榕壹云公司基于市场需求与技术积累,开发一款功能完备、技术开源的婚恋相亲小程序系统,为单身人士提供高效、安全的婚恋平台。本文将围绕系统背景、客户定位、核心技术、功能模块及优势场景展开详细解析,助力开发者与技…

查询docker-compose 部署的milvus 请求日志

在 Docker Compose 部署的 Milvus 中,日志默认存储在各个服务的容器内。以下是定位和查询日志的方法: 1. 查看实时日志 使用 docker-compose logs 命令查看实时日志: bash # 查看所有服务的日志 docker-compose logs -f# 仅查看 Milvus 服务日志(服务名以 docker-compos…

Rsync实操

Rsync实操 一.rsync命令 #类似于cp[rootuser2 ~]# rsync info.sh root192.168.168.130:/rootroot192.168.168.130s password: [rootuser1 ~]# lsanaconda-ks.cfg ceph-release-1-1.el7.noarch.rpm info.sh 二、使用rsync备份push方式 服务器&#xff1a;server 192.168.168…