Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在指向ServletFileUpload的HttpServletRequest上出现NoClassDefFoundError?_Java_Tomcat_Servlets_File Upload_Noclassdeffounderror - Fatal编程技术网

Java 为什么在指向ServletFileUpload的HttpServletRequest上出现NoClassDefFoundError?

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

我最近开始使用JMeter在我的pc上本地加载测试我的webapp。我有一个用于上传图像的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之后,它失败了…

这意味着您的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之后,该进程将恢复并按原样运行。