关于tomcat 多个配置多个host加载多次,导致initSerlet加载多次

  之前公司申请了五个域名,因为前期只有一个项目,所以老板要求多个域名对应到一个项目上,于是,我就在tomcat的web.xml上配置了多个host如下:

<Host name="www.XXX.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
       <Host name="www.XXX1.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="www.XXXX.cn"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="www.XXXX.net"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />
<Context path="/coupon" docBase="D:/TBT/Project/Coupon/coupon" debug="0" reloadable="true"  />
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
                pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">


        <!-- SingleSignOn valve, share authentication between web applications
             Documentation at: /docs/config/valve.html -->
        <!--
        <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
        -->


        <!-- Access log processes all example.
             Documentation at: /docs/config/valve.html
             Note: The pattern used is equivalent to using pattern="common" -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log." suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />


      </Host>


这样写了。

    然后大概过了几个月,公司业务的增长,项目也多了,后来其中有个项目就是关于微信开发的,需要从微信端拿accessToken,项目的web.xml 配置了一个init的servlet,本来每次init一次,从微信端拿得accessToken,是正常的,但是部署到服务器之后,一直有问题,后来研究了很久,在 项目中也写了很多log,到后面,才发现,是因为init这个servler 被执行了很多次导致的。没执行一次拿到一个accessToken,然后之前访问拿到的accessToken,跟最后一次项目的accessToken不匹配,导致了问题出现。

  后来才知道,是因为前面配了5个host才导致这样的问题的,因为当时对tomcat的web.xml配置不是很熟悉,后来网上搜了一堆,很巧合的发现了篇博客写的,其实多个域名对应一个项目的话,可以使用web.xml 里面的一个标签,<Alias>www.XXX.com</Alias> 标签。

于是上面的配置就变成如下: 

<Host name="www.XXX.com"  appBase="webapps" unpackWARs="true" autoDeploy="true">
<Context path="" docBase="/XXXWebsite" debug="0" reloadable="true" />

  <Alias>www.XXX1.com</Alias>

  <Alias>www.XXXX.cn</Alias>

 <Alias>www.XXXX.net</Alias>


        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
                prefix="localhost_access_log." suffix=".txt"
              pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>

并且将引擎的<Engine></Engine>  defaultHost="www.XXX.com">, 因为一个Engine 必须有一个host 跟 它的名字一样,

这样配置完之后,我们再去看log,此时只init方法只执行了一次。成功解决了问题。

  • 5
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值