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



prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />



prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />



prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />



prefix="localhost_access_log." suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />

unpackWARs="true" autoDeploy="true">

    
    

    
    

  

这样写了。

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

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

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

name="www.XXX.com" appBase="webapps" unpackWARs="true" autoDeploy="true">

debug="0" reloadable="true" />

www.XXX1.com

www.XXXX.cn

www.XXXX.net

prefix="localhost_access_log."
suffix=".txt"

          pattern="%h

%l %u %t "%r" %s %b" />

  

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

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