IDEA中引入和启动TOMCAT的本质

Posted 于大圣

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IDEA中引入和启动TOMCAT的本质相关的知识,希望对你有一定的参考价值。

在通过IDEA开发WEB应用时需要引入TOMCAT服务器,启动服务器后WEB应用能够正常访问,但这时你去TOMCAT安装目录下的webapps目录和conf/server.xml配置中没有找到关于当前应用的蛛丝马迹,难道引入了个寂寞?不是的,在上一篇《Tomcat映射虚拟目录的三种方式(2021版)》博客中,详细的描述了映射虚拟目录的三种方式。由于IDEA引入TOMCAT的情形不适用于映射虚拟目录的前两种方式,大概率属于第三种方式,本篇就深化下第三种映射虚拟目录的方式同时TOMCAT的本质。

首先先来了解下TOMCAT中逃不开的两个变量:CATALINA_HOME和CATALINA_BASE;CATALINA_HOME指TOMCAT的安装目录,CATALINA_BASE指TOMCAT的工作目录。在一个单机多实例的情境下,我们一般采用如下图所示的方式部署WEB应用,简单来说就是一个工作目录(CATALINA_BASE)对应一个WEB应用,为应用运行提供一个单独的运行环境。

接下来,通过一个小DEMO加深下理解:

一、配置环境变量

新增环境变量CATALINA_HOME,变量值为TOMCAT的安装目录。在Path中新增"%CATALINA_HOME%\\bin";

二、创建工作目录和配置工作目录

在桌面新建一个tomcat-instance文件夹,并把TOMCAT安装目录中如下图箭头所指向的五个文件夹复制到新创建的tomcat-instance文件夹中。如果以前已配置过其它项目,建议移除项目或者配置,保持这个tomcat-instance下的各配置项是初始状态。

为了防止Connector默认的8080同TOMCAT安装目录中的默认端口重复,建议修改为其它,本次修改为8081,其它端口暂且不做修改;

<Connector port="8081" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

三、映射虚拟目录

由于在《Tomcat映射虚拟目录的三种方式(2021版)》中已经详细描述了三种映射虚拟目录的方式,本次不再讲解,随机选用一种映射方式即可。由于从tomcat服务器复制过来的webapps下的root目录中已包含页面,所以本次不做任何操作;

四、新增批处理用来启动或停止服务器

在tomcat-instance下新建三个批处理文件:runCatalina.bat、startCatalina.bat和stopCatalina.bat;这三个批处理的作用就是调用TOMCAT安装目录下的catalina命令,在当前工作目录下分别执行run、start、stop操作;

runCatalina.bat内容如下:

set "CATALINA_BASE=%cd%"
set "EXECUTABLE=%CATALINA_HOME%\\bin\\catalina.bat"
call "%EXECUTABLE%" start

startCatalina.bat内容如下:

set "CATALINA_BASE=%cd%"
set "EXECUTABLE=%CATALINA_HOME%\\bin\\catalina.bat"
call "%EXECUTABLE%" run

stopCatalina.bat内容如下:

set "CATALINA_BASE=%cd%"
set "EXECUTABLE=%CATALINA_HOME%\\bin\\catalina.bat"
call "%EXECUTABLE%" stop
pause

五、测试配置是否成功

双击startCatalina.bat启动TOMCAT服务器,在地址栏访问 http://localhost:8081,如出现以下页面即表示配置成功;


通过以上DEMO,相信各位对CATALINA_HOME和CATALINA_BASE的理解更加深入,CATALINA_HOME更像是一个服务器引擎,它可以发布各个工作目录(CATALINA_BASE)下已映射的应用。可以类比为我们使用Oracle  SQL Developer(引擎)可以同时打开和使用多个SQL工作表(工作目录),视频播放软件(引擎)可以打开多个播放窗口(工作目录)播放多个视频等。

如果IDEA引入TOMCAT后也采用上述方式启动服务器的话,那么也应该存在必要的工作目录,带着这个问题,看一下通过IDEA启动TOMCAT服务器时,控制台输出日志:

"C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\bin\\catalina.bat" run
[2021-03-16 05:04:14,407] Artifact JavaWebDemo:war exploded: Waiting for server connection to start artifact deployment...
Using CATALINA_BASE:   "C:\\Users\\Administrator\\AppData\\Local\\JetBrains\\IntelliJIdea2020.1\\tomcat\\Tomcat_9_0_34_JavaWebDemo"
Using CATALINA_HOME:   "C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0"
Using CATALINA_TMPDIR: "C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\temp"
Using JRE_HOME:        "C:\\Program Files\\Java\\jdk1.8.0_144"
Using CLASSPATH:       "C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\bin\\bootstrap.jar;C:\\Program Files\\Apache Software Foundation\\Tomcat 9.0\\bin\\tomcat-juli.jar"

当我们打开CATALINA_BASE对应的路径时,内容如下:

同时打开../Tomcat_9_0_34_JavaWebDemo/conf/Catalina/localhost目录下发现dongnao.xml,文件内容如下:

<Context path="/dongnao" docBase="D:\\SoftDevelop\\idea_workspace\\JavaWebDemo\\out\\artifacts\\JavaWebDemo_war_exploded" />

至此,一切真相大白!

IDEA引用TOMCAT启动项目本质如下:

1、当我们通过如下图所示,在配置Run Configuration时选择Application Servers后,会把当前选中的服务器的Tomcat Home作为CATALINA_HOME;

2、在启动服务器时,IDEA都会到C:\\Users\\当前登录用户\\AppData\\Local\\JetBrains\\IntelliJIdea2020.1\\tomcat目录下创建或更新一个名为 "Tomcat_Tomcat版本_WEB应用名称" 的CATALINA_BASE(工作目录),如果存在则更新,否则则创建。以上工作目录的路径随登录用户名和IDEA版本等不同;

3、会在../$CATALINA_BASE/conf/Catalina/localhost下创建一个XML文件,文件名称和文件内容中Context元素的path属性值取自下图箭头指向处的配置;

<Context path="/dongnao" docBase="D:\\SoftDevelop\\idea_workspace\\JavaWebDemo\\out\\artifacts\\JavaWebDemo_war_exploded" />

Context元素的docBase属性值一般来自项目所有编译成果路径,具体参照以下配置

相信通过以上几个本质可以解答你好多疑问了;

以上,完了!记录下,方便自己和后来者

以上是关于IDEA中引入和启动TOMCAT的本质的主要内容,如果未能解决你的问题,请参考以下文章

IDEA启动tomcat控制台中文乱码

怎么在idea里直接预览一个jsp页面,而不需要启动tomcat

IDEA如何打出war包

idea中tomcat控制台输出中文乱码问题的解决

mac中的idea开发踩坑

idea启动tomcat出现命令语法不正确