溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

關(guān)于tomcat 多個(gè)配置多個(gè)host加載多次,導(dǎo)致initSerlet加載多次

發(fā)布時(shí)間:2020-06-23 07:22:51 來(lái)源:網(wǎng)絡(luò) 閱讀:2536 作者:仰望_星空_ 欄目:開(kāi)發(fā)技術(shù)

之前公司申請(qǐng)了五個(gè)域名,因?yàn)榍捌谥挥幸粋€(gè)項(xiàng)目,所以老板要求多個(gè)域名對(duì)應(yīng)到一個(gè)項(xiàng)目上,于是,我就在tomcat的web.xml上配置了多個(gè)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>

這樣寫(xiě)了。

然后大概過(guò)了幾個(gè)月,公司業(yè)務(wù)的增長(zhǎng),項(xiàng)目也多了,后來(lái)其中有個(gè)項(xiàng)目就是關(guān)于微信開(kāi)發(fā)的,需要從微信端拿accessToken,項(xiàng)目的web.xml 配置了一個(gè)init的servlet,本來(lái)每次init一次,從微信端拿得accessToken,是正常的,但是部署到服務(wù)器之后,一直有問(wèn)題,后來(lái)研究了很久,在 項(xiàng)目中也寫(xiě)了很多l(xiāng)og,到后面,才發(fā)現(xiàn),是因?yàn)閕nit這個(gè)servler 被執(zhí)行了很多次導(dǎo)致的。沒(méi)執(zhí)行一次拿到一個(gè)accessToken,然后之前訪問(wèn)拿到的accessToken,跟最后一次項(xiàng)目的accessToken不匹配,導(dǎo)致了問(wèn)題出現(xiàn)。

后來(lái)才知道,是因?yàn)榍懊媾淞?個(gè)host才導(dǎo)致這樣的問(wèn)題的,因?yàn)楫?dāng)時(shí)對(duì)tomcat的web.xml配置不是很熟悉,后來(lái)網(wǎng)上搜了一堆,很巧合的發(fā)現(xiàn)了篇博客寫(xiě)的,其實(shí)多個(gè)域名對(duì)應(yīng)一個(gè)項(xiàng)目的話,可以使用web.xml 里面的一個(gè)標(biāo)簽,<Alias>www.XXX.com</Alias>
標(biāo)簽。

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

<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">, 因?yàn)橐粋€(gè)Engine 必須有一個(gè)host 跟 它的名字一樣,

這樣配置完之后,我們?cè)偃タ磍og,此時(shí)只init方法只執(zhí)行了一次。成功解決了問(wèn)題。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI