[英]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/lib
或JRE/lib/ext
就會發生此異常。
事實上,正如 Bozho 所提到的,您還需要確保您沒有在類路徑的不同位置移動/復制/復制任何特定於 servletcontainer 的庫(應該在Tomcat/lib
保持不變)。 但是,如果 IMO 不會導致這種異常。 這基本上說明加載 FileUpload API 的類加載器完全不了解 Servlet API。
如果您閱讀Tomcat classloading HOW-TO ,那么您將看到JRE/lib
和JRE/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.