Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/25.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
没有处理器声明任何这些注释:javax.servlet.annotation.MultipartConfig_Java_Servlets_Annotations - Fatal编程技术网

没有处理器声明任何这些注释:javax.servlet.annotation.MultipartConfig

没有处理器声明任何这些注释: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

为什么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

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>