java.lang.NoClassDefFoundError:运行SimpleHelloByEnteringName JSF示例时为javax / el / ELResolver

问题描述

| 我是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.
这个问题是怎么引起的,我该如何解决?     

解决方法

           警告:JSF1058:用于从\'/ pages / inputname.jsp \'导航的to-view-id \'result.jsp \'引用的资源不是以\'/ \'开头。这将为您添加,但应予以更正。 该警告与问题无关。 JSF已经为您修复了它,但是它告诉您应该自己在
faces-config.xml
中修复它。   java.lang.ClassNotFoundException:javax.el.E​​LResolver 但是,这是非常严重的。这可能有几个原因: 实际上,您实际上根本没有运行Tomcat 7.0,但是缺少此类的Tomcat 5.5。仔细检查。 您已经在Webapp的ѭ5specific或Java的
JRE/lib
文件夹中删除了一堆特定于servlet容器的库,例如
el-api.jar
jsp-api.jar
等不同的servlet容器制造/版本(也许是Tomcat 5.5?)。可能是克服编译问题。到处移动/复制servlet容器特定的JAR是错误的解决方案。撤消并全部删除。 您的“ 7”未声明至少符合Servlet 2.5规范。由于您提到要使用Tomcat 7.0(它是一个Servlet 3.0容器),因此应声明“ 7”符合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>
更新:哦,等等...我在\“ SimpleHelloByEnteringName \”上搜索,发现这实际上是一个Roseindia.net(颤抖)示例,如此处所示:下载并安装\“ SimpleHelloByEnteringName \” JSF示例。我想强调一下,该站点是Internet上最差的Java EE学习资源。我强烈建议您去其他资源。 Coreservlets.com JSF 2.0教程 Java EE 6教程-JSF Mkyong.com JSF 2.0教程 我的Eclipse和Glassfish JSF 2.0教程     ,        在Eclipse中执行动态Web项目时,我遇到了类似的问题。   java.lang.NoClassDefFoundError:javax / el / ELResolver 这里的问题是您在项目中使用的类未在类路径中定义。就我而言,我必须添加 el-api.jar jsp-api.jar servlet-api.jar 进入Bootstrap条目下我的Tomcat的类路径。 因此,根据您的情况,检查C:\\ Tomcat \\ lib目录中是否存在这三个jar \。如果不存在,请将其添加到类路径中。 希望这能解决您的问题。