之前公司申請了五個域名,因爲前期只有一個項目,所以老闆要求多個域名對應到一個項目上,於是,我就在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 "%r" %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 "%r" %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 "%r" %s %b" />
</Host>
<Host name="www.XXXX.net" 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 "%r" %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 "%r" %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 "%r" %s %b" />
</Host>
並且將引擎的<Engine></Engine> defaultHost="www.XXX.com">, 因爲一個Engine 必須有一個host 跟 它的名字一樣,
這樣配置完之後,我們再去看log,此時只init方法只執行了一次。成功解決了問題。