Jetty, “No multipart config for servlet” problem

2023-10-29

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Jetty, “No multipart config for servlet” problem 的相关文章

随机推荐

  • 判断机器IP是公网ip还是内网ip

    首先是恭喜开通blog 对于ip是否是公网ip 网上已经有很多文章进行了描述 但我每次都记不太住 总要查找一下才又清楚 因此决定在这里记录下来 方便以后查询 ip地址分为五类 E类为保留为今后使用 D类为组播地址 用于主机网络地址的就是A类
  • windows套接字I/0模型-IOCP完成端口模型

    在 Windows 网络编程中 IOCP Input Output Completion Port 是一种高性能的 I O 模型 可以使应用程序能够处理大量并发 I O 操作 IOCP 模型主要通过事件通知和回调函数来处理异步 I O 操作
  • 最长01交替子串(浪潮笔试题)

    题意 给一个只有0和1的字符串 允许反转一个连续区间 即0变成1 1变成0 求最长的01交替串多长 允许不连续 我最先想到的是动态规划解法 状态设计方面 首先一个串的状态会有以0结尾和以1结尾两种 然后题目中说允许反转一个连续区间 那么根据
  • 【JavaEE】_JavaScript(WebAPI)

    目录 1 DOM 1 1 DOM基本概念 1 2 DOM树 2 选中页面元素 2 1 querySelector 2 2 querySelectorAll 3 事件 3 1 基本概念 3 2 事件的三要素 3 3 示例 4 操作元素 4 1
  • vue3使用高德地图完成标注点聚合

  • Linux内核提权漏洞CVE-2023-32233复测及POC脚本

    近日 研究人员发现了Linux内核的NetFilter框架中的新漏洞 CVE 2023 32233 该漏洞可被本地用户用于将权限提升为root 并完全控制系统 问题的根源在于tfilter nf tables是如何处理批处理请求的 经过身份
  • C++引用(&)解析:引用的作用,什么时候使用引用,引用与指针的不同

    引用是什么 什么时候使用引用 做函数的参数 做函数的返回值 引用与指针的不同 引用是什么 引用是变量的别名 理论上不开辟新的空间 符号 是类型标识符的一部分 被引用的数据类型 变量名称 如下图中 变量a 与变量ra 指向同一块内存空间 由此
  • 使用python的tkinter模块制作一个计算器

    使用tkinter模块制作的一个简单的计算器 由于刚学这个模块 所以做的不是很好 截图 点击计算后算式区的值会改成结果 可自行在数字触发的函数中添加数字输入就进行计算回显的功能 代码如下 import tkinter as tk impor
  • Python学习笔记(十):包、模块

    一 包 模块 Python中的包相当于文件夹 模块就是 py文件 不同包下有相同名称的模块时 为了区分 可在模块里加上 包名 模块名 路径 这个路径叫做命名空间 注 如果想让一个普通的文件夹变为包 则需要在这个文件夹内添加 init py文
  • 原子操作实现无锁栈

    atomic3 cpp 使用CAS操作实现一个无锁栈 include
  • Vulkan® A Specification Core And Extension::Vulkan文档核心部分和扩展部分对照与翻译说明

    2020 7 1 更 修改和完善某些描述 Vulkan版本 1 2 137 1 2 145 Vulkan文档分成两种 核心部分 核心部分 扩展部分 核心部分是必定要翻译的 对于扩展部分 本人并不是所有扩展都见过 所以对于扩展部分尽可能的翻译
  • Kanzi Shader入门

    1 版本 kanzi默认支持Opengl ES 2 0 在qnx平台可以支持到ES 3 0 2 着色器 kanzi只支持 顶点着色器 和 片段着色器 3 kanzi studio 无法直接使用shader 需要通过画刷和材质间接使用 在 普
  • strongSwan报文交互过程

    通过上篇案例 我们已经初步掌握了如何通过strongSwan配置两台Linux主机之间的IPsec隧道 今天我们再来看一下strongSwan配置IPsec的报文交互过程和转发性能 组网图还是上次的拓扑 首先查看一下在配置完strongSw
  • 使用FFmpeg命令进行hls切片,得到的ts文件时长不准确

    一 问题描述 使用如下FFmpeg命令进行hls切片 ffmpeg i video2 mp4 hls time 1 f hls out m3u8 由于使用了参数 hls time 1 所以预计生成的ts文件时长会是1秒左右 但结果却是最终生
  • 关于把数据库放在阿里云上,实现共享

    本地的数据库只能实现在自己的机器上访问 别人的电脑无法实现访问 因此通过借助阿里云 把数据库放在阿里云上 从而多人都可以通过阿里云的ip来进行访问操作 在试验过程中 难度最大的就是对阿里云一窍不通 不知从何下手 下面进行一下总结 实现的基本
  • django<model模块和分页功能模块>

    model模块使用 import os django os environ setdefault DJANGO SETTINGS MODULE wxy django settings django setup 指定django的配置 fro
  • dependencies.dependency.(groupId:artifactId:type:classifier)' must be unique:

    C Program Files Java jdk1 8 0 181 bin java exe Dmaven multiModuleProjectDirectory E Software xiaoye CRUD parent Dmaven h
  • Java内存区域(栈、堆、方法区)详细解说

    参考文献 深入学习java虚拟机 概览 java虚拟机在执行java程序的过程中会把它所管理的内存划分成若干个不同的数据区域 这些区域各有用途 以及创建和销毁的时间 有的区域随着虚拟机的进程的启动而存在 有的则依赖用户线程的启动和结束而建立
  • 简单JS解密爬取股票信息案例

    前言 今天给大家带来一个使用JS解密爬取股票信息的案例 本案例比较简单 主要介绍如何找出JS加密的过程 希望通过本案例可以带给大家学习JS的一些思路 本案例网站 https webapi cninfo com cn marketData 一
  • Jetty, “No multipart config for servlet” problem

    I m writing handler for file transfer The request is multipart HTTP message The message is correct tested on other serve