解决 Tomcat 部署工程 重复加载的问题

来源:互联网 发布:数据库中的null 编辑:程序博客网 时间:2024/05/16 10:59

一. 环境说明

1. 假设待发布工程 名为 myapp,

2. 工程存放到 %CATALINA_HOME%/webapps 下

3. 在 server.xml 中通过如下方法设置 myapp 为默认工程 (访问时不输入/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属性, 即:

将:

----------------------------------------------------------------------------------------------------------------------

appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

----------------------------------------------------------------------------------------------------------------------

修改为:

----------------------------------------------------------------------------------------------------------------------

appBase="webapps"

       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">

----------------------------------------------------------------------------------------------------------------------

b. 在 Context 容器中设置 docBase 属性, 如:

----------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------

注意: 由于删除了上述的 appBase ,所以设置 docBase 属性时要使用绝对路径,不能使用相对路径,因为这里的相对路径既是相对 appBase的路径。

 

方法二:(推荐的方法)

a. 新建一个目录专门用于存放工程, 如: G:/UserData/debug/web

b. 将工程存放到以上目录下:即:G:/UserData/debug/web/myapp

c. 在 Context 容器中设置 docBase 属性, 如:

----------------------------------------------------------------------------------------------------------------------

----------------------------------------------------------------------------------------------------------------------

原创粉丝点击