一. 环境说明
1. 假设待发布工程 名为 myapp,
2. 工程存放到 %CATALINA_HOME%/webapps 下
3. 在 server.xml 中通过如下方法设置 myapp 为默认工程 (访问时不输入/myapp 而直接访问)
---------------------------------------------------------------------------------------------------------------------
<Context path="" docBase="myapp"/>
----------------------------------------------------------------------------------------------------------------------
二. 问题描述
1.每次启动Tomcat 的时候,工程会被加载两次
2. 通过如下两个链接都可以访问到工程:(相同页面)
----------------------------------------------------------------------------------------------------------------------
http://localhost:8080
http://localhost:8080/myapp
----------------------------------------------------------------------------------------------------------------------
三. 原因分析
1.当为 Host 容器 设置了 appBase 属性时, Tomcat 会在启动时自动加载 appBase 指定目录下的所有合法工程;
2. 由于同时又通过 Context 的docBase 属性设置了Tomcat 默认工程, 所以,指定的 myapp工程又会被加载一次
基于以上两点,造成了 myapp工程的重复加载。
---==很拽的分割线==-------=======knityster -=编织者=======------很拽的分割线------======-----
四. 解决办法
方法一
a. 删除 HOST容器的 appBase属性, 即:
将:
----------------------------------------------------------------------------------------------------------------------
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
----------------------------------------------------------------------------------------------------------------------
修改为:
----------------------------------------------------------------------------------------------------------------------
<Host name="localhost" debug="0" appBase="webapps"
unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false">
----------------------------------------------------------------------------------------------------------------------
b. 在 Context 容器中设置 docBase 属性, 如:
----------------------------------------------------------------------------------------------------------------------
<Context path="" docBase="G:\UserData\debug\myapp"/>
----------------------------------------------------------------------------------------------------------------------
注意: 由于删除了上述的 appBase ,所以设置 docBase 属性时要使用绝对路径,不能使用相对路径,因为这里的相对路径既是相对 appBase的路径。
方法二:(推荐的方法)
a. 新建一个目录专门用于存放工程, 如: G:\UserData\debug\web
b. 将工程存放到以上目录下:即:G:\UserData\debug\web\myapp
c. 在 Context 容器中设置 docBase 属性, 如:
----------------------------------------------------------------------------------------------------------------------
<Context path="" docBase="G:\UserData\debug\web\myapp"/>
----------------------------------------------------------------------------------------------------------------------
没有评论:
发表评论