Servlet是否可以确定发布到它的数据是否为enctype =" multipart / form-data"?

时间:2020-03-05 18:54:23  来源:igfitidea点击:

我有一个Servlet,可用于Front Controller模式中的许多不同操作。有谁知道是否有可能判断回传给它的数据是否为enctype =" multipart / form-data"?在做出决定之前,我无法读取请求参数,因此无法将请求分派给适当的控制器。

有任何想法吗?

解决方案

回答

是的,用户代理请求中的"内容类型"标头应包含(至少)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"。

不要忘记:

  • request.getContentType()可能返回null。
  • request.getContentType()可能不等于" multipart / form-data",而可能只是以它开头。

因此,请牢记所有这些:

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

回答

我们必须至少在某种程度上读取请求参数才能确定该参数。 ServletRequest类具有我们要查看的getContentType方法。

回答

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

  • request.getContentType()可能返回null。
  • request.getContentType()可能不等于" multipart / form-data",而可能只是以它开头。

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

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