Tomcat WAR 部署创建 404
Tomcat WAR deployment creates a 404
我使用Tomcat管理器进行部署。每当我更改网站并编译新的 .WAR
(称为 home.war
)并部署它时,加载根 [=48] 时都会出现 404 错误 =].
配置正确,http://schmud.de should load http://schmud.de/home/。
关键事实:如果我重新启动 Tomcat 实例,部署将正常工作。我如何避免这种情况?这是 server.xml
的 <host>
配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false">
<!-- 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" suffix=".log" rotatable="false"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="home" debug="0" reloadable="true" />
</Host>
我在 Apache Tomcat/7.0.42,JVM 1.7.0,Linux 2.6.32。这是一台 cPanel 机器。
编辑:经过长时间的延迟,我在本地重建了 Tomcat 机器,因此我可以完全访问所有参数。以下是我取消部署然后重新部署同一应用程序时显示错误的日志,导致 404 错误:
tomcat7/localhost.2016-02-14.log
,取消部署并重新部署 -
Feb 14, 2016 1:04:59 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: undeploy: Undeploying web application at '/home'
Feb 14, 2016 1:05:00 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
Feb 14, 2016 1:06:44 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
tomcat7/catalina.2016-02-14.log
从取消部署到重新部署 -
Feb 14, 2016 1:05:00 PM org.apache.catalina.startup.HostConfig undeploy
INFO: Undeploying context [/home]
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader modified
SEVERE: Resource '/WEB-INF/lib/args4j-2.0.26.jar' is missing
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [] has started
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [New I/O worker #1] but has failed to stop it. This is very likely to create a memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ning.http.client.providers.netty.NettyAsyncHttpProvider.ThreadLocalBoolean] (value [com.ning.http.client.providers.netty.NettyAsyncHttpProvider$ThreadLocalBoolean@288f896e]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [org.jboss.netty.util.CharsetUtil] (value [org.jboss.netty.util.CharsetUtil@6e49414c]) and a value of type [java.util.IdentityHashMap] (value [{US-ASCII=sun.nio.cs.US_ASCII$Encoder@6e14afdd}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ning.http.client.providers.netty.NettyAsyncHttpProvider.ThreadLocalBoolean] (value [com.ning.http.client.providers.netty.NettyAsyncHttpProvider$ThreadLocalBoolean@288f896e]) and a value of type [java.lang.Boolean] (value [true]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base /var/lib/tomcat7/webapps/home does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:136)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:5089)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3988)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:745)
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
SEVERE: Exception starting Context with name []
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3988)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Error in resourceStart()
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5270)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 8 more
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [] is completed
Feb 14, 2016 1:06:20 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/home.war
上面清楚地说明了错误,但我对 Tomcat 的了解还不够多,无法理解它们。
当您说重新启动服务器时,您指的是 tomcat 实例还是盒子本身? Tomcat 根据我的经验,部署新版本时应该重启实例。编写部署脚本以节省执行此操作的时间会更有好处。
我使用Tomcat管理器进行部署。每当我更改网站并编译新的 .WAR
(称为 home.war
)并部署它时,加载根 [=48] 时都会出现 404 错误 =].
配置正确,http://schmud.de should load http://schmud.de/home/。
关键事实:如果我重新启动 Tomcat 实例,部署将正常工作。我如何避免这种情况?这是 server.xml
的 <host>
配置:
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false">
<!-- 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" suffix=".log" rotatable="false"
pattern="%h %l %u %t "%r" %s %b" />
<Context path="" docBase="home" debug="0" reloadable="true" />
</Host>
我在 Apache Tomcat/7.0.42,JVM 1.7.0,Linux 2.6.32。这是一台 cPanel 机器。
编辑:经过长时间的延迟,我在本地重建了 Tomcat 机器,因此我可以完全访问所有参数。以下是我取消部署然后重新部署同一应用程序时显示错误的日志,导致 404 错误:
tomcat7/localhost.2016-02-14.log
,取消部署并重新部署 -
Feb 14, 2016 1:04:59 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: undeploy: Undeploying web application at '/home'
Feb 14, 2016 1:05:00 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
Feb 14, 2016 1:06:44 PM org.apache.catalina.core.ApplicationContext log
INFO: HTMLManager: list: Listing contexts for virtual host 'localhost'
tomcat7/catalina.2016-02-14.log
从取消部署到重新部署 -
Feb 14, 2016 1:05:00 PM org.apache.catalina.startup.HostConfig undeploy
INFO: Undeploying context [/home]
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader modified
SEVERE: Resource '/WEB-INF/lib/args4j-2.0.26.jar' is missing
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [] has started
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [Timer-0] but has failed to stop it. This is very likely to create a memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SEVERE: The web application [] appears to have started a thread named [New I/O worker #1] but has failed to stop it. This is very likely to create a memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ning.http.client.providers.netty.NettyAsyncHttpProvider.ThreadLocalBoolean] (value [com.ning.http.client.providers.netty.NettyAsyncHttpProvider$ThreadLocalBoolean@288f896e]) and a value of type [java.lang.Boolean] (value [false]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [org.jboss.netty.util.CharsetUtil] (value [org.jboss.netty.util.CharsetUtil@6e49414c]) and a value of type [java.util.IdentityHashMap] (value [{US-ASCII=sun.nio.cs.US_ASCII$Encoder@6e14afdd}]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.loader.WebappClassLoader checkThreadLocalMapForLeaks
SEVERE: The web application [] created a ThreadLocal with key of type [com.ning.http.client.providers.netty.NettyAsyncHttpProvider.ThreadLocalBoolean] (value [com.ning.http.client.providers.netty.NettyAsyncHttpProvider$ThreadLocalBoolean@288f896e]) and a value of type [java.lang.Boolean] (value [true]) but failed to remove it when the web application was stopped. Threads are going to be renewed over time to try and avoid a probable memory leak.
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext resourcesStart
SEVERE: Error starting static Resources
java.lang.IllegalArgumentException: Document base /var/lib/tomcat7/webapps/home does not exist or is not a readable directory
at org.apache.naming.resources.FileDirContext.setDocBase(FileDirContext.java:136)
at org.apache.catalina.core.StandardContext.resourcesStart(StandardContext.java:5089)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5269)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3988)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:745)
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
SEVERE: Exception starting Context with name []
org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]]
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154)
at org.apache.catalina.core.StandardContext.reload(StandardContext.java:3988)
at org.apache.catalina.loader.WebappLoader.backgroundProcess(WebappLoader.java:425)
at org.apache.catalina.core.ContainerBase.backgroundProcess(ContainerBase.java:1345)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1530)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.processChildren(ContainerBase.java:1540)
at org.apache.catalina.core.ContainerBase$ContainerBackgroundProcessor.run(ContainerBase.java:1519)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.catalina.LifecycleException: Error in resourceStart()
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5270)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
... 8 more
Feb 14, 2016 1:05:03 PM org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [] is completed
Feb 14, 2016 1:06:20 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive /var/lib/tomcat7/webapps/home.war
上面清楚地说明了错误,但我对 Tomcat 的了解还不够多,无法理解它们。
当您说重新启动服务器时,您指的是 tomcat 实例还是盒子本身? Tomcat 根据我的经验,部署新版本时应该重启实例。编写部署脚本以节省执行此操作的时间会更有好处。