簡體   English   中英

為什么我在指向 ServletFileUpload 的 HttpServletRequest 上收到 NoClassDefFoundError 錯誤?

[英]Why am I getting a NoClassDefFoundError on HttpServletRequest that is pointing to ServletFileUpload?

我最近開始使用 JMeter 在我的電腦本地加載測試我的 web 應用程序。 我有一個用於上傳圖片的jsp頁面。 圖像由我的 servlet 處理。 當我今天嘗試該過程時,出現以下異常/錯誤:

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
    org.apache.commons.fileupload.servlet.ServletFileUpload.isMultipartContent(ServletFileUpload.java:68)
    spyder.servlets.imageProcessing.ImageProcessingServlet.uploadEditedImagesToDB(ImageProcessingServlet.java:527)
    spyder.servlets.imageProcessing.ImageProcessingServlet.doPost(ImageProcessingServlet.java:153)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
    javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

這是我的 servlet 中異常所指的代碼 -

boolean isPart = ServletFileUpload.isMultipartContent(req);

....是的,我已經把所有必要的import語句都放在了類中。

我不記得對系統上的任何會導致此問題的更改進行了任何更改。 這個過程一直運行沒有任何問題,所以我不明白是什么導致它現在像這樣失敗。 我認為相當巧合的是,在我使用 JMeter 之后它失敗了......

所有 3rd 方網絡應用程序庫(如 Commons FileUpload)都屬於您的/WEB-INF/lib應用程序的/WEB-INF/lib ,而不是其他地方。 只要您將它放在JRE/libJRE/lib/ext就會發生此異常。

事實上,正如 Bozho 所提到的,您還需要確保您沒有在類路徑的不同位置移動/復制/復制任何特定於 servletcontainer 的庫(應該在Tomcat/lib保持不變)。 但是,如果 IMO 不會導致這種異常。 這基本上說明加載 FileUpload API 的類加載器完全不了解 Servlet API。

如果您閱讀Tomcat classloading HOW-TO ,那么您將看到JRE/libJRE/lib/ext中的JRE/lib/ext由與Tomcat/lib ( common ) 和/WEB-INF/lib類加載器不同的類加載器 ( bootstrap ) 加載/WEB-INF/lib ( webapp )。 引導類加載器不了解 common 和 webapp 庫。 這是反過來的。 通用類加載器了解引導類加載器,而webapp類加載器了解兩者。 由於 Servlet API 通常由公共類加載器加載,這只能表示 FileUpload API 是由引導類加載器加載的。 這是錯誤的:)

這意味着您的 servlet 容器沒有 servlet api。 全新安裝 Tomcat 並嘗試在那里部署。 首先檢查您是否在tomcat/lib有 servlet api jar。 並確保您在webapps/yourapp/WEB-INF/lib沒有它

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM