Java 为什么在指向ServletFileUpload的HttpServletRequest上出现NoClassDefFoundError?
我最近开始使用JMeter在我的pc上本地加载测试我的webapp。我有一个用于上传图像的jsp页面。图像由我的servlet处理。当我今天尝试此过程时,我遇到以下异常/错误:Java 为什么在指向ServletFileUpload的HttpServletRequest上出现NoClassDefFoundError?,java,tomcat,servlets,file-upload,noclassdeffounderror,Java,Tomcat,Servlets,File Upload,Noclassdeffounderror,我最近开始使用JMeter在我的pc上本地加载测试我的webapp。我有一个用于上传图像的jsp页面。图像由我的servlet处理。当我今天尝试此过程时,我遇到以下异常/错误: exception javax.servlet.ServletException: Servlet execution threw an exception root cause java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletReques
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之后,它失败了…这意味着您的servlet容器没有servlet api。安装一个干净的Tomcat并尝试在那里部署。首先检查您在
tomcat/lib
中是否有servlet api jar。并确保您没有在webapps/yourapp/WEB-INF/lib
所有第三方webapp库(如Commons FileUpload)都位于您的webapp的/WEB-INF/lib
中,而不是其他位置。无论何时将其放置在JRE/lib
或JRE/lib/ext
中,都可能发生此异常
事实上,正如Bozho提到的,您还需要确保没有在类路径的不同位置移动/复制/复制任何特定于servletcontainer的库(在Tomcat/lib
中应该保持不变)。但这不应该导致这种例外。这基本上说明加载FileUpload API的类加载器完全不了解Servlet API
如果您阅读了,那么您将看到
JRE/lib
和JRE/lib/ext
中的库由不同的类加载器(引导)加载,而不是Tomcat/lib
(公共)和/WEB-INF/lib
(webapp)中的库。引导类加载器不了解公共库和webapp库。相反。普通类加载器了解引导类加载器,而webapp类加载器了解两者。由于Servlet API通常由公共类加载器加载,这只能意味着FileUpload API由引导类加载器加载。这是错误的:)是的,servlet-api.jar仅在c:\jakarta tomcat\lib中。我正在运行Tomcat 6.0.29。@katura-只需在新安装上试用即可。Install=unzip。感谢您指出我的错误。我从jre/lib/ext文件夹中删除了第三方jar(我在那里复制了它们),在重新启动(而不是重新安装)Tomcat之后,该进程将恢复并按原样运行。