Tomcat排雷筆記
1. 出現場景
eclipse釋出web應用至tomcat,預設方式下訪問該專案是需要帶專案名稱的,例http://localhost:8080/myapp/。
現在需要改成這樣訪問http://localhost。
修改tomcat的server.xml檔案,增加如下配置<Context path="" docBase="myapp" reloadable="false"/>
,修改後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" />
<Context path="" docBase="myapp" reloadable="false"/>
</Host>
此時每次啟動tomcat觀察日誌都會發現應用載入了兩次,什麼原因呢?
2. 問題原因
虛擬目錄引起的問題,我們在Host標籤裡配置了appBase=”webapps”,tomcat載入一次應用。在裡配置了一次docBase,tomcat又去載入一次應用。
3. 解決辦法
將appBase=”webapps”置為appBase=””,docBase=”myapp”置為docBase=”webapps/myapp”。配置如下:
<Host name="localhost" appBase=""
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" />
<Context path="" docBase="webapps/myapp" reloadable="false"/>
</Host>
說明:如果你的專案中的連結或者圖片寫的都是絕對路徑的話,那麼帶有專案名稱的絕對路徑是不可以使用的。