写在前面的话首先吐槽一下,我发现国内的博客大多是垃圾,完全没有人测试代码,就在那瞎扯淡,如果你看到别的地方说的跟我的文章说的不一样,请以我这篇为准,因为我每个场景都经过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节点下添加如下内容: <Context path="/" docBase="PaaSHelloWorld" debug="0" reloadable="true"/>启动tomcat之后,就会发现,webapps目录结构为:同时实现根域名访问和非跟域名访问(4)当然,我有额外测试了别的,比如下面这样:<Context path="" docBase="PaaSHelloWorld" debug="0" reloadable="true"/>得到的结果和(3)一样。对上面(3)(4)提到的两种情况,既可以实现根域名访问,也可以实现非根域名访问。仅实现非根域名访问。(1)很简单,只需要在server.xml文件中的Host节点下添加如下内容:<Context path="/PaaSHelloWorld" docBase="PaaSHelloWorld" debug="0" reloadable="true"/>此时webapps目录结构为:只能非根域名访问仅实现根域名访问这个问题很多地方都没有说到,经过测试,首先应用的war包放入到除webapps目录以外的其他的目录,本次测试将war包放在/home/qadmsom/apache-tomcat-8.0.16。如下图所示:这里说明一下:官网没有tocmat-8.0.16。然后在server.xml文件中的Host节点下添加如下内容<Context path="" docBase="/home/qadmsom/apache-tomcat-8.0.16/PaaSHelloWorld.war" debug="0" reloadable="true"/>启动Tocmat之后,查看webapps目录下的内容:仅实现根域名访问实现仅仅根域名访问的方式不只有这一种。有兴趣的自己研究。最后这里的原理就是context,有兴趣的小伙伴百度一下吧,这里就不说了,涉及到源码,说太多,这篇文章太长了,后面我会写的。
本文出自快速备案,转载时请注明出处及相应链接。