tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

启动tomcat的项目报错如下:

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..


解决思路:

1.看到这个错误,java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to org.apache.jasper.el.ELContextImpl,包名不同,类名相同,我首先想到的就是包冲突了,就是tomcat中的包与项目中的包冲突了。

2.在eclipse中找到这个类,Ctrl+Shift+T(这个快捷键是用来查找项目中的类,包括引用的jar文件中的类也会被找到,要与Ctrl+Shift+R区分开来),把ELContextImpl粘贴到搜索框里,

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

可以看到,这个类在这个包下。然后点击OK按钮,就会找到这个类所在的jar包:

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..


到这里,我们就找到这个jar包了。下一步就是在pom里找到它的依赖,

3. 打开项目的pom.xml文件,打开Dependency Hierarchy选项卡,

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

幸运的是,我一下就找到了这个jar包,不幸运的是,通过截图可以看到,这个jar包的字体是灰色的,区别于上面那些黑色字体(log4j,mybatis,mybatis-spring,neethi)的jar包,灰色字体的jar包表示它是被间接引入到项目中。

如何在pom.xml中查找是哪个依赖间接引入了org.apache.jasper.glassfish***.jar,这个方法我就不知道了,有看到这个博客的大神,希望能够指点一二,再次不胜感谢。

好吧,我写博客的时候,大神还没有指导我。我就说下我解决的思路,双击这个jar,会打开一个页面显示关于这个jar包的pom信息,

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

通过截图,可以看到这个jar包的Group Id和它的parent中都有jetty的身影,所以我就直接到我的pom文件里找关于jetty的引用,

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..

有两个关于jetty的引用,我选择的方法是删除其中一个,看看这个org.apache.jasper.glassfish***.jar还是否在项目中存在,最后确定是下面这个依赖引入的它。然后加上一段依赖排除的代码,这个包包就不在项目的引用中了。再次启动项目也成功了,呵呵呵......

tomcat启动报错:java.lang.ClassCastException: org.apache.jasper.runtime.ELContextImpl cannot be cast to..