写在前面的话
首先吐槽一下,我发现国内的博客大多是垃圾,完全没有人测试代码,就在那瞎扯淡,如果你看到别的地方说的跟我的文章说的不一样,请以我这篇为准,因为我每个场景都经过N次测试,确保没有问题!
场景是什么?
最近在制作镜像的时候,发现Tomcat的webapps目录下有一个ROOT目录,于是心生好奇,我并没有哪里明显生成这个ROOT目录,为什么会无中生有呢?于是我开始了下面的测试。
先解释为什么会有ROOT?
(1)当你将war包放到webapp是目录下之后,启动Tocmat。(这里以PaaSHelloWorld.war为例说明)
注意,我是在linux系统中测试的,执行bin目录下的startup.sh或者catalina.sh脚本,都是可以的。只是你看到的启动日志不一样,事实上,启动startup.sh脚本的时候,依然调用的是catalina.sh脚本。
上面这样的话,纯粹是帮助小白的,资深码农勿喷
(2)进入到webapps目录下看,此时只有PaaSHelloWorld.war和文件夹PaaSHelloWorld。
(3)如果你在server.xml文件中的Host节点下添加如下内容:
启动tomcat之后,就会发现,webapps目录结构为:
(4)当然,我有额外测试了别的,比如下面这样:
得到的结果和(3)一样。
对上面(3)(4)提到的两种情况,既可以实现根域名访问,也可以实现非根域名访问。
仅实现非根域名访问。
(1)很简单,只需要在server.xml文件中的Host节点下添加如下内容:
此时webapps目录结构为:
仅实现根域名访问
这个问题很多地方都没有说到,经过测试,首先应用的war包放入到除webapps目录以外的其他的目录,本次测试将war包放在/home/qadmsom/apache-tomcat-8.0.16。如下图所示:
这里说明一下:官网没有tocmat-8.0.16。
然后在server.xml文件中的Host节点下添加如下内容
启动Tocmat之后,查看webapps目录下的内容:
实现仅仅根域名访问的方式不只有这一种。有兴趣的自己研究。
最后
这里的原理就是context,有兴趣的小伙伴百度一下吧,这里就不说了,涉及到源码,说太多,这篇文章太长了,后面我会写的。