【发布时间】:2017-06-16 03:43:16
【问题描述】:
为什么 MultipartConfig 注释处理器不在带注释的类上工作?当我使用 Gradle 构建我的 Java 项目时,我收到以下警告:
没有处理器声明任何这些注释: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 。
上传Servlet.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++));
}
}
}
【问题讨论】:
标签: java servlets annotations