繁体   English   中英

servlet 是否可以确定发布的数据是否为多部分/表单数据?

[英]Can a servlet determine if the posted data is multipart/form-data?

我有一个用于许多不同操作的 servlet,用于Front Controller 模式 有谁知道是否可以判断发回给它的数据是否是 enctype="multipart/form-data"? 在我决定之前我无法读取请求参数,因此我无法将请求发送到正确的 controller。

有任何想法吗?

如果您要尝试使用上面介绍的 request.getContentType() 方法,请注意:

  1. request.getContentType() 可能会返回 null。
  2. request.getContentType() 可能不等于“multipart/form-data”,但可能只是从它开始。

考虑到这一点,您应该运行的检查是:

if (request.getContentType() != null && request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) {
// Multipart logic here
}

是的,用户代理请求中的Content-type header 应包括(至少)HTML4规范中描述的multipart/form-data

http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2

您可以调用方法来获取内容类型。

http://java.sun.com/j2ee/sdk_1.3/techdocs/api/javax/servlet/ServletRequest.html#getContentType()

根据http://www.w3.org/TR/html401/interact/forms.html#h-17.13.4.2 ,内容类型将为“multipart/form-data”。

不要忘记:

  1. request.getContentType() 可能会返回 null。

  2. request.getContentType() 可能不等于“multipart/form-data”,但可能只是从它开始。

所以,考虑到这一切:

if (request.getContentType() != null && 
    request.getContentType().toLowerCase().indexOf("multipart/form-data") > -1 ) 
{
    << code block >>
} 

ServletFileUpload 实现 isMultipartContent()。 也许您可以根据您的需要解除此实现(而不是通过开销来创建 ServletFileUpload)。

http://www.docjar.com/html/api/org/apache/commons/fileupload/servlet/ServletFileUpload.java.ZFC35FDC70D5FC69D269883A822C7A53

要扩展awm129 的答案- Apache commons 的实现对应于:

if (request != null 
        && request.getContentType() != null 
        && request.getContentType().toLowerCase(Locale.ENGLISH).startsWith("multipart/")) {
    ...
}

您可以使用 Apache commons' org.apache.commons.lang3.StringUtils将其写得更短:

if (StringUtils.startsWithIgnoreCase(request.getContentType(), "multipart/")) { 
    ... 
}

至少在某种程度上,您必须阅读请求参数才能确定这一点。 ServletRequest class 有一个您需要查看的 getContentType 方法。

https://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpServletRequest.html#getParts()

java.util.Collection getParts()

抛出:ServletException - 如果此请求不是 multipart/form-data 类型

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM