JSP提交表单时 request.getParameter()报错或页面空白不报错

本文探讨了一种常见的情况,即在使用JSP处理表单提交时,参数值变为null的问题。通过逐步排查,发现表单的enctype属性设置不当导致了编码问题,最终通过删除不必要的enctype属性解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

改来改去有时候不报错,是空白页面,有时候报错,是request参数的错:
报错处代码:

int visible=Integer.parseInt(request.getParameter("visi"));
int type=Integer.parseInt(request.getParameter("typ"));

(;´д`)ゞ

可是怎么看都没有问题啊!我还改了表,还是报错,或者干脆把它们去掉,就成空白页面了。(;´д`)ゞ百度很多地方说可能是传参的时候参数空了,虽然表单中有输入,但还是来看看是不是空的:

接下来我把jsp表单处理代码全部注释掉,只剩这两行:

<%=request.getParameter("visi") %>
<%=request.getParameter("typ") %>

哇,果然,提交表单完空白页面输出了这俩的值:

null null

咋就成null了?我发现原来是表单出了问题:

<FORM METHOD=POST ACTION="e.jsp" enctype="multipart/form-data"> 

问题就在这个enctype=“multipart/form-data”!我都没用到这个却没把它删掉,于是出现了编码问题,把它删掉就完事了。


(ノ`Д)ノ

总结:

  1. 检查单词有没有打错!!
  2. 检查前页表单中是否有 name=“xxx” 标签
  3. 检查enctype字段!
表单的 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"%> ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值