tomcat启动问题 严重: End event threw exception

错误信息:

严重: End event threw exception

java.lang.NoSuchMethodException: org.apache.catalina.deploy.WebXml addServlet

    at org.apache.tomcat.util.IntrospectionUtils.callMethod1(IntrospectionUtils.java:849)

...................(略)

四月 03, 2018 2:43:22 下午 org.apache.catalina.startup.ContextConfig parseWebXml

严重: Parse error in application web.xml file at file:/D:/apps/apache-tomcat-7.0.71/conf/web.xml

org.xml.sax.SAXParseException; systemId: file:/D:/apps/apache-tomcat-7.0.71/conf/web.xml; lineNumber: 115; 

..........................(略)

四月 03, 2018 2:43:22 下午 org.apache.catalina.startup.ContextConfig parseWebXml

严重: Occurred at line 115 column 15

四月 03, 2018 2:43:22 下午 org.apache.tomcat.util.digester.Digester endElement

严重: End event threw exception

解决办法:

在tomcat下conf中context.xml文件配置<Loader delegate="true" />。

分析:

JVM的classloader加载继承关系分为BootstarpClassLoader --> ExtClassLoader --> SystemClassLoader,应用的WebAppClassLoader继承自SystemClassLoader,在加载具体某个类时,一般会先委托给父类ClassLoader,当父类ClassLoader无法加载成功时,才会再由子类ClassLoader尝试加载,这就是所谓的delegate机制。

其次,Tomcat在jvm的ClassLoader机制上增加了几个继承层次。
SystemClassLoader --> CommonClassLoader -->(ServerClassLoader | SharedClassLoader --> WebAppClassLoader)。
CommonClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中common.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/lib下的文件。该loader加载的类为tomcat服务器和tomcat下面的所有webApp所共享。
ServerClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中server.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/server下的文件。该loader加载的类为tomcat服务器所独有核心类,tomcat下面的WebApp无法访问。
SharedClassLoader用来加载${CATALINA_HOME}/conf/catalina.properties中shared.loader配置目录下的类文件,一般是用来加载${CATALINA_HOME}/shared下的文件。该loader加载的类为tomcat下面的所有webApp所共享。
WebAppClassLoader用来加载${CATALINA_HOME}/webapps/目录下每个WebApp应用的/WEB-INF/class,/WEB-INF/lib的类文件,每个WebApp对应一个WebAppClassLoader,用来加载其所需要的类文件。

最后,说一下delegate配置的意义。
True,表示tomcat将遵循JVM的delegate机制,即一个WebAppClassLoader在加载类文件时,会先递交给SharedClassLoader加载,SharedClassLoader无法加载成功,会继续向自己的父类委托,一直到BootstarpClassLoader,如果都没有加载成功,则最后由WebAppClassLoader自己进行加载。
False,表示将不遵循这个delegate机制,即WebAppClassLoader在加载类文件时,会优先自己尝试加载,如果加载失败,才会沿着继承链,依次委托父类加载。

在此说一下配置为False需要注意的问题:一旦配置为False,如果你在WebApp中自己定义了一个java.lang.String,则这个String类会有可能覆盖掉jdk中的String类,这也许不是你想要的结果。另外对于多个WebApp公用jar包,你可能会放到${CATALINA_HOME}/shared目录中共享,但是一不小心在应用的/WEB-INF/lib中也包含了一个同名的但版本不一致的jar的话,这就有可能会导致很多奇怪的问题。

转载于:https://www.cnblogs.com/taleche/p/8709054.html

### 回答1: "end event threw exception" 的意思是“结束事件引发了异常”。这通常是指在程序执行结束事件时发生了错误或异常,导致程序无法正常结束。需要进一步分析和调试程序,找出问题所在并进行修复。 ### 回答2: "end event threw exception" 是一个错误信息,意思是在某个事件的结尾处发生了异常。异常表示在程序执行过程中发生了一些不正常的情况,导致程序无法正常运行或执行完成。 当一个事件被执行时,它可能会调用一系列的代码来完成特定的任务。如果在事件的最后阶段发生了异常,说明在代码执行的过程中出现了错误或问题。这种异常可能是由于代码错误、数据异常、资源不足或其他不可预测的情况引起的。异常的发生会导致程序无法继续执行下去,并输出相关的错误信息。 要解决这个问题,我们可以根据具体的错误信息和异常类型采取不同的方法。首先,可以通过查看错误信息或异常堆栈跟踪来定位异常发生的具体位置。然后,我们可以检查相关的代码并修复其中的问题,例如修复代码错误、处理数据异常、增加必要的资源等。 在处理异常时,我们还可以使用异常处理机制,例如使用try-catch语句来捕获并处理异常。通过捕获异常,我们可以对异常进行适当的处理,例如向用户显示错误信息、写入日志文件或执行其他必要的操作。 为了避免未来类似的异常,我们可以加强代码的健壮性和测试覆盖率。这包括编写可靠的代码、进行充分的单元测试,并在生产环境中进行充分的集成测试。 总之,“end event threw exception”是一个提示异常发生的错误信息,我们需要根据具体情况进行调试和修复,以确保程序能够正常执行并避免类似问题的再次发生。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值