在java servlet中处理“multipart / related”

前端之家收集整理的这篇文章主要介绍了在java servlet中处理“multipart / related”前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

在Jetty 8下运行的Servlet接收以下请求:

Header:
Content-Type = multipart/related; boundary=example

Data:

--example
content-type: text/xml; charset=UTF-8

data1here

--example
content-type: text/xml; charset=UTF-8

data2here

--example--

>有没有一种方便的方法从这种请求中获取“data1here”和“data2here”?
> Java servlet本身是否支持它?
>或者是否有任何其他库支持它?

最佳答案
消耗注释

Consume使用Apache CXF提供的JAX-RS注释事件:

@Consumes("multipart/related")

从JAX-RS文档:

It is now possible (since 2.2.5) to have individual multipart/form-data parts read by registered JAX-RS MessageBodyReaders,something that is already possible to do for types like multipart/mixed or multipart/related.

也可以看看:

> Spring boot multipart/related mime type support
> Jersey: How to register MultiPartConfigProvider class

请注意,GlassFish使用的Jersey在其source code中没有提及相关内容.

HTTP客户端

Google为HTTP client提供API,根据RFC解析多部分/相关消息.

高枕无忧

RESTeasy项目可以通过JAX-RS解析multipart/related内容.

JavaMail API

通过一些流扭曲,可以使用JavaMail API来解析MimeMultipart消息:

The default multipart subtype is “mixed”. The other multipart subtypes,such as “alternative”,“related”,and so on,can be implemented as subclasses of MimeMultipart with additional methods to implement the additional semantics of that type of multipart content.

JavaMail FAQ提供了更多细节:

As described above,there are more complex cases to consider as well. In particular,messages may have arbitrary nesting of multipart/mixed and multipart/alternative parts and may include multipart/related parts for embedded HTML and multipart/signed and/or multipart/encrypted parts for secure messages.

我建议不要使用这种方法,因为它混合了隐喻(它将MIME / HTTP上的MIME与SMTP /邮件上的MIME混为一谈).也就是说,JavaMail在概念上用于通过SMTP / IMAP读取和写入消息,这可能会让未来的维护者想知道为什么使用JavaMail来解析通过Servlet接收的MIME消息,特别是当有基于注释的解决方案时.也就是说,记录代码及其使用原因将是一种避免混淆的方法.

容器

根据容器的不同,它可能会也可能不会处理所有相关的RFC.您可能必须尝试(或仔细阅读)不同容器的源代码,以查看实现此功能内容.

码头

source code有一些与解析输入流相关的点,仅限于多部分/表单数据:

> MultiPartFilter
> MultiPartInputStreamParser

此外,unit tests包括RFC 2387,这是一个强有力的指示,表明容器不处理Servlet 3.0 API下的相关部分.因此,JAX-RS可能是最好的方法.

Tomcat的

Tomcat将not implemented多部分/相关作为Servlet 3.0规范的一部分,尽管存在Tomcat 7.0.47的修补版本.

猜你在找的Java相关文章