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,好吧,最后實在不行再試試。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM