无法部署应用目录 [D:\Tomcat\apache-tomcat-9.0.44\webapps\ROOT]java.lang.IllegalStateException: 启动子级时出错
起因是刚开始导入一个web项目,没有导入Tomcat的jar包,导致找不到javax.servlet.http 和 javax.servlet.jsp,看了下网上的建议,将Tomcat7.0\lib下的el-api.jar、jsp-api.jar这两个jar包放到Java\jdk1.8.0_131\jre\lib\ext目录下,导入jar后没有报错了。还有一个报错,是因为从Tomcat8转到Tomcat7,需要修改一个配置文件,在项目下.settings\org.eclipse.wst.common.project.facet.core.xml文件下Tomcat的那行配置删除。
项目是没有错误之后,在Tomcat上启动,就开始报下面的错误:
java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl
看了很多,都说是使用Activiti时,关于Could not initialize class org.apache.jasper.el.ELContextImpl问题,是由于jar包冲突导致的,但是我没有导入Activiti的jar包,
我开始寻找问题,看见有的说是Tomcat版本和jdk版本不一致导致的,我又下载了Tomcat的8.5和9.0版本。但是发现问题没有丝毫解决,甚至更多了,出现了下面的问题:
13-Mar-2021 19:17:23.253 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory Web应用程序目录[D:\Tomcat\apache-tomcat-9.0.44\webapps\manager]的部署已在[47]毫秒内完成
13-Mar-2021 19:17:23.269 信息 [main] org.apache.catalina.startup.HostConfig.deployDirectory 把web 应用程序部署到目录 [D:\Tomcat\apache-tomcat-9.0.44\webapps\ROOT]
13-Mar-2021 19:17:23.284 严重 [main] org.apache.catalina.startup.HostConfig.deployDirectory 无法部署应用目录 [D:\Tomcat\apache-tomcat-9.0.44\webapps\ROOT]
java.lang.IllegalStateException: 启动子级时出错
发现虽然本地启动会报错,但是Tomcat服务器可以启动,不过http://localhost:8080/访问会出现404的报错,搜遍网上也没找到原因,最后还是切回Tomcat7.0,
发现没有报上面的错误,但是在http://localhost:8080/访问会出现500的报错,报的是这个错误:
javax.servlet.ServletException: java.lang.NoClassDefFoundError
然后参考了这个文章:https://blog.csdn.net/qq_39188306/article/details/89672188
解决办法:
1、进入你tomcat安装目录:我的是D:\Tomcat7.0\lib,找到el-api.jar包;
2、找到你安装使用的JDK版本目录,我的是在C:\Program Files\Java\jdk1.8.0_131\jre\lib\ext目录下;
3、将tomcat中的el-api.jar包拷贝到JDK安装目录下的jre/lib/ext目录下(如果已经存在,请覆盖);
按这样的方法解决了,但是总觉得不对劲,这不是我刚开始导入的Tomcat7.0\lib下的el-api.jar、jsp-api.jar这两个包流程吗?
然后我将Java\jdk1.8.0_131\jre\lib\ext目录下el-api.jar、jsp-api.jar和servlet-api.jar三个jar包删除,然后运行发现问题完美解决,然后又使用Tomcat的8.5和9.0版本
发现都可以正常访问http://localhost:8080/
总结:不要随便向Java\jdk1.8.0_131\jre\lib\ext目录下放 jar包,容易导致Tomcat服务器启动时出现jar冲突,出现java.lang.NoClassDefFoundError: Could not initialize class org.apache.jasper.el.ELContextImpl的异常