(三)IDEA部署Tomcat原理

时间:2024-05-19 08:50:57

部署成功之后,发现好多都不太懂,不明白怎么就部署成功了,具体运行方式也不懂,所以就 在网上查了一些资料,还有一些有点不确定的因素,希望和大家一块讨论。

IDEA部署Tomcat原理

上一篇文章部署成功后,我们来对比一下IDEA运行服务器与直接运行服务器有什么异同?

  • IDEA运行如下:
    (三)IDEA部署Tomcat原理
  • 手动运行服务器操作如下
    打开命令行窗口cmd,如果你没有配置环境变量的话,进入到安装Tomcat目录下的bin文件夹下,输入catalina run,界面如下:
    (三)IDEA部署Tomcat原理
    两者对比,发现只有CATALINA_BASE不同
    那么到底发生了什么呢?CATALINA_BASE与CATALINA_HOME有什么不同呢?
    官方解释如下:
    (三)IDEA部署Tomcat原理
    额,英语不太好。
    上面的意思简单来说就是CATALINA_HOME是安装目录,CATALINA_BASE是工作目录。
    这么做的好处就在于可以使用CATALINA_HOME安装目录下的资源,在CATALINA_BASE运行目录下工作,而IDEA就是偷换了其中的CATALINA_BASE工作目录。
    我们进入IDEA运行的CATALINA_BASE目录也就是上方箭头指向的目录,查看自己IDEA运行时显示的文件夹,一般生成路径如下:
    C:\Users{本机名}.IntelliJIdea2018.3\system\tomcat\工程名\conf 你会看到三个文件夹
    (三)IDEA部署Tomcat原理
    你每次建的Web项目都会分配一个tomcat实例,
    这里面conf文件下有着同一份tomcat配置,
    IDEA运行的时候就是用的这里面的配置,
    所以你在Tomcat下面修改的配置就不起作用了,
    而IDEA运行的时候依赖你安装目录下的lib和bin文件夹。

举个例子,你随便创建一个文件夹,将Tomcat里面的这4个文件夹复制过来
(三)IDEA部署Tomcat原理
再创建两个文件runCatalina.bat和stopCatalina.bat
runCatalina.bat内容如下

set "CATALINA_BASE=%cd%"
set "CATALINA_HOME=G:\Installation_Package\Tomcat\apache-tomcat-8.5.39\apache-tomcat-8.5.39"
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
call "%EXECUTABLE%" start

stopCatalina.bat内容如下

set "CATALINA_BASE=%cd%"            <!--设置当前路径为CATALINA_BASE-->
set "CATALINA_HOME=G:\Installation_Package\Tomcat\apache-tomcat-8.5.39\apache-tomcat-8.5.39"
set "EXECUTABLE=%CATALINA_HOME%\bin\catalina.bat"
call "%EXECUTABLE%" stop

在该conf文件夹下server.xml中修改端口号,修改为8088,(可以不修改)

(三)IDEA部署Tomcat原理
然后运行runCatalina.bat,会出现Tomcat界面,说明服务器打开成功
(三)IDEA部署Tomcat原理
而IDEA就是这样实现的,IDEA更换了CATALINA_BASE的内容。
这样方式用途在于你需要在一台机器上面部署多个Tomcat实例,但是你又不想创建多个Tomcat的副本,换句话说就是让这些Tomcat副本拥有自己 的工作目录但是共享Tomcat的代码。
但是此时你肯定还有一个疑问就是,IDEA如何修改CATALINA_BASE的内容的呢?
我在网上查了相关资料,还不是特别确定,有一部分猜测,后期如果明白的话会马上补充上。
(三)IDEA部署Tomcat原理
上方箭头指的是运行启动与停止的脚本所在位置,
先启动安装目录下的batalina.bat文件,
该文件里面给CATALINA_BASE赋值,部分代码如下
(三)IDEA部署Tomcat原理
那么如何将其赋值为C盘下的路径呢?
我个人理解是Tomcat先查找安装目录下文件,确定该文件夹下的文件与IDEA启动时间不符,所以IDEA没有修改Tomcat目录,转而去C盘下的IDEA工程下寻找该配置文件,找到相关配置文件,然后在此路径下加载该路径到CATALINA_BASE的。

如果解释不正确的,希望大家多多指点。