本文主要解决form表单属性enctype值为multipart/form-data时request.getParameter()取值为空的问题
刚修改一个静态页面,在Servlet里面用request.getParameter()方法获取页面参数时无论如何都只是获得null值。可是,新建一个简单的带form的jsp页面测试却可以正常获得页面参数。我是郁闷啊!向人求救,被告知是没有添加method="post"的原因。可这解决方法却并不灵验!于是又逐行删除原代码来查找问题根源,最后我发现form标记跟测试中的不太一样,如下:
- <form id="form" action="login" method="post" enctype="multipart/form-data">
而测试程序中的form标记中却没有enctype标记。于是这行代码引起我的重视,遂写了下面的测试:
- <form id="form1" action="login" method="post" enctype="multipart/form-data">
- post**multipart/form-data<br/>
- name:<input type="text" name="name"/><br/>
- <input type="submit" value="Submit"/>
- </form>
- <form id="form2" action="login" method="get" enctype="multipart/form-data">
- get***multipart/form-data<br/>
- name:<input type="text" name="name"/><br/>
- <input type="submit" value="Submit"/>
- </form>
- <form id="form3" action="login" method="post">
- post<br/>
- name:<input type="text" name="name"/><br/>
- <input type="submit" value="Submit"/>
- </form>
- <form id="form4" action="login" method="get">
- get<br/>
- name:<input type="text" name="name"/><br/>
- <input type="submit" value="Submit"/>
- </form>
分别提交四个表单,结果是form1表单提交是获取的值为null,而form2,form3,form4表单提交后获取的值正常。看来还是应该多注意这个enctype属性啊!
在w3school网站上又找到如下信息:
定义和用法
enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。
默认地,表单数据会编码为 "application/x-www-form-urlencoded"。就是说,在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。
属性值
值 | 描述 |
---|---|
application/x-www-form-urlencoded | 在发送前编码所有字符(默认) |
multipart/form-data | 不对字符编码。 在使用包含文件上传控件的表单时,必须使用该值。 |
text/plain | 空格转换为 "+" 加号,但不对特殊字符编码。 |