2011-11-16 37 views
0

运行我的java web项目时出现奇怪的异常。看起来这是“随机”发生后,我保存了一些我的JSP的一些变化。我永远不会记得改变任何设置。我从来没有遇到过这样的错误,因为之前找到HubPortal类没有任何问题。获取一个奇怪的java.lang.NoClassDefFoundError异常

下面是完整的堆栈跟踪:

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
7: HubPortal hp = new HubPortal(); 

root cause 

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

这意味着log4j jar file在Web应用程序的运行时类路径缺失同时被要求由HubPortal类吧。您需要将它放在与包含HubPortal类的JAR文件相同的位置,例如/WEB-INF/lib文件夹或其他位置的HubPortal类。

+0

我把罐子里的src(里面有HubPortal类),它修复了我遇到的错误,但是它确实产生了另一个错误。 (我会把它放在这里,但是我超过了字符数限制!) http://pastebin.com/s5Ldg7hz – user906153

+0

显然还有其他的依赖关系,但是这个异常现在不包含有用的信息。将Java代码放入普通Java类而不是JSP文件应该会导致更明显的例外。另见http://stackoverflow.com/questions/3177733/how-to-avoid-java-code-in-jsp-files/3180202#3180202 – BalusC

+0

好的,谢谢。但是,关于为什么这个错误出现在蓝色之外的任何想法? – user906153

0

看起来您的HubPortal类无法找到记录器类,请将其作为您的web-inf的一部分。

+0

我刚刚检查过,并且我的WEB-INF – user906153

+0

中的Logger类的.jar尝试使用类似于代理程序ransack的工具来确定该类是否实际位于该jar中并尝试重新启动服务器。 – r0ast3d

0

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

+0

我目前在我的WEB-INF – user906153

+0

中有commons-logging jar log4j!= Commons Logging – BalusC

+0

@Barusc oops,你是对的,刚刚看到了org.apache。现在改变了。 –

3

除了每个人的答案,我想说一些 提示为java.lang.NoClassDefFoundError或抛出java.lang.ClassNotFoundException:

  1. 你应该首先确认你的classpath
  2. 您需要确保所需 %CONTEXT-ROOT%/WEB-INF/Classes(Servlet directory)或 下的类如果从属类可用作JAR,那么它在%CONTEXT-ROOT%/WEB-INF/lib/xyz.jar之内。记住容器需要在运行时访问这些类!