解决Tomcat增加Context导致第一次无法启动tomcat,第二次才能成功启动
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决Tomcat增加Context导致第一次无法启动tomcat,第二次才能成功启动相关的知识,希望对你有一定的参考价值。
参考技术A 修改tomcat conf 下server.xml 文件如下<Host name="localhost" appBase=""
unpackWARs="true" autoDeploy="true" deployXML ="false" deployOnStartup ="false">
<Context path="" docBase="webapps/xx" reloadable="false"/>。
deployXML ="false" : 不部署conf/catalina/localhost下的xml相应的WEB应用
deployOnStartup ="false" :tomcat启动时, 不部署webapps下的所有web应用
war包依旧在webapps,但是启动tomcat自动解压war包文件产生在webapps同级的ROOT下,
此时tomcat只需启动一次便能成功启动tomcat。
增加Context配置是想直接地址+端口访问项目,地址+端口访问项目是为了项目中的链接或者图片写的是绝对路径,带有项目名称的绝对路径是不可以使用的。
Tomcat增加Context配置导致启动的时候项目加载两次问题解决方案
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>
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>
说明:如果你的项目中的链接或者图片写的都是绝对路径的话,那么带有项目名称的绝对路径是不可以使用的。
eclipse发布web应用至tomcat,默认方式下访问该项目是需要带项目名称的,例http://localhost:8080/myapp/。
现在需要改成这样访问http://localhost。
修改tomcat的server.xml文件,增加如下配置<Context path="" docBase="myapp" reloadable="false"/>
,修改后host部分如下:
以上是关于解决Tomcat增加Context导致第一次无法启动tomcat,第二次才能成功启动的主要内容,如果未能解决你的问题,请参考以下文章
在 Spring+Tomcat 上使用 JSF 2.2.9 会导致 java.lang.NoClassDefFoundError: javax/enterprise/context/spi/Conte