java.lang.IllegalStateException: 由于没有提供multi-part配置,无法处理parts at org.apache.catalina.connector.Req

问题

Servlet+JSP开发javaWeb项目,发送请求控制台报错

详细问题

form表单核心代码

<form action="${pageContext.request.contextPath}/seller/addgoods" method="post">
form>

处理类核心代码

@WebServlet(name = "SellerAddGoodsServlet", value = "/seller/addgoods")
public class SellerAddGoodsServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

解决方案

对于处理类增加@MultipartConfig 注解
对于笔者即

@WebServlet(name = "SellerAddGoodsServlet", value = "/seller/addgoods")
@MultipartConfig
public class SellerAddGoodsServlet extends HttpServlet {
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    }
}

原因

该注解表示Servlet支持文件上传,由于笔者html中涉及图片上传,因此需添加该注解。

具体

@MultipartConfig 是一个Java注解,用于在Java Servlet中配置支持文件上传的功能。它通常与标签的enctype属性值设置为"multipart/form-data"一起使用。

当你在Servlet中使用@MultipartConfig注解时,它告诉容器该Servlet可以接收以多部分(multipart)形式发送的请求。多部分请求通常用于上传文件,因为文件的二进制数据需要以多部分形式进行传输。

@MultipartConfig注解提供了以下属性:

fileSizeThreshold:指定上传文件大小的临界值(以字节为单位)。如果上传文件的大小超过该阈值,容器将写入文件到磁盘,否则将文件存储在内存中。默认值为0,表示所有文件都将存储在磁盘上。
maxFileSize:指定上传文件的最大大小限制(以字节为单位)。默认值为-1,表示没有限制。
maxRequestSize:指定请求的最大大小限制(以字节为单位)。默认值为-1,表示没有限制。
location:指定上传文件的临时存储位置。默认为空字符串,表示使用容器的默认临时目录。
使用@MultipartConfig注解的示例代码如下:

import javax.servlet.annotation.MultipartConfig;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/upload")
@MultipartConfig(
  fileSizeThreshold = 1024 * 1024,  // 1MB
  maxFileSize = 1024 * 1024 * 10,  // 10MB
  maxRequestSize = 1024 * 1024 * 50  // 50MB
)
public class UploadServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    // 处理文件上传逻辑
  }
}

在上面的示例中,UploadServlet使用了@MultipartConfig注解来配置文件上传的参数。它指定了文件大小的临界值、上传文件的最大大小限制和请求的最大大小限制。开发人员可以根据实际需求进行调整。

在doPost方法中,开发人员可以编写具体的文件上传逻辑,例如获取上传的文件、保存文件等操作。请注意,HttpServletRequest对象提供了一些方法来获取上传的文件,如getPart(String name)或getParts()。

需要注意的是,@MultipartConfig注解只适用于Servlet 3.0及更高版本。如果开发人员的项目是基于Servlet 2.x版本,可能需要使用其他文件上传的库或手动解析多部分请求数据。

参考文献

具体参考chatgpt

原创不易
转载请标明出处
如果对你有所帮助 别忘啦点赞支持哈
在这里插入图片描述

你可能感兴趣的:(java,apache,servlet)