在通过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的本质相关推荐

  1. linux中使用命令启动tomcat后显示tomcat started,实际却没启动的问题

    linux中启动tomcat,显示tomcat started.实际却没启动的问题 问题背景: 在linux复制tomcat,将tomcat中webapps目录下自己原来发布过的项目直接删除后启动to ...

  2. IDEA中引入框架并配置artifact后,启动tomcat无法访问项目

    事情的起因是在一家软件公司实习的时候需要学习公司封装的TaCloud框架,在实习的过程中需要学习两个相关的框架,看两套相关的岗培视频,分别是TaCloud V4.0.1 和TaCloud V4.1.0 ...

  3. Eclipse中启动tomcat报错:A child container failed during start

    我真的很崩溃,先是workspace崩了,费了好久重建的workspace,然后建立了一个小demo项目,tomcat中启动却报错,挑选其中比较重要的2条信息如下: A child container ...

  4. centos7中使用yum安装tomcat以及它的启动、停止、重启

    centos7中使用yum安装tomcat 介绍 Apache Tomcat是用于提供Java应用程序的Web服务器和servlet容器. Tomcat是Apache Software Foundat ...

  5. tomcat源码_从源码角度讲Tomcat在SpringBoot 中是如何启动的?

    我们知道 SpringBoot 给我们带来了一个全新的开发体验,我们可以直接把 web 程序达成 jar 包,直接启动,这就得益于 SpringBoot 内置了容器,可以直接启动,本文将以 Tomca ...

  6. eclipse中启动tomcat出现错误的解决方法

    eclipse中启动tomcat出现错误的解决方法 参考文章: (1)eclipse中启动tomcat出现错误的解决方法 (2)https://www.cnblogs.com/Miragic/p/80 ...

  7. Tomcat服务在Eclipse中能够正常启动,但页面出现404错误的解决方法

    如果在Eclipse配置并启动Tomcat成功,但有时会访问localhost:8080出现404错误,此时需要修改Tomcat配置.步骤如下: 1.在Eclipse中双击Tomcat server, ...

  8. eclipse中启动tomcat,不能访问localhost解决办法

    错误详情:在eclipse中启动tomcat,然后网页中输入127.0.0.1:8080之后显示404的错误 在tomcat根目录的bin文件夹下启动startup.bat后访问localhost没有 ...

  9. class没有发布到tomcat_面试官扎心一问:Tomcat 在 SpringBoot 中是如何启动的?

    作者:木木匠 my.oschina.net/luozhou/blog/3088908 前言 我们知道 SpringBoot 给我们带来了一个全新的开发体验,我们可以直接把 web 程序达成 jar 包 ...

最新文章

  1. cucumber 使用资料
  2. ORB_SLAM3在ubuntu18.04安装和初步测试+轨迹评估
  3. 修改FCKEditor实现将图片、文件等保存到数据库
  4. vue移动端上拉加载,下拉刷新(mescroll)
  5. 14565B简单使用教程
  6. 基于3线spi通信的oled(cubemx图形化编程软件)
  7. 桥架算量用什么软件_鹏业安装算量软件识别桥架
  8. 三星android 截图,三星手机如何截图?几种三星手机截屏的方法教程
  9. Android当前任务管理器不显示应用进程
  10. 设置gvim中横竖光标_VIM的配置:高亮光标所在的行列
  11. 开口式霍尔电流传感器AHKC在直流配电改造的应用
  12. 阿里云安全ACP认证试验之阿里云Web应用防火墙接入体验
  13. Django models常用Field介绍以及常见错误解决
  14. 某音App protobuf协议还原逆向分析
  15. MIT 线性代数 Linear Algebra 26:复矩阵,傅里叶矩阵, 快速傅里叶变换 FFT
  16. 用openAI写个js的排序算法(快速排序算法)
  17. 自动驾驶仿真(六)—— SIL软件在环仿真测试
  18. 牛客网 KY11 二叉树遍历
  19. 输入一个双精度浮点数,输出这个浮点数的%f结果、保留5位小数的结果、%e、%g格式的结果
  20. c语言标准库详解(十二):非局部跳转setjmp.h

热门文章

  1. 网际控制报文协议---ICMP
  2. 用 State Pattern 来实现一个简单的 状态机
  3. NoSQL数据库全方位比较
  4. nginx如何配置多站点
  5. [Ajax] jQuery中的Ajax -- 01-jQuery中的Ajax
  6. css3实现的精美菜单
  7. Tips--开源心音数据库整理(我愿称之为史上最全)
  8. 嵌入式相关的硬件平台
  9. EasyPR车牌识别学习总结
  10. OpenCV3学习(4.3)——图像形态学(膨胀,腐蚀)