IntelliJ IDEA通过Tomcat启动项目过程分析

Posted 一路追寻

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IntelliJ IDEA通过Tomcat启动项目过程分析相关的知识,希望对你有一定的参考价值。

Tomcat部署项目的多种方式

Tomcat安装目录$TOMCAT_HOME

  1. 常规的webapps下

    直接部署到$TOMCAT_HOME/webapps下

  2. 外部部署

    修改$TOMCAT_HOME/conf/server.xml 在<Host>标签下添加web所在的目录指定path,如:
    <Context path="/xx" docBase="D:\\\\workspace\\\\xx\\\\target\\\\xx" reloadable="true" sessionCookiePath="/xx"sessionCookieName="yoursessionname"> </Context>

  3. $TOMCAT_HOME/conf下建工程目录镜像

    在conf目录中,新建 Catalina\localhost目录,在该目录中新建一个xml文件,名字可以随意取,只要和当前文件中的文件名不重复就行了,该xml文件的内容为:
    <Context path="/xx" docBase="D:\\\\workspace\\\\xx\\\\target\\\\xx" debug="0" privileged="true"> </Context>


IntelliJ IDEA 启动项目分析

IntelliJ IDEA 就是使用第三种部署方式,不够还是有些区别

IDEA 启动/停止 Tomcat 通过catalina.bat run/stop

但是在$TOMCAT_HOME/conf下,没有Catalina\localhost\\xxxx.xml文件
在.IntelliJIdea2017.1目录下发现有相关的配置文件

文件的修改时间与内容和启动项目的信息吻合

说明 IDEA 启动E盘下Tomcat的时候,加载了C盘下的项目部署配置文件

下面看看catalina.bat的内容

判断CATALINA_HOME是否为空,如果为空就把当前位置设置为CATALINA_HOME,还有CATALINA_BASE

E:\\Work\\TomcatIDEA\\apache-tomcat-7.0.54

既然确定IDEA是通过E:\\Work\\TomcatIDEA\\apache-tomcat-7.0.54\\bin\\catalina.bat启动的,但是此Tomcat目录下的文件修改时间都不是IDEA 启动的时间,说明IDEA 没有修改Tomcat目录


在查看控制台信息时发现

Using CATALINA_BASE:   "C:\\Users\\xxxxx\\.IntelliJIdea2017.1\\system\\tomcat\\Unnamed_jeesite"
Using CATALINA_HOME:   "E:\\Work\\TomcatIDEA\\apache-tomcat-7.0.54"

CATALINA_BASE和CATALINA_HOME区别

之前没有仔细了解CATALINA_BASE和CATALINA_HOME区别
网上资料:

CATALINA_HOME是Tomcat的安装目录,CATALINA_BASE是Tomcat的工作目录。如果我们想要运行Tomcat的 多个实例,但是不想安装多个Tomcat软件副本。那么我们可以配置多个工作目录,每个运行实例独占一个工作目录,但是共享同一个安装目录
Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,因此CATALINA_BASE就 指向这些目录。 而其他目录主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。

IntelliJ IDEA就是利用CATALINA_BASE运行多个实例,如图



以上是关于IntelliJ IDEA通过Tomcat启动项目过程分析的主要内容,如果未能解决你的问题,请参考以下文章

intellij idea创建SpringMVC项目启动tomcat报错

IntelliJ IDEA 2017.2.6 x64 配置 tomcat 启动 maven 项目

Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目

Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目

Intellij IDEA创建的Web项目配置Tomcat并启动Maven项目(转)

IntelliJ IDEA导入Gradle项目,并启动项目