问题

以前使用eclipse调用tomcat运行web项目时,eclipse的方式非常直接了当,就是直接将项目更新到%TOMCAT_HOME%/webapps目录下即可。然而在使用Intellij IDEA时,该目录下看不到任何项目文件,%TOMCAT_HOME%/conf/Catalina/localhost目录下也看不到任何项目配置文件,那么问题来了,web项目到底是如何部署到tomcat上的呢?

思路

通过仔细观察Intellij启动tomcat时的输出日志(MAC OS下),可以发现一些端倪。

25-Oct-2016 17:14:10.698 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version:        Apache Tomcat/8.0.33
25-Oct-2016 17:14:10.744 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server built: Mar 18 2016 20:31:49 UTC
25-Oct-2016 17:14:10.745 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server number: 8.0.33.0
25-Oct-2016 17:14:10.746 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Name: Mac OS X
25-Oct-2016 17:14:10.747 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log OS Version: 10.11.1
25-Oct-2016 17:14:10.748 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Architecture: x86_64
25-Oct-2016 17:14:10.752 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Java Home: /Library/Java/JavaVirtualMachines/jdk1.8.0_77.jdk/Contents/Home/jre
25-Oct-2016 17:14:10.756 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Version: 1.8.0_77-b03
25-Oct-2016 17:14:10.757 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log JVM Vendor: Oracle Corporation
25-Oct-2016 17:14:10.765 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_BASE: /Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code
25-Oct-2016 17:14:10.766 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log CATALINA_HOME: /opt/apache-tomcat-8.0.33
25-Oct-2016 17:14:10.767 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.util.logging.config.file=/Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code/conf/logging.properties
.....

其中的关键在这句:

CATALINA_BASE: /Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code

CATALINA_BASE指向了一个目录(我的项目名为didi-code,应用上下文为code),在这个目录下有以下文件

.

├── conf

│ ├── Catalina

│ │ └── localhost

│ │ └── code.xml

│ ├── catalina.policy

│ ├── catalina.properties

│ ├── context.xml

│ ├── logging.properties

│ ├── server.xml

│ ├── tomcat-users.xml

│ ├── web.xml

│ └── web.xml.0

├── logs

└── work

└── Catalina

└── localhost

└── code

这个目录和tomcat的配置目录很相似,那和我们的项目有什么关系呢?我们需要先从CATALINA_HOMECATALINA_BASE的区别入手。

CATALINA_HOME与CATALINA_BASE

简单的说,CATALINA_HOME是Tomcat的安装目录,CATALINA_BASE是Tomcat的工作目录。当我们想要运行多个Tomcat实例,但是不想拷贝多个Tomcat副本时,那么我们可以配置多个不同工作目录,在运行tomcat时对每个实例指派不同的工作目录,它们共享安装目录的运行文件(bin目录下)。

这么看来CATALINA_BASE所指向的就是conf、logs、temp、webapps、work和shared目录。 而CATALINA_HOME则包括了Tomcat的二进制文件和脚本目录,也就是bin和lib目录。

在我们解压tomcat压缩包后,这两个目录是混合在一起的,所以它们的路径是相同的。但当我们希望再运行另一个Tomcat实例时,那么我们可以再建立一个目录,把conf、logs、temp、webapps、work和shared拷贝到该目录下,然后在执行catalina.sh启动tomcat实例时指定或修改环境变量中的CATALINA_BASE路径即可。

分析

这时,我大致分析出了Intellij IDEA通过tomcat部署web项目原理了。

首先Intellij会为每个web项目建立一个单独的文件夹,以“Unnamed_项目名”命名(可在.idea/workspace.xml中修改)。在每次启动项目时,它先将tomcat目录下原始的CATALINA_BASE目录拷贝一份到该目录下,也就是将当前tomcat的配置文件拷贝到“Unnamed_项目名”文件夹下。然后将CATALINA_BASE的路径修改为该目录的路径,再在 Unnamed_项目名/conf/Catalina/localhost下添加项目的配置文件,如 code.xml,内容为

<?xml version="1.0" encoding="UTF-8"?>
<Context path="/code" docBase="/Users/didi/project/CODE-PROJ/didi-code-web/target/code" />

最后启动tomcat,tomcat除了会启动webapps下应用外还会加载/conf/Catalina/localhost下配置的应用,而Intellij就是通过这种方式“隐蔽”地加载web项目。

看到这儿你可能还会发现为什么在tomcat安装目录下始终找不到项目log文件的原因了,因为CATALINA_BASE指向了/Users/didi/Library/Caches/IntelliJIdea2016.1/tomcat/Unnamed_didi-code,所以指定相对路径${catalina.base}的log文件就存在了该目录下。

