表单的的提交方式有“application/x-www-form-urlencoded”和“multipart/form-data”两种方式,默认的缺省情况为“application/x-www-form-urlencoded”提交。
一般情况下使用“application/x-www-form-urlencoded”会比较快捷,然而,在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时这种编码方式效率很低。特别在文件上载时,所使用的编码类型应当是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上载。所以,大数据传输时一般选择“multipart/form-data”。
然而当使用“multipart/form-data”传输时,如果传输的数据有多个参数,那么用request.getParameter()取到的值会是null。所以要用request.getInputStream()取值并解析。解析的部分网上提供多种封装好的方法。下面为其中一种方法。
DiskFileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
upload.setHeaderEncoding("UTF-8");
List items = upload.parseRequest(request);
Map param = new HashMap();
for(Object object:items){
FileItem fileItem = (FileItem) object;
if (fileItem.isFormField()) {
param.put(fileItem.getFieldName(), fileItem.getString("utf-8"));//如果你页面编码是utf-8的
}
}
用该方法解析完之后可以直接用param.get()获取你要的值,但是该方法要导入commons-fileupload-1.3.jar和commons-io-1.2.jar。
此为jar包下载地址http://download.csdn.net/detail/han123456o/6769327