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 }