【问题标题】:Identify html form or its encoding (text or file) in servlet在 servlet 中识别 html 表单或其编码(文本或文件)
【发布时间】:2012-05-31 09:18:11
【问题描述】:

如何在 servlet 中识别使用 HTML 表单发送的请求是 enctype multipart/form-data 还是默认的 application/x-www-form-urlencoded

或者:有没有其他方法可以识别使用了哪种形式? request.getParameter("some_param") 仅适用于默认编码。

【问题讨论】:

  • 只需使用 request.getPart("some_param") 或 Apache Commons FileUpload。另请参阅How to upload files in JSP/Servlet? 不要尝试自己解析它,如果您已经在问这样的琐碎问题,肯定不会。
  • @BalusC 问比写错要好...我正在使用 Apache Commons FileUpload 进行多部分,但不确定如何在处理多部分和默认表单之间切换。

标签: java forms servlets apache-commons-fileupload enctype


【解决方案1】:

我正在使用 Apache Commons FileUpload 处理多部分,但不确定如何在处理多部分和默认表单之间切换

使用 Apache Commons FileUpload 自己的ServletFileUpload#isMultipartContent() 进行检查。

if (ServletFileUpload.isMultipartContent(request)) {
    // Parse with FileUpload.
}
else {
    // Use normal getParameter().
}

另见:

【讨论】:

  • 哦.. 添加新的 html 表单后完全错过了,谢谢。
【解决方案2】:

您可以使用Content-Type:标头进行识别

if(HttpServletRequest.getContentType().contains("form-data")){
   //handle multipart data
 ....
} else if(HttpServletRequest.getContentType().contains("x-www-form-urlencoded")){
   //handle from data
 ....
}

如果 Web 容器支持 Servlet 3.0,则使用 HttpServletRequest.getParts() API。

if(request.getParts() !=null){
  //handle multipart
} else {
  //handle form data
}

【讨论】:

  • 当您应该使用.equals().equalsIgnoreCase() 时,不要使用.contains()。在这种情况下,它可能不是问题,但它仍然是草率的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
  • 1970-01-01
  • 2011-08-13
  • 1970-01-01
  • 2020-07-28
相关资源
最近更新 更多