添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
相关文章推荐
飞奔的山羊  ·  K8S的StorageClass实战(NFS ...·  1 年前    · 
痴情的帽子  ·  SQLAlchemy ...·  1 年前    · 

I'm writing handler for file transfer. The request is multipart HTTP message. The message is correct - tested on other servers.

The problem is "java.lang.IllegalStateException: No multipart config for servlet" on getParts() call.

The test code:

@SuppressWarnings("serial")
@MultipartConfig
@WebServlet(urlPatterns={"/upload"}, name="upload")
public class FilesServlet extends HttpServlet
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
        resp.setContentType("text/plain");
        PrintWriter out = resp.getWriter();
        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++));

The exception:

java.lang.IllegalStateException: No multipart config for servlet
    at org.eclipse.jetty.server.Request.getParts(Request.java:2327)
    at org.eclipse.jetty.server.Request.getParts(Request.java:2314)
    at com.rad.server.servlet.FilesServlet.doPost(FilesServlet.java:31)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:860)
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:535)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1595)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:188)
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1253)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:168)
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:473)
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1564)
    at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:166)
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1155)
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:132)
    at org.eclipse.jetty.server.Server.handle(Server.java:530)
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:347)
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:256)
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:279)
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:102)
    at org.eclipse.jetty.io.ChannelEndPoint$2.run(ChannelEndPoint.java:124)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:247)
    at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:140)
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:708)
    at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:626)
    at java.lang.Thread.run(Thread.java:745)

The jars are: jetty-server-9.4.8 and javax-servlet-api-3.10.

What is wrong here?

Actually, I didn't found why @MultipartConfig annotation doesn't work for me, but I found on i-net kind of workaround that works fine:

     private static final MultipartConfigElement MULTI_PART_CONFIG = new MultipartConfigElement("c:/temp");
     protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String contentType = request.getContentType();
        if(contentType != null && contentType.startsWith("multipart/")){
           request.setAttribute(Request.__MULTIPART_CONFIG_ELEMENT, MULTI_PART_CONFIG);
           for(Part part: request.getParts()) { ... } ;
        } else {  

I think that this solution may be useful for developers who faced such problem

原文链接:https://stackoverflow.com/questions/52514462/jetty-no-multipart-config-for-servlet-problem 这里写链接内容Hello,大家好,很高兴来看老邢教程,今天咱们来聊一聊Servlet3.0的文件上传,3.0JAVA源生支持文件上传。 文件上传,我们需要在表单或HTTPURLConnection中设置请求方式为POST并且还需要设置消息头enctype=”multipart/form-data”(作用是将文件对应的内容以二进制的形式传递给后台) 本文起源于我们遇到的一个问题,本来GeoServer使用的好好的,但是有天突然发现,无法在GeoServer中上传样式的sld文件了,报错 “” ,这不是奇怪了,我们命名配置了文件解析器了,为什么会产生这种错误,经过排查是存在文件解析器冲突问题,本来特此记录一下。万事万物都是有原因的,不正常的运行状态必然是有不正常的逻辑引起的。我们正式靠着这一逻辑,一步一步,逐渐定位问题并解决问题,最终解决了多个之间的冲突问题。希望各位读者也能秉持这一思想,精益求精。回见~ 赠送jar包:jetty-servlet-9.3.19.v20170502.jar; 赠送原API文档:jetty-servlet-9.3.19.v20170502-javadoc.jar; 赠送源代码:jetty-servlet-9.3.19.v20170502-sources.jar; 赠送Maven依赖信息文件:jetty-servlet-9.3.19.v20170502.pom; 包含翻译后的API文档:jetty-servlet-9.3.19.v20170502-javadoc-API文档-中文(简体)-英语-对照版.zip; Maven坐标:org.eclipse.jetty:jetty-servlet:9.3.19.v20170502; 标签:eclipse、jettyservlet、中英对照文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。 双语对照,边学技术、边学英语。 <servlet> <servlet-name>dispatcherServlet</servlet-name> <servlet-class>org.springframework.web.ser... 注解替代web.xml的配置 在eclipse中servlet3.0没有了web.xml文件而是使用注解来配置servlet和filter以及listener的路径 idea中servlet自带使用的是3.1,有web.xml配置文件 也可以支持注解配置注解配置格式:创建servlet 在类上面添加 @WebServlet(urlPatterns... 本文适用于刚学习java编写web应用的同学,没有使用struts和srpingmvc等任何mvc框架,使用原生servlet上传文件时遇到问题Unable to process parts as no multi-part configuration has been provided,意思大致是没有文件上传的配置。在网上看到的大部分都是使用一些mvc框架的解决方案,然后经过自己研究一番,解决了... 1 产生原因 在linux系统中,springboot应用服务在启动(java -jar 命令启动服务)的时候,会在操作系统的/tmp目录下生成一个tomcat*的文件目录,上传的文件先要转换成临时文件保存在这个文件夹下面。由于临时/tmp目录下的文件,在长时间(10天)没有使用的情况下,就会被系统机制自动删除掉。所以如果系统长时间无人问津的话,就可能导致上面这个问题。 2 解决方法 添加配置类 手动的将临时文件夹设置为自定义的文件夹,就不会被Linux删除了。 注:在windows系统中可以生效,系 spring-boot 报错 Caused by: java.lang.IllegalStateException: No multipart config for servlet 需要配置上 @Bean MultipartConfigElement multipartConfigElement() { MultipartConfigFactory factory = new M... 我们先看一下api文档怎么描述@MultipartConfig的:/** * Annotation that may be specified on a {@link javax.servlet.Servlet} * class, indicating that instances of the <tt>Servlet</tt> expect requests * that conform t