最近刚刚接触Tomcat,对其还不是很了解。在这几天,遇到一个Tomcat启动闪退的问题,通过查阅各种资料,算是完美解决。在此分享给朋友们。
首先,确定你的问题在哪里。有两个方法,你可以通过日志去查询,也可以直接去一般处理程序中启动。
1.查询错误:win+R 输入cmd,进入一般处理程序。通过cd 找到你Tomcat的bin文件夹,在bin下面输入startup.bat run运行,运行后,如果提示,缺少JAVA_HOME 或者缺少JRE_HOME(如图所示)。说明你的环境变量不对,或者是缺少环境变量。
2.解决方案:通过命令行的提示看到,这是因为电脑上没有配置JAVA_HOME或者JRE_HOME导致的。那么下面添加上JAVA_HOME和JRE_HOME。具体步骤为计算机->属性->环境变量,然后添加系统变量:如图所示
添加完JAVA_HOME和JRE_HOME两个系统变量之后,在将这两个变量放到path系统变量中,方法是,在path变量值的后面直接追加 【;%JAVA_HOME%;%JRE_HOME% 】如图,注意分号是环境变量的分割符号,不可少。
设置好之后,确定,保存,重新启动一般处理程序。继续运行步骤一,这时的运行结果,一般如下:如果,你的Tomcat可以启动了,那么恭喜你,问题解决了!
3.如果,启动到这一步之后,Tomcat启动到中间,又出现错误,这时,我们就要通过日志,去查询错误。进入Tomcat根目录下的Logs,找到对应的catalina.2015-0*-**.log,在这里,你会看到警告和错误。如下所示:
警告: Couldn't initialize Jasper java.lang.NoClassDefFoundError: javax/servlet/jsp/JspFactory at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:344) at org.apache.catalina.core.JasperListener.lifecycleEvent(JasperListener.java:63) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402) at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:99) at org.apache.catalina.startup.Catalina.load(Catalina.java:638) at org.apache.catalina.startup.Catalina.load(Catalina.java:663) 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:483) at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:280) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:454) Caused by: java.lang.ClassNotFoundException: javax.servlet.jsp.JspFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 15 more 七月 19, 2015 3:26:10 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["http-bio-8080"] 七月 19, 2015 3:26:10 下午 org.apache.coyote.AbstractProtocol init 信息: Initializing ProtocolHandler ["ajp-bio-8009"] 七月 19, 2015 3:26:10 下午 org.apache.catalina.startup.Catalina load 信息: Initialization processed in 952 ms 七月 19, 2015 3:26:10 下午 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[8005]] 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:483) at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:321) at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455) Caused by: java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory at org.apache.naming.NamingContext.<clinit>(NamingContext.java:58) at org.apache.catalina.core.NamingContextListener.lifecycleEvent(NamingContextListener.java:252) at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117) at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90) at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:731) at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150) ... 7 more Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory at java.net.URLClassLoader$1.run(URLClassLoader.java:372) at java.net.URLClassLoader$1.run(URLClassLoader.java:361) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:360) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 13 more
4.解决方案:这个错误,困扰了我很久,一直找不到解决方案,在网上查阅了很多资料,也没有办法解决。最后,在一个论坛的角落里,找到了解决方案。这个错误的主要原因就是找不到LogFactory,引起这个错误有很多可能,其中,有一种就是你在jdk的bin下面,添加了重复的jar包,或者类似功能的jar包,导致重复,还有就是在Tomcat的bin下面添加的jar包引起的错误。我是在jdk下面添加了一个javaee.jar
解决当时出现的Javac不是内部命令的错误。导致Tomcat启动中途失败。
学习还在继续,Tomcat的研究也在进行中,边学习,边总结,变分享,如果有错误,欢迎指正,感激不尽!
版权声明:本文为博主原创文章,未经博主允许不得转载。