Servlet 3.1 – 多部分异步处理

我正在测试Servlet 3.1 API来处理多部分请求。 我有兴趣同步处理一些部分(文本字段)和其他异步(文件字段)。 乍一看似乎它在Servlet 3.1中不可用(在异步上下文中完全异步通过request.getInputStream()或类似于apache-commons-fileupload库的多部分处理)。

有没有办法使用Servlet 3.1获得此同步/异步处理?

在此先感谢您的时间! 🙂

Synchronoss Technologies最近开源了一个非阻塞的HTTP多部分解析器,可以在这里与Servlet 3.1一起使用。

您只需编写Servlet 3.1 ReadListener ,将传入的字节传递给NioMultipartParser 。 解析器将为您收到的每个部分的代码进行回调。

免责声明:我为Synchronoss Technologies工作。 我们开源了,因为实施起来非常头疼! Servlet 3.1提供的function似乎存在差距,所以希望其他人会发现这个库很有用。

我一直在寻找一个类似的例子,我很惊讶,自原始问题发布一年后,并没有多少。

无论如何,我正准备写自己的,但我的更高判断被踢了,谷歌来救援。 Grizzly项目在这里写了一个异步的多部分示例: https : //grizzly.java.net/httpserverframeworkextras.html

这不能直接插入到Servlet 3.1 readListener中,但我认为应该相当直接地适应它(我的下一个任务)。

如果您可以确保所有文本字段都是第一个,那么您应该能够首先同步读取这些文本字段,然后异步读取文件字段。

否则,只能通过同步或异步将整个请求读入内存,然后直接处理文本字段并将文件字段提交给某个线程池。

无法在同步/异步之间切换,没有一个公共库/ API支持。

servlet API在3.0版中添加了对上载处理的支持,但它完全阻塞。

Commons Fileupload库有流API,你可以用阻塞或异步方式调用它,但是你必须自己实现它。

您也可以使用此库,可以将其配置为在阻塞模式或异步模式下工作(通过实现ReadListener接口)。 如果您知道某些请求只包含文本字段或小文件,那么您可以根据它进行配置。