2011-11-16 70 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之內。記住容器需要在運行時訪問這些類!