Intellij IDEA通过tomcat部署web项目的机制的更多相关文章

  1. Tomcat部署web项目,如何直接通过域名访问,不加项目名称

    问题:下面的问题是互联网上问得比较多的,但是显然都是同一个问题. JavaWeb项目部署到tomcat服务之后设置不需要输入项目名称即可访问? Tomcat部署web项目,如何直接通过域名访问,不加项 ...

  2. tomcat部署web项目方法

    一.tomcat部署web项目之静态配置: 方法一:直接将为web项目放到webapps下: 如图所示:在webapps文件下,存放了一个html文件,启动tomcat,访问http://localh ...

  3. tomcat部署web项目的方式 转

    JavaWeb开发Tomcat中三种部署项目的方法,开始Java web开发必不可少的步骤,经过查找,觉得有篇文章介绍的不错 1.在conf目录中新建Catalina\localhost目录,在该目录 ...

  4. eclipse,tomcat部署web项目,以及本地文件访问

    1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署的方法,也是初学者最常用的方法. 2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其 ...

  5. Tomcat 部署 Web 项目的本质理解

    手动创建Web项目 不借助集成开发工具IDE,直接手动创建一个Web项目,有助于理解Web项目的本质. 1.首先建立一个myweb文件夹(自己定义项目名). 2.然后可以建一个html文件(文件里面只 ...

  6. Tomcat部署web项目

    在Myeclipse中,我们很容易做到这一步:把一个web项目生成war文件 其实在eclipse中,实现这样的功能,也是很简单的. 下面就看一下是怎样操作的吧! 新建一个web项目: 取名为:ecl ...

  7. 【IDEA下使用tomcat部署web项目】

    1.IDEA下的WEB项目新建就不说了. 2.配置tomcat:file-->settings-->Build,Execution,Deployment-->Application ...

  8. IntelliJ IDEA 配置 Tomcat 运行web项目

    运行前提: 配置好 Java 的运行环境 配置好 Tomcat 安装 IntelliJ IDEA 开始 1.创建项目并配置 关于配置SDK,等建完项目再说 没有配置SDK的话 会出现下面的弹框,点击 ...

  9. IntelliJ IDEA配置Tomcat运行web项目

    小白一枚,借鉴了好多人的博客,然后自己总结了一些图,尽量的详细.在配置的过程中,有许多疑问.如果读者看到后能给我解答的,请留言.Idea请各位自己安装好,还需要安装Maven和Tomcat,各自配置好 ...

随机推荐

  1. 机器学习实战之Apriori

    机器学习实战之Apriori 1. 关联分析 1.1 定义        关联分析是一种在大规模数据上寻找物品间隐含关系的一种任务.这种关系有2种形式:频繁项集和关联规则. (1) 频繁项集(freq ...

  2. Scrapy下载图片及自定义分类下载路径

    配置下载图片的流程如下 在items中定义两个属性,image_urls 和images .image_urls是用来存储需要下载的图片url链接,列表类型: 当文件下载完成后会把相关下载信息存入im ...

  3. 关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 转

    #!/usr/bin/python 是用来说明脚本语言是python的 是要用/usr/bin下面的程序(工具)python,这个解释器,来解释python脚本,来运行python脚本的. # -*- ...

  4. Linux上用户执行命令记录

    HFILE=`who -m | awk '{print $1}'`readonly HISTFILE=/var/history/$HFILE-$USER-$UID.logreadonly HISTFI ...

  5. Python list以及numpy处理技巧

    1.numpy数组后面添加一个list: import numpy as np a=[[1,2,3],[4,5,6],[7,8,9]] box=np.array(a) box=np.vstack((b ...

  6. 转载:腾讯与新浪的通过IP地址获取当前地理位置(省份)的接口

    腾讯的接口是 ,返回数组 http://fw.qq.com/ipaddress 返回值 var IPData = new Array("61.135.152.194"," ...

  7. JEECMS二次开发 -------标签使用说明

    转载:https://blog.csdn.net/u012176984/article/details/45501771 一:标签套用结构说明 登录后台管理页面,这些嵌套在html中的标签 以[@标签 ...

  8. 集训队日常训练20180525-DIV1

    A.2805 N*M的图,每次浇水(X1,Y1)-(X2,Y2)围成的矩形,问最后有多少点被浇水了. 暴力. #include<bits/stdc++.h> using namespace ...

  9. web前端开发必备技术

    1.Vue.js是什么? Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vue 采用自底向上增量开发的设计.Vue 的核心库只关注 ...

  10. 杨柳絮-Info:阜阳市多举措治理杨柳絮问题

    ylbtech-杨柳絮-Info:阜阳市多举措治理杨柳絮问题 1.返回顶部 1. 阜阳市多举措治理杨柳絮问题 2019-4-15 10:34| 发布者: 戴斐 | 查看: 56407| 评论: 0|原 ...