jsp中表单提交后request.getParameter获取不到值表单的enctype="multipart/form-data"
时间: 2024-03-10 20:47:10 浏览: 199
当表单的 enctype 属性设置为 "multipart/form-data" 时,表单数据会以二进制流的形式传输,而不是以普通的键值对的形式传输。因此,使用 request.getParameter() 方法获取表单参数时会获取不到值。
要获取 "multipart/form-data" 表单的参数,可以使用 Apache Commons FileUpload 组件。这个组件可以将表单数据解析成文件和字段两个部分,从而可以获取表单的参数值。
具体实现步骤如下:
1. 在 JSP 页面中引入 Apache Commons FileUpload 组件的相关库文件。可以从官网下载这些文件,然后将其放置到 WEB-INF/lib 目录下。
2. 在表单的处理程序中,使用 Apache Commons FileUpload 组件解析表单数据。具体实现代码如下:
```
// 创建 DiskFileItemFactory 对象
DiskFileItemFactory factory = new DiskFileItemFactory();
// 创建 ServletFileUpload 对象
ServletFileUpload upload = new ServletFileUpload(factory);
// 解析表单数据
List<FileItem> items = upload.parseRequest(request);
// 遍历表单数据
for (FileItem item : items) {
if (item.isFormField()) {
// 处理普通字段
String name = item.getFieldName();
String value = item.getString("UTF-8");
// TODO: 处理表单参数
} else {
// 处理文件字段
String name = item.getFieldName();
String fileName = item.getName();
InputStream inputStream = item.getInputStream();
// TODO: 处理文件上传
}
}
```
在上述代码中,使用 DiskFileItemFactory 对象和 ServletFileUpload 对象来解析表单数据。解析结果会以 List<FileItem> 的形式返回,然后遍历这个列表,分别处理普通字段和文件字段。
对于普通字段,可以使用 FileItem 对象的 getFieldName() 方法获取字段名,使用 getString() 方法获取字段值。
对于文件字段,可以使用 FileItem 对象的 getName() 方法获取文件名,使用 getInputStream() 方法获取文件数据流。
需要注意的是,在解析表单数据之前,需要设置 request 的字符编码为 UTF-8,以便正确处理中文字符。可以通过在 JSP 页面中设置以下代码来实现:
```
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
```
阅读全文