how2j.cn

列罗出了Tomcat常见的问题,如不能启动,屏幕一闪而过,启动之后,访问总是出现404等等常见问题。

以下排查手段都是针对通过startup.bat 独立方式启动的Tomcat,集成开发环境IDE(IDEA,ECLIPSE,MYECLIPSE等) 下的Tomcat启动不在此知识点讨论范围之内。

步骤 1 : JAVA_HOME   
步骤 2 : CATALINA_HOME未设置   
步骤 3 : CATALINA_HOME错误设置   
步骤 4 : 端口冲突   
步骤 5 : localhost.yyyy-mm-dd.log   
步骤 6 : Error FilterStart   
步骤 7 : JDK版本   

步骤 1 :

JAVA_HOME

现象:点击startup.bat之后,屏幕一闪而过
检验:如图所示, 首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到JRE_HOME environment .... 这么个提示,就表示JAVA_HOME环境变量没有设置。
分析:Tomcat本身是JAVA程序,必须要有JDK才可以执行,所以必须配置JAVA_HOME。
解决:进入配置JAVA_HOME教程,跟着下载,配置,验证三个步骤学习如何进行JDK环境变量配置。
JAVA_HOME
步骤 2 :

CATALINA_HOME未设置

现象:点击startup.bat之后,屏幕一闪而过
检验:如图所示, 首先通过cmd命令进入控制台,然后切换到对应的目录执行startup命令,得到CATALINA_HOME environment .... 这么个提示,就表示CATALINA_HOME环境变量设置错误。
分析:Tomcat执行必须依赖CATALINA_HOME或者CATALINA_BASE这两个环境变量。 如果没有在环境变量里配置过,那么会自动采用bin目录的父目录作为CATALINA_HOME和CATALINA_BASE。 如果配置了,而所配置的地方又不是正确的TOMCAT目录,那么就会出现这个错误。
解决:
1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量。
2. 或者把CATALINA_HOME设置为正确的TOMCAT目录。
CATALINA_HOME未设置
步骤 3 :

CATALINA_HOME错误设置

现象:Tomcat可以成功启动,但是就是不能访问自己配置的web应用,老是提示404错误
检验:如图所示, 在环境变量里,CATALINA_HOME设置在了另一个合法的tomcat目录上,所以无论运行哪个startup.bat,都会导致这个d:/tomcatxxxx目录下的程序被启动,而不是你期望的那个。
分析:默认的Tomcat会优先根据环境变量中的CATALINA_HOME来定位目录,并运行。
解决:
1. 在环境变量中删除CATALINA_HOME,CATALINA_BASE的配置,记得不仅要检查环境变量,还要检查用户变量。
2. 或者使用本站的纯净版 Tomcat,已经取消了对环境变量CATALINA_HOME和CATALINA_BASE的依赖。
CATALINA_HOME错误设置
步骤 4 :

端口冲突

现象:屏幕一闪而过,或者不会关闭,但是提示大量错误,其中会看到如图所致的Address already in use: JVM_Bind <null>:80,即表示端口被占用了。

检验:如果是这个错误,在TOMCAT目录下的logs目录里,会有一个日志文件:catalina.yyyy-mm-dd.log(当天时间),在这个日志文件里会记载一样的错误:Address already in use: JVM_Bind <null>:80。即表明80端口被占用了。

分析:端口是独占式的,一旦一个程序占用了这个端口,其他程序就不能够再去占用它了。而80端口,有可能是被已经存在的Tomcat占用了,也有可能是被其他不知名的软件占用了,比如Apache,IIS,Oracle等等。
解决:请按照Tomcat 端口被占用了怎么办? 步骤进行操作,定位占用端口的程序,并关闭,即可。
端口冲突
步骤 5 :

localhost.yyyy-mm-dd.log

现象:404错误
检验:打开tomcat/logs目录里的localhost.yyyy-mm-dd.log文件,发现大量的报错信息。
分析:当server.xml, web.xml配置错误的时候,当前web应用就会部署失败,并且会将错误信息输出到localhost.yyyy-mm-dd.log文件中。
解决: 要在localhost.yyyy-mm-dd.log文件中看提示什么错误,有可能是配置的context目录不存在,有可能是多了一个>符号,具体问题,具体分析了。
localhost.yyyy-mm-dd.log
步骤 6 :

Error FilterStart

现象:404错误,明明有文件,但是就是不能访问。
检验:这个严格地说,也是配置失败,但是tomcat不会大量报错,只会偷偷地来这么一句: startup failed dut to previous errors。
分析:过滤器启动失败就会报这个错。
解决:同样的,过滤器启动失败原因也是多种多样,好在它都会把具体错误信息输出到localhost.yyyy-mm-dd.log,这样打开localhost.yyyy-mm-dd.log根据实际情况分析,就可以较快定位问题所在了。
Error FilterStart
步骤 7 :

JDK版本

现象:404错误,明明有文件,但是就是不能访问。
检验:在命令行中运行java -version 检查一下当前java的版本
分析:当部署的web应用中的类是由高版本JDK编译生成,而当前tomcat运行所使用的JDK又是低版本的话,就会报出如图所示的错误:UnsupportedClassVersionError,进而导致web应用启动失败。
解决:请使用JDK8或者更高版本,请参考 检测JDK版本,以及下载与配置
JDK版本


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2017-08-29 实践项目
Hakim
站长最近实践项目比较少点嘞~~~,是在啃代码,还是充电中嘞~~~,站长可以透露下下半年的计划安排的不,啊哈哈哈~~~




1 个答案

how2j 答案时间:2017-08-30
近期做了大量免费教程呀,idea,git,maven,redis等等。 为做ssm项目铺路呢




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到




2017-07-23 Tomcat启动闪退,catalina.2017-07-23.log里面有很多错误提示,jdk是正常的
helloC



catalina.2017-07-23.log里面的严重提示: 严重: Error starting static Resources 严重: A child container failed during start 严重: A child container failed during start 严重: The required Server component failed to start so Tomcat is unable to start. -------------------------------------------------------------------------- 详细提示: ------------------------------------------------------------------------------- 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.StandardContext setPath 警告: A context path must either be an empty string or start with a '/' and do not end with a '/'. The path [/] does not meet these criteria and has been changed to [] 七月 23, 2017 7:29:38 下午 org.apache.tomcat.util.digester.SetPropertiesRule begin 警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'debug' to '0' did not find a matching property. 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server version: Apache Tomcat/7.0.64 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server built: Aug 19 2015 17:18:06 UTC 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Server number: 7.0.64.0 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Name: Windows 10 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: OS Version: 10.0 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Architecture: x86 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Java Home: C:\Program Files (x86)\Java\jdk1.8.0_91\jre 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Version: 1.8.0_91-b15 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: JVM Vendor: Oracle Corporation 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_BASE: D:\tomcat_8080 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: CATALINA_HOME: D:\tomcat_8080 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.util.logging.config.file=D:\tomcat_8080\conf\logging.properties 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.endorsed.dirs=D:\tomcat_8080\endorsed 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.base=D:\tomcat_8080 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Dcatalina.home=D:\tomcat_8080 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.VersionLoggerListener log 信息: Command line argument: -Djava.io.tmpdir=D:\tomcat_8080\temp 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent 信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jdk1.8.0_91\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files (x86)\Java\jdk1.8.0_91\bin;C:\ProgramData\Oracle\Java\javapath;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Java\jdk1.8.0_91\bin;C:\Program Files (x86)\Altium Designer Winter 09\System;C:\Program Files (x86)\MySQL\MySQL Server 5.0\bin;C:\MinGW\bin;C:\Program Files (x86)\Bitvise SSH Client;C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools;C:\Program Files (x86)\Microsoft Visual Studio\VC98\bin;C:\adb;C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools\WinNT;C:\Program Files (x86)\Microsoft Visual Studio\Common\MSDev98\Bin;C:\Program Files (x86)\Microsoft Visual Studio\Common\Tools;C:\Program Files (x86)\Microsoft Visual Studio\VC98\bin;. 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-bio-8080"] 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-bio-8009"] 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 611 ms 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.StandardService startInternal 信息: Starting service Catalina 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.StandardEngine startInternal 信息: Starting Servlet Engine: Apache Tomcat/7.0.64 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.StandardContext resourcesStart 严重: Error starting static Resources java.lang.IllegalArgumentException: Document base E:\download\j2ee\web 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:5132) at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5319) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.ContainerBase startInternal 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1122) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) ... 6 more Caused by: org.apache.catalina.LifecycleException: Error in resourceStart() at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5320) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.ContainerBase startInternal 严重: A child container failed during start java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] at java.util.concurrent.FutureTask.report(FutureTask.java:122) at java.util.concurrent.FutureTask.get(FutureTask.java:192) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1122) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:739) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) at org.apache.catalina.startup.Catalina.start(Catalina.java:689) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1574) at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1564) at java.util.concurrent.FutureTask.run(FutureTask.java:266) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) at java.lang.Thread.run(Thread.java:745) Caused by: org.apache.catalina.LifecycleException: A child container failed during start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130) at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:819) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 6 more 七月 23, 2017 7:29:38 下午 org.apache.catalina.startup.Catalina start 严重: The required Server component failed to start so Tomcat is unable to start. org.apache.catalina.LifecycleException: Failed to start component [StandardServer[8085]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalina.startup.Catalina.start(Catalina.java:689) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455) Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardService[Catalina]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:739) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 7 more Caused by: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina]] at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:154) at org.apache.catalina.core.StandardService.startInternal(StandardService.java:443) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 9 more Caused by: org.apache.catalina.LifecycleException: A child container failed during start at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1130) at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:300) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 11 more 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol pause 信息: Pausing ProtocolHandler ["http-bio-8080"] 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol pause 信息: Pausing ProtocolHandler ["ajp-bio-8009"] 七月 23, 2017 7:29:38 下午 org.apache.catalina.core.StandardService stopInternal 信息: Stopping service Catalina 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol destroy 信息: Destroying ProtocolHandler ["http-bio-8080"] 七月 23, 2017 7:29:38 下午 org.apache.coyote.AbstractProtocol destroy 信息: Destroying ProtocolHandler ["ajp-bio-8009"]

							

							


1 个答案

how2j 答案时间:2017-07-24
关键错误是这个: java.lang.IllegalArgumentException: Document base E:\download\j2ee\web does not exist or is not a readable directory 请检查一下对应的目录是否存在




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-04-14 修改server.xml后,部署Tomcat的时候,遇到的另一个错误?




提问之前请登陆
关于 J2EE-Tomcat-Tomcat 问题排查 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图