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