我最近开始使用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在类中放入了所有必要的语句。
import
我不记得对系统上的任何内容进行任何更改都会导致此问题。这个过程一直没有任何问题,所以我现在不明白是什么原因导致它失败了。我认为这很巧合,因为我一直在使用JMeter后失败了。
所有第三方网络应用程序库(例如Commons FileUpload)都属于/WEB- INF/lib您的网络应用程序,而不属于其他应用程序。只要将其放在JRE/lib或中,就会发生此异常JRE/lib/ext。
/WEB- INF/lib
JRE/lib
JRE/lib/ext
确实,正如Bozho所提到的,您还需要确保您没有在Tomcat/lib类路径的不同位置移动/复制/复制任何servlet容器特定的库(应该在中保持不变)。但这不应该引起IMO的例外。基本上是在说,加载FileUpload API的类加载器完全不了解Servlet API。
Tomcat/lib
如果您阅读了Tomcat类加载HOW-TO,那么您将看到JRE/lib与( common )和( webapp )中的库JRE/lib/ext不同的类加载器( bootstrap )和中的库是由不同的类加载器( bootstrap )加载的。引导程序类加载器不了解公共库和Webapp库。相反。在 常见的 类加载器有知识有关的 引导 类加载器和 web应用程序 的类加载器有大约两个知识。由于Servlet API通常是由 公共 类加载器加载的,因此这仅意味着FileUpload API是由 引导程序 加载的Tomcat/lib /WEB-INF/lib __类加载器。 这是错误的:)
/WEB-INF/lib