1. 出現場景
eclipse發佈web應用至tomcat,默認方式下訪問該項目是須要帶項目名稱的,例http://localhost:8080/myapp/。
如今須要改爲這樣訪問http://localhost。
修改tomcat的server.xml文件,增長以下配置<Context path="" docBase="myapp" reloadable="false"/>
,修改後host部分以下:html
<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觀察日誌都會發現應用加載了兩次,什麼緣由呢?web
2. 問題緣由apache
虛擬目錄引發的問題,咱們在Host標籤裏配置了appBase="webapps",tomcat加載一次應用。在裏配置了一次docBase,tomcat又去加載一次應用。tomcat
3. 解決辦法app
將appBase="webapps"置爲appBase="",docBase="myapp"置爲docBase="webapps/myapp"。配置以下:eclipse
<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>
說明:若是你的項目中的連接或者圖片寫的都是絕對路徑的話,那麼帶有項目名稱的絕對路徑是不能夠使用的。webapp