没有处理器声明任何这些注释:javax.servlet.annotation.MultipartConfig
为什么MultipartConfig注释处理器不能处理注释类?当我使用Gradle构建Java项目时,我得到以下警告: 没有处理器声明这些注释:没有处理器声明任何这些注释:javax.servlet.annotation.MultipartConfig,java,servlets,annotations,Java,Servlets,Annotations,为什么MultipartConfig注释处理器不能处理注释类?当我使用Gradle构建Java项目时,我得到以下警告: 没有处理器声明这些注释:javax.servlet.annotation.MultipartConfig、javax.servlet.annotation.WebServlet 当我从表单向servlet发送一个文件时 HTTP ERROR 500 Problem accessing /historyUpload/upload. Reason: Server Err
javax.servlet.annotation.MultipartConfig、javax.servlet.annotation.WebServlet
当我从表单向servlet发送一个文件时
HTTP ERROR 500
Problem accessing /historyUpload/upload. Reason:
Server Error
Caused by:
java.lang.IllegalStateException: No multipart config for servlet
at org.eclipse.jetty.server.Request.getParts(Request.java:2303)
at org.eclipse.jetty.server.Request.getParts(Request.java:2290)
at org.eclipse.jetty.server.Request.getPart(Request.java:2279)
at javax.servlet.http.HttpServletRequestWrapper.getPart(HttpServletRequestWrapper.java:386)
at com.mycom.UploadServlet.doPost(UploadServlet.java:32)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
[...]
但是我的build.gradle中有javax.servlet-api-3.1.0.jar——我的项目模块包括几个其他的HttpServlet类,这些类根据它构建并执行OK。该JAR确实包含javax.servlet.annotation.MultipartConfig
UploadServlet.java:
package com.mycom.uploadservlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
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 javax.servlet.http.Part;
@SuppressWarnings("serial")
@MultipartConfig(location="/tmp/upload", fileSizeThreshold=1024*1024, maxFileSize=1024*1024*50)
public class UploadServlet extends HttpServlet
{
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
{
resp.setContentType("text/plain");
PrintWriter out = resp.getWriter();
out.printf("Got part: name=%s, size=%d%n",req.getPart("file").getName(), req.getPart("file").getSize());
int i=0;
for(Part part: req.getParts())
{
out.printf("Got part: name=%s, size=%d%n",part.getName(), part.getSize());
part.write(String.format("part-%02d.dat",i++));
}
}
}
问题是我在
web.xml
中定义了一个
配置,它覆盖了类UploadServlet
上的@WebServlet()
注释。我没有使用@WebServlet
注释,因为我在web.xml
中有
配置。但是,即使
块中不包含
块,该重写也会重写类UploadServlet
上的任何@MultipartConfig注释。因此,要处理enctype=“multipart/form data”
的表单,web.xml
中的
块必须包含
块,或者web.xml
中没有
块,而是用@MultipartConfig()
注释类(还有@WebServlet
)
上传servlet
com.mycom.UploadServlet
10485760
20971520
5242880
<servlet>
<servlet-name>UploadServlet</servlet-name>
<servlet-class>com.mycom.UploadServlet</servlet-class>
<multipart-config>
<max-file-size>10485760</max-file-size>
<max-request-size>20971520</max-request-size>
<file-size-threshold>5242880</file-size-threshold>
</multipart-config>
</servlet>