得到一个奇怪的java.lang.NoClassDefFoundError异常

时间:2011-11-16 21:08:51

标签: java apache jsp exception

运行我的java web项目时,我遇到了一个奇怪的异常。在我保存对我的一个JSP的一些更改后,似乎“随机”发生了这种情况。我永远不记得改变任何设置。在此项目之前,我从未遇到任何类似的错误,之前找到HubPortal类没有问题。

这是完整的堆栈跟踪:

org.apache.jasper.JasperException: An exception occurred processing JSP page /hubmainpage.jsp at line 7

4: %>
5: <%
6: String responsepage = request.getParameter("show");
7: HubPortal hp = new HubPortal();
8: List processList = hp.getProcessList();
9: List clientList = hp.getClientList();
10: List transList = hp.getTransactionTypeList();


Stacktrace:
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:521)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:412)
    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:717)


root cause 

javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:865)
    org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:794)
    org.apache.jsp.hubmainpage_jsp._jspService(hubmainpage_jsp.java:783)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    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:717)


root cause 

java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    com.middleware.hts.HubPortal.<clinit>(HubPortal.java:23)
    org.apache.jsp.hubmainpage_jsp._jspService(hubmainpage_jsp.java:66)
    org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
    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:717)

关于为什么我突然遇到这个错误的任何想法?

4 个答案:

答案 0 :(得分:5)

7: HubPortal hp = new HubPortal();

root cause 

java.lang.NoClassDefFoundError: org/apache/log4j/Logger
    com.middleware.hts.HubPortal.<clinit>(HubPortal.java:23)

这意味着HubPortal类需要webapp的运行时类路径中缺少log4j jar file。您需要将它放在与包含HubPortal类的JAR文件相同的位置,例如/WEB-INF/lib文件夹或HubPortal类所在的任何位置。

答案 1 :(得分:3)

除了每个人的回答,我想说一些 提示对于java.lang.NoClassDefFoundError或java.lang.ClassNotFoundException:

  1. 您应首先确认您的课程路径
  2. 您需要确保所需的课程 %CONTEXT-ROOT%/WEB-INF/Classes(Servlet directory)或 如果依赖类可以作为JAR使用,则它位于%CONTEXT-ROOT%/WEB-INF/lib/xyz.jar内。请记住容器需要在运行时访问这些类!

答案 2 :(得分:0)

看起来您的HubPortal类无法找到Logger类,可以将其作为web-inf的一部分提供。

答案 3 :(得分:0)

这是因为你没有部署log4j jar。这应该是你的战争的一部分,在WEB-INF/lib