这几天工作少,有空的时候经常到CSDN上逛逛,今天看到一位网友问到关于Tomcat中项目访问的问题,以往我们在做测试的时候经常是在Http://locathost:8080的后面加上项目的名称,这样才能访问,但是有时候也会有特殊的需求,把项目名称去掉,直接输入Http://locathost:8080访问项目,那该怎么设置呢?自己项目开发的经验太少,也没遇到过,刚开始也不太清楚,后来查了查资料,做了一些测试,呵呵,有些小明白了,原来这跟Tomcat的虚拟主机有关系。在解决问题的过程中,把Tomcat的配置文件仔细看了一下,收获还不小呢,在此整理了一下,希望以后会有用~~~
用过Tomcat的朋友都知道,server.xml文件是Tomcat的核心配置文件,其中关于服务器的大部分配置都写在了这里面,有时间的话确实应该再好好的研究一下这个文件。主要包括Server,Service,Connector,Engine,Host,Context等主要元素,其中Host就是今天我们解决问题的主角。
Host主要是用来定义虚拟机的,位于Engine元素里面,一个Engine可以有多个虚拟机即多个Host,每个虚拟机都有某个DNS与之匹配。虚拟机上可以部署很多个WebApps,其中Tomcat默认的就是部署在localhost上的,其存储的位置就是主目录下的webapps里面。当我们的请求到来的时候,Engine会拿请求路径于旗下虚拟机做对比,并将请求交予匹配的虚拟机处理。假如请求路径:Http://localhost:8060/test/index.jsp,那么localhost便是相应虚拟机的名字,test便是虚拟机上部署的项目的名字,我们知道哦当我们在安装完Tomcat的时候,会在浏览器上输入http://localhost:8060测试一下,这是如果安装成功会立即弹出tomcat的主界面,我们到tomcat的安装目录下找一下会发现有一个Root的文件夹,里面存放的便是tomcat管理界面的相关文件,也就是说我们如果把我们的项目信息放在这个文件夹里面,那么当我们输入如上路径的时候就是出现我们的项目界面。当然这里我们不建议把项目信息放在这里,因为tomcat的管理界面是非常有用的。但是我们完全可以仿照这个来解决我们遇到的问题。
Host的信息如下
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"></Host>
查看名为locaohost的Host会发现appBase便是对应项目的存放路径,这个可以换成任何合法的路径,假设我们在tomcat的主目录下建一个MyApps,那appBase就等"MyApps",其他的信息可以照抄,Host的name改成我们自己喜欢的名字如AAA,这样Host就变成了
<Host name="AAA" appBase="MyApps" unpackWARs="true"
autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"></Host>
然后还有一个注意的就是Tomcat的管理项目是放在root下的那是因为有Context指定了docBase="root",
我们在MyApps里建一个MyProject文件夹,把项目信息放在MyPeoject里,则对应的Context的docBase就要做修改。即
locathost的名字也可以改,但是这个要到windows系统中做DNS映射配置。
把server.xml改完之后重启,输入Http://localhost:8080就可以直接访问我们在MyApps/MyProject下的项目首页了。大功告成~~~
另外今天突然发现原来我们平常所说的JSP其实就是Servlet,是在Tomcat的conf中的web.xml里体现出来的,以前一直不明白工作原理,现在清楚了,哈哈