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