關於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 "%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 &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 "%r" %s %b" />

  </Host>

並且將引擎的<Engine></Engine> defaultHost="www.XXX.com">, 因爲一個Engine 必須有一個host 跟 它的名字一樣,

這樣配置完之後,我們再去看log,此時只init方法只執行了一次。成功解決了問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章