Tomcat 填坑系列之一、增加Context配置导致启动的时候项目加载两次

44 篇文章 0 订阅
8 篇文章 0 订阅

1. 出现场景

发布web应用至 tomcat/webapps,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/
现在需要改成这样访问http://localhost
修改tomcat的server.xml文件,增加如下配置<Context path="" docBase="myapp" reloadable="false"/>,修改后host部分如下:

      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="false">
        <Context path="" docBase="myapp" reloadable="false"/>
      </Host>

此时每次启动tomcat观察日志都会发现应用加载了两次,什么原因呢?

2. 问题原因

虚拟目录引起的问题:
<Host/>标签里面配置了appBase="webapps",在tomcat启动的时候加载webapps下的所有项目工程文件;
在<Context/> 标签里面配置了一次docBase,让tomcat又去加载一次应用(一般情况下配置<Context/>,主要是由于想域名访问时将工程名去掉,也就是工程项目直接使用tomcat中设置的端口号就能访问)。

3. 解决办法一

<Host/>标签里面的appBase不指定位置,而是在<Context/> 标签里的docBase指定,防止项目会自动启动两遍,也就是将appBase="webapps" 置为 appBase="",docBase="myapp"置为docBase="webapps/myapp"。配置如下:

<Host name="localhost"  appBase=""
    unpackWARs="true" autoDeploy="false">
    <Context path="" docBase="webapps/myapp" reloadable="false"/>
</Host>

说明:如果你的项目中的链接或者图片写的都是绝对路径的话,那么带有项目名称的绝对路径是不可以使用的。

这样呢,产生了一个新的问题,将appBase置空,这个时候就不会自动解压war包,不知道会不会有后遗症,o(╥﹏╥)o,好在不会影响web的访问。——跪求指教。

4.解决办法二

网上的一种说法:<Host/>标签里面的改成 deployXML ="false" deployOnStartup ="false" autoDeploy="false",避免tomcat服务器中自启动导致项目被加载两次(如果是定时任务,比如群发,可想而知多么恐怖。。。)。(当然还可以按需求修改,毕竟每个项目的需求都不尽相同。)

含义: 
     deployXML ="false" : 不部署conf/catalina/localhost下的xml相应的WEB应用
     deployOnStartup ="false" :tomcat启动时, 不自动部署webapps下的所有web应用
     autoDeploy ="false"  :如果此项设为true,表示Tomcat服务处于运行状态时,能够监测appBase下的文件,
                           如果有新有web应用加入进来,会自运发布这个WEB应用,
                           设成false避免tomcat在扫描改动时, 再次把webapps下的web应用给部署进来.

最后host配置如下:

<Host name="localhost"  appBase="webapps"
    unpackWARs="true" deployXML ="false" deployOnStartup ="false" autoDeploy="false">
    <Context path="" docBase="yunmas_biz"/>
</Host>

这样的话,在tomcat启动时,不会自动发布appBase下的应用,启动后也不会自动发步appBase下的应用。

这次呢,嗯,myapp.war包解压到了tomcat/webapps/ROOT,o(╥﹏╥)o,随它去吧,阿弥陀佛。

 

 

 

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值