当前位置: 首页 > news >正文

Tomcat项目部署(单体、聚合项目)

目录

Tomcat目录结构

1、本地部署项目

单体项目

聚合项目

2、远程部署项目

注意事项


        项目主要分为单体项目和聚合项目(多模块项目,它会把应用拆分成多个独立的模块,每个模块都有其特定的职责。这些模块通过依赖管理进行协作,最终组合成一个完整的应用)

部署的方式有本地和远程部署(云服务器)


Tomcat目录结构

Tomcat目录结构:

bin目录:存放tomcat的命令,主要两大类,.sh结尾(Linux命令),.bat结尾(windows命令)

conf目录:主要存放tomcat的配置文件,主要有:

1、server.xml可以设置端口号、设置域名或IP、默认加载的项目、请求编码格式

2、web.xml可以设置tomcat支持的文件类型

3、context.xml可以用来配置数据源之类的

lib目录:主要用来存放tomcat运行需要加载的jar包

logs目录:用来存放tomcat在运行过程中产生的日志文件,非常重要的是在控制台输出的日志

在windows环境中,控制台的输出日志在catalina.xxxx-xx-xx.log文件中
在linux环境中,控制台的输出日志在catalina.out文件中

webapps目录:用来存放应用程序,当Tomcat启动时会加载webapps目录下的应用程序,可以以文件夹、war包、jar包的形式发布应用。

当然,你也可以把应用程序放置在磁盘的任意位置,在配置文件中映射好就行。

work目录:是tomcat运行时的工作区,主要用于存放 Servlet 容器 处理 JSP和编译其后的 Servlet 类文件,还有其他一些临时生成的文件。清空work目录,然后重启tomcat,可以达到清除缓存的作用

ROOT目录:ROOT 目录属于 Web 应用目录,它是 Tomcat 默认的 Web 应用上下文。当访问 Tomcat 服务器的根路径(http://localhost:8080/)时,实际上访问的就是这个目录下的资源。(我图片中把它删除了,其实是有的)


1、本地部署项目

单体项目

先打包项目为war包,对于单体项目,在项目中导入依赖

<build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-war-plugin</artifactId><version>3.3.2</version><configuration><failOnMissingWebXml>false</failOnMissingWebXml> <!-- 适用于 Servlet 3.0+ --></configuration></plugin></plugins>
</build>
<packaging>war</packaging>

        打包好后,在target目录下找到.war包,然后将其部署到tomcat目录下的webapps下,这样启动tomcat后,便可以访问到了

        如果要同时部署多个项目,这样就不能使用一个端口号,会冲突。因此需要在conf/server.xml文件中,进行如下配置:

<?xml version="1.0" encoding="UTF-8"?><Server port="8005" shutdown="SHUTDOWN"><Listener className="org.apache.catalina.startup.VersionLoggerListener" /><Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /><Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /><Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /><Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /><GlobalNamingResources><Resource name="UserDatabase" auth="Container"type="org.apache.catalina.UserDatabase"description="User database that can be updated and saved"factory="org.apache.catalina.users.MemoryUserDatabaseFactory"pathname="conf/tomcat-users.xml" /></GlobalNamingResources>
<!-- 修改位置1:这里配置第一个服务 -->
<Service name="Catalina"><!-- 修改位置2:需要在这里修改端口号--><Connector port="8080" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxParameterCount="1000"/><Engine name="Catalina" 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" /><!-- 修改位置3:path资源目录上下文,docBase:在webapps下导入的war包的位置--><Context path="/" docBase="/root/tomcat/apache-tomcat-8.5.85/webapps/web-1.0-SNAPSHOT" reloadable="true"></Context></Host></Engine></Service><!-- 这里配置第二个服务,name不能重复 --><Service name="Catalina2"><!-- 确保端口号不和其他服务端口号重复 --><Connector port="8082" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443"maxParameterCount="1000"/><Engine name="Catalina2" defaultHost="localhost"><Realm className="org.apache.catalina.realm.LockOutRealm"><Realm className="org.apache.catalina.realm.UserDatabaseRealm"resourceName="UserDatabase"/></Realm><Host name="localhost"  appBase="webapps1"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" /><!-- 这里修改docBase的路径  --><Context path="/" docBase="/root/tomcat/apache-tomcat-8.5.85/webapps/testDemo2-1.0-SNAPSHOT" reloadable="true"></Context></Host></Engine></Service>
</Server>

聚合项目

对于聚合项目

        模块之间会有依赖,比如这个项目SimpleDemo有两个模块:service模块和web模块,web模块依赖于service模块 ,因此需要在web的pom.xml文件中,导入service的依赖。因此需要对service进行打包(package)。任何模块只要package后,都会在本地仓库中存储。因此可以直接坐标导入service依赖:

整体项目架构:

        然后将web项目(根据实际情况)打包,打包成war包后,再将war包放到webapps目录下,然后访问对应的资源即可。

2、远程部署项目

      在官网下载tomcat.tar.gz包,并将该包上传到云服务器上,解压好后,进入里面的webapp目录

        将本地打包好的war包导入,通过在终端输入rz进行选择并导入(无论单体项目还是聚合项目,只要把war包导入即可)

        导入好后,修改tomcat目录下的conf/server.xml文件,修改方式和上面的本地部署一样,注意docBase的路径(在云服务器上的绝对路径),在server.xml文件中修改了端口号,也要注意在云服务器控制台中开放端口号(关了防火墙也得开放)!

              同时也要注意 tomcat版本和代码中servlet版本的兼容性 (重要!),以下是所注意的一些事项:

注意事项

一、将Tomcat项目部署到云服务器上后,可以正常显示首页,但是访问一些接口时出错;但本地是正常的

        原因:Tomcat版本和servlet版本不兼容,云服务器上是Tomcat10+版本,不再支持javax-servlet,将 Servlet API 的包名从 javax.servlet 改为了 jakarta.servlet

所以解决方法方案有两种:1.降级Tomcat版本 2.升级项目依赖包需将项目中的 javax.servlet 依赖迁移至 jakarta.servlet

Tomcat 版本

支持的 Servlet 规范

包名前缀

兼容的 Jakarta/Java EE 版本

Tomcat 10.x+

Servlet 5.0+

jakarta.*

Jakarta EE 9+

Tomcat 9.x

Servlet 4.0

javax.*

Java EE 8

Tomcat 8.5.x

Servlet 3.1

javax.*

Java EE 7

Tomcat 7.x

Servlet 3.0

javax.*

Java EE 6

总结就是:Tomcat9.0以下的版本无法使用Jakarta包,如果是Tomcat10版本以上必须使用Jakarta包

http://www.lryc.cn/news/597692.html

相关文章:

  • LLM中词嵌入向量的 模长 和 角度 的物理含义
  • 【JavaScript】window.location用法
  • 【Vue3】ECharts图表案例
  • ArcGIS Pro从0开始制作中国主图及黄土高原地势区域图
  • PPO:强化学习中的近端策略优化——原理、演进与大规模应用实践
  • 【STM32】FreeRTOS的移植(一)(详细流程)
  • split() 函数在 Java、JavaScript 和 Python 区别
  • 电子设计大赛【摄像头循迹】讲解
  • 第1章第2章笔记
  • 力扣-贪心/动归dp-持续更新中。。。。。。
  • 白盒测试核心覆盖率标准详解文档
  • 【Windows命令手册】Windows中的常用命令,并与 Linux 做比较
  • micro avg、macro avg 和 weighted avg 的区别
  • Oracle19c HINT不生效?
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十一课——车牌识别的FPGA实现(3)车牌字符分割预处理
  • java设计模式 -【策略模式】
  • 闲庭信步使用图像验证平台加速FPGA的开发:第三十二课——车牌识别的FPGA实现(4)车牌字符的分割定位
  • Android组件化实现方案深度分析
  • 向华为学习——学习华为政务数据安全建设指南【附全文阅读】
  • 【机器学习深度学习】生成式模型的评估与验证
  • QPixmap::scaled参数说明
  • 跟著Qcadoo MES系统学习产品设计001
  • 突发限制下的破局之路:国产之光 Lynx 重构 AI 开发安全壁垒
  • [CH582M入门第十步]蓝牙从机
  • Nestjs框架: 基于Prisma的多租户功能集成和优化
  • 【大模型】Hugging Face常见模型格式详解
  • Linux Debian操作系统、Deepin深度操作系统手动分区方案参考
  • 解决Playwright启动报错:Executable doesn‘t exist at .../chrome-linux/chrome
  • 2025年华为HCIA人工智能认证发展前景如何?客观分析!
  • 459. 重复的子字符串