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包,对于单体项目,在项目中导入依赖
org.apache.maven.plugins maven-war-plugin 3.3.2 false war
打包好后,在target目录下找到.war包,然后将其部署到tomcat目录下的webapps下,这样启动tomcat后,便可以访问到了
如果要同时部署多个项目,这样就不能使用一个端口号,会冲突。因此需要在conf/server.xml文件中,进行如下配置:
聚合项目
对于聚合项目:
模块之间会有依赖,比如这个项目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包