javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法
Posted 流年如水~烟雨随风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法相关的知识,希望对你有一定的参考价值。
今天不用eclipse、myeclipse等开发工具,纯手写JSP页面(有点作死)时突然出现以前从来没遇到过的问题,报错如下:
HTTP Status 500 - java.lang.NoClassDefFoundError: javax/el/ELResolver type Exception report message java.lang.NoClassDefFoundError: javax/el/ELResolver description The server encountered an internal error that prevented it from fulfilling this request. exception javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver org.apache.jasper.servlet.JspServlet.service(JspServlet.java:268) javax.servlet.http.HttpServlet.service(HttpServlet.java:723) root cause java.lang.NoClassDefFoundError: javax/el/ELResolver java.lang.ClassLoader.defineClass1(Native Method) java.lang.ClassLoader.defineClass(ClassLoader.java:620) java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124) java.net.URLClassLoader.defineClass(URLClassLoader.java:260) java.net.URLClassLoader.access$100(URLClassLoader.java:56) java.net.URLClassLoader$1.run(URLClassLoader.java:195) java.security.AccessController.doPrivileged(Native Method) java.net.URLClassLoader.findClass(URLClassLoader.java:188) java.lang.ClassLoader.loadClass(ClassLoader.java:306) java.lang.ClassLoader.loadClass(ClassLoader.java:299) sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268) java.lang.ClassLoader.loadClass(ClassLoader.java:299) java.lang.ClassLoader.loadClass(ClassLoader.java:251) java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319) org.apache.jasper.runtime.JspFactoryImpl.getJspApplicationContext(JspFactoryImpl.java:209) org.apache.jsp.hellotag.hellotag_jsp._jspInit(hellotag_jsp.java:30) org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:52) org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:164) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:340) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260) javax.servlet.http.HttpServlet.service(HttpServlet.java:723) note The full stack trace of the root cause is available in the Apache Tomcat/6.0.45 logs. Apache Tomcat/6.0.45
网上查了资料,总结了各种解决方案,到apache-tomcat/lib目录下,拷贝el-api.jar放到%JAVA_HOME%\jre\lib\ext下这种可以解决暂时的问题。
有一个帖子说jsp-api.jar和servlet-api.jar这两个jar都加入到了jdk的classpath之中了,解决办法就是把jsp-api.jar删除;突然想到因为是手写变异java代码,所以把jsp-api.jar和servlet-api.jar同时加入到了%JAVA_HOME%\jre\lib\ext(这种操作方法其实和加入jdk的classpath效果是一样的),好吧,应该是包紊乱冲突的问题。
解决方法总结:
第一种:到apache-tomcat/lib目录下,拷贝el-api.jar放到%JAVA_HOME%\jre\lib\ext下;
第二种:删掉%JAVA_HOME%\jre\lib\ext中的jsp-api.jar、servlet-api.jar,要编译代码的时候再拷贝进来,方法很笨,但是也是方法。
如果在eclispe 或者 myeclipse中的出现如上情况的话,我没碰到过,要是碰到的话,应该也好解决:
先检查tomcat是否有需要的el-api.jar包,一般肯定是有的;
将%JAVA_HOME%\jre\lib\ext中的el-api.jar删掉(如果有的话);
将集成环境帮你添加的包都删干净,自己一个一个手动添加需要的jar包,这样容易理清各个包的来路,看看到底是哪个包冲突了(一般都是冲突问题,贼烦)。
最后看有很多童鞋说重装JDK,重装IDE,重装tomcat,好吧,最后实在不行再试试。
以上是关于javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/el/ELResolver错误解决办法的主要内容,如果未能解决你的问题,请参考以下文章