Java.lang.NoClassDefFoundError: javax/el/ELResolver при запуске примера JSF SimpleHelloByEnteringName
Я новичок в JSF. Я использую Tomcat 7.0.14 и пытаюсь запустить пример SimpleHelloByEnteringName, но получаю следующие ошибки при запуске и во время выполнения
Сообщение о запуске консоли:
INFO: Deploying web application directory SimpleHelloByEnteringName
Jun 15, 2011 7:35:42 AM com.sun.faces.config.ConfigureListener contextInitialized
INFO: Initializing Mojarra 2.0.3 (FCS b03) for context '/SimpleHelloByEnteringName'
Jun 15, 2011 7:35:43 AM com.sun.faces.spi.InjectionProviderFactory createInstance
INFO: JSF1048: PostConstruct/PreDestroy annotations present. ManagedBeans methods marked with these annotations will have said annotations processed.
**Jun 15, 2011 7:35:44 AM com.sun.faces.config.processor.NavigationConfigProcessor addNavigationCasesForRule
WARNING: JSF1058: The resource referred to by to-view-id, 'result.jsp', for navigation from '/pages/inputname.jsp', does not start with '/'. This will be added for you, but it should be corrected.**
Jun 15, 2011 7:35:44 AM com.sun.faces.config.ConfigureListener$WebConfigResourceMonitor$Monitor <init>
INFO: Monitoring jndi:/localhost/SimpleHelloByEnteringName/WEB-INF/faces-config.xml for modifications
Jun 15, 2011 7:35:44 AM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["http-apr-8081"]
Jun 15, 2011 7:35:44 AM org.apache.coyote.AbstractProtocolHandler start
INFO: Starting ProtocolHandler ["ajp-apr-8009"]
Jun 15, 2011 7:35:44 AM org.apache.catalina.startup.Catalina start
и ошибка времени выполнения при попытке запустить http://localhost:8081/SimpleHelloByEnteringName/
HTTP Status 500 -
type Exception report
message
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:342)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.NoClassDefFoundError: javax/el/ELResolver
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
java.lang.ClassLoader.defineClass(ClassLoader.java:615)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
java.net.URLClassLoader.access$000(URLClassLoader.java:58)
java.net.URLClassLoader$1.run(URLClassLoader.java:197)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
java.lang.ClassLoader.loadClass(ClassLoader.java:295)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
java.lang.ClassLoader.loadClass(ClassLoader.java:295)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
org.apache.jasper.runtime.JspFactoryImpl.getJspApplicationContext(JspFactoryImpl.java:220)
org.apache.jsp.index_jsp._jspInit(index_jsp.java:23)
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.ClassNotFoundException: javax.el.ELResolver
java.net.URLClassLoader$1.run(URLClassLoader.java:202)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
java.lang.ClassLoader.defineClass1(Native Method)
java.lang.ClassLoader.defineClassCond(ClassLoader.java:631)
java.lang.ClassLoader.defineClass(ClassLoader.java:615)
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:141)
java.net.URLClassLoader.defineClass(URLClassLoader.java:283)
java.net.URLClassLoader.access$000(URLClassLoader.java:58)
java.net.URLClassLoader$1.run(URLClassLoader.java:197)
java.security.AccessController.doPrivileged(Native Method)
java.net.URLClassLoader.findClass(URLClassLoader.java:190)
sun.misc.Launcher$ExtClassLoader.findClass(Launcher.java:229)
java.lang.ClassLoader.loadClass(ClassLoader.java:306)
java.lang.ClassLoader.loadClass(ClassLoader.java:295)
sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
java.lang.ClassLoader.loadClass(ClassLoader.java:295)
java.lang.ClassLoader.loadClass(ClassLoader.java:247)
org.apache.jasper.runtime.JspFactoryImpl.getJspApplicationContext(JspFactoryImpl.java:220)
org.apache.jsp.index_jsp._jspInit(index_jsp.java:23)
org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java:49)
org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java:171)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:390)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.14 logs.
Как эта проблема возникает и как ее решить?
Ответы
Ответ 1
ПРЕДУПРЕЖДЕНИЕ: JSF1058: ресурс, на который ссылается to-view-id, 'result.jsp', для навигации из '/pages/inputname.jsp', не начинается с '/'. Это будет добавлено для вас, но оно должно быть исправлено.
Предупреждение не имеет отношения к проблеме. JSF уже исправил его для вас, но он говорит вам, что вы должны исправить его самостоятельно в faces-config.xml
.
java.lang.ClassNotFoundException: javax.el.ELResolver
Это, однако, довольно серьезно. Это может иметь несколько причин:
-
На самом деле вы не запускаете Tomcat 7.0, но Tomcat 5.5, которому не хватает этого класса. Дважды проверьте его.
-
Вы сбросили кучу специализированных библиотек servletcontainer, таких как el-api.jar
, jsp-api.jar
и т.д. другой make-версии servletcontainer (возможно, Tomcat 5.5?) в webapp WEB-INF/lib
или в Java JRE/lib
папка. Возможно, преодолеть проблемы компиляции. Неправильное решение для перемещения/копирования сервлетов-контейнеров определенного JAR-типа. Отмените его и удалите все.
-
Ваш web.xml
не объявляется совместимым, по крайней мере, с инструкцией Servlet 2.5. Поскольку вы упоминаете, что используете Tomcat 7.0, который является контейнером Servlet 3.0, вы должны объявить web.xml
соответствовать Servlet 3.0:
<?xml version="1.0" encoding="UTF-8"?>
<web-app
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
id="WebApp_ID" version="3.0">
<!-- Your config here -->
</web-app>
Обновить: oh wait... Я googled на "SimpleHelloByEnteringName", и я обнаружил, что это на самом деле пример Roseindia.net(дрожь), представленный здесь: Загрузка и установка примера JSF SimpleHelloByEnteringName. Я хотел бы подчеркнуть, что этот сайт является наихудшим ресурсом обучения Java EE на сетях. Я настоятельно рекомендую перейти на другие ресурсы.
Ответ 2
У меня была аналогичная проблема при выполнении динамического веб-проекта в Eclipse.
java.lang.NoClassDefFoundError: javax/el/ELResolver
Здесь проблема заключается в том, что классы, которые вы используете в своем проекте, не определены в classpath. В моем случае мне пришлось добавить
- эль-api.jar
- JSP-api.jar
- сервлет-api.jar
в мой путь Tomcat в подзаголовках Bootstrap.
Итак, в вашем случае проверьте, имеются ли эти 3 баночки в каталоге C:\Tomcat\lib. Добавьте его в путь к классам, если он отсутствует.
Надеюсь, что это решает вашу проблему.
Ответ 3
Вот Это Да ! работает ! Спасибо большое !