`
akka_li
  • 浏览: 20297 次
社区版块
存档分类
最新评论

request.getParameter()获取不到数据的问题

阅读更多
最近做项目时,发现手机客户端通过http协议post方式上传数据到服务端,在服务器端通过request.getInputStream()能获取到相应的数据,但用request.getParameter()却获取不到数据。这是怎么回事呢,后来发现这种情况跟form表单的属性 enctype有关系。
HTML中的form表单有一个关键属性 enctype=application/x-www-form-urlencoded 或multipart/form-data。

1、enctype="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是:
Html代码  收藏代码
<span style="font-size: small;">POST /post_test.php HTTP/1.1  
Accept-Language: zh-CN 
User-Agent: Mozilla/4.0  
Content-Type: application/x-www-form-urlencoded  
Host: 192.168.12.102 
Content-Length: 42 
Connection: Keep-Alive 
Cache-Control: no-cache 
  
title=test&content=%B3%AC%BC%B6%C5%AE%C9%FA&submit=post+article  
</span> 
Servlet的API提供了对这种编码方式解码的支持,只需要调用ServletRequest 类中的getParameter()方法就可以得到表单中提交的数据。

2、在传输大数据量的二进制数据时,必须将编码方式设置成enctype="multipart/form-data",当以这种方式提交数据时,HTTP报文中的内容是:

Html代码  收藏代码
<span style="font-size: small;">POST /post_test.php?t=1 HTTP/1.1 
Accept-Language: zh-CN 
User-Agent: Mozilla/4.0   
Content-Type: multipart/form-data; boundary=---------------------------7dbf514701e8 
Accept-Encoding: gzip, deflate 
Host: 192.168.12.102 
Content-Length: 345 
Connection: Keep-Alive 
Cache-Control: no-cache 
  
-----------------------------7dbf514701e8 
Content-Disposition: form-data; name="title" 
test 
-----------------------------7dbf514701e8 
Content-Disposition: form-data; name="content" 
.... 
-----------------------------7dbf514701e8 
Content-Disposition: form-data; name="submit" 
post article 
-----------------------------7dbf514701e8--</span> 
如果以这种方式提交数据就要用request.getInputStream()或request.getReader()来获取提交的数据 ,用 request.getParameter()是获取不到提交的数据的。


最后注意request.getParameter()、request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。
比如:
当form表单内容采用enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法获取数据后,再调用request.getInputStream()或request.getReader()已经获取不到流中的内容了,因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

当form表单内容采用enctype=multipart/form-data编码时,调用request.getParameter()获取不到数据,即使已经调用了request.getParameter()方法也可以再通过调用request.getInputStream()或request.getReader()获取表单中的数据,但request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用会抛异常的。


转自:http://well-lf.iteye.com/blog/1543807
分享到:
评论

相关推荐

    解决当FORM的ENCTYPE="multipart/form-data" 时request.getParameter()获取不到值的方法 ?

    data'时request.getParameter()获取不到值的方法”这一主题时,我们首先需要理解为什么在特定情况下,传统的`request.getParameter()`方法无法正常工作,以及如何通过引入Apache Commons FileUpload库来解决这个问题...

    tomcat request.getParameter 乱码

    例如,在一个简单的登录表单中,用户输入了中文用户名“张三”,但是后端通过`request.getParameter("username")`获取到的结果却是乱码,这显然会给系统的正常使用带来不便。 #### 二、原因分析 在Tomcat服务器中...

    request.getParameter() 和request.getAttribute() 区别

    1. **数据来源不同**:`request.getParameter()`获取的是来自客户端的数据,而`request.setAttribute()`和`request.getAttribute()`是在服务器端操作,用于在请求范围中存储和获取数据。 2. **作用范围不同**:`...

    java 页面上有ENCTYPE="multipart/form-data" 时action方法或者控制层用request.getParameter()获取不到值的方法 ?

    然而,这种编码方式下,常规的`request.getParameter()`方法无法正确地获取到表单中的文本字段值,因为这些值被封装在了请求的多部分结构中。以下是一些解决这个问题的方法: 1. **使用Apache Commons FileUpload库...

    java request.getParameter中文乱码解决方法

    这种方法可以将 request.getParameter() 获取到的字符串先用 ISO-8859-1 编码成字节流,然后再将其用 utf-8 解码成字符流。 解决方法二:Tomcat 配置 我们也可以通过 Tomcat 配置文件来设置 URL 编码集...

    request.getParameter()取值为null的解决方法

    name属性则是提交到服务器的数据中的一部分,用于在服务器端通过`request.getParameter()`方法获取数据。 当在JavaScript中使用ID获取元素时,可以使用`document.getElementById('id')`这样的方法来操作DOM。但是,...

    数据库测试test.sql

    // String methodName = request.getParameter("method"); // // //根据method属性的值调用相应的方法 // if("login".equals(methodName)){ // this.login(request,response); // }else if("register".equals(method...

    基于request.getAttribute与request.getParameter的区别详解

    在Java Servlet和JSP开发中,`HttpServletRequest`接口提供了两种主要的方法来获取客户端发送到服务器的数据:`getAttribute()`和`getParameter()`。它们虽然都用于获取请求中的数据,但有着本质的区别,下面将详细...

    Jsp的request的用法

    1. **request.getParameter()**:这个方法用于获取客户端(通常是HTML表单)通过HTTP请求(GET或POST)传递到服务器端的参数。这些参数通常以键值对的形式出现在URL(GET)或请求体(POST)中。例如,当用户在表单中...

    java web学习_浅谈request对象中get和post的差异

    Java Web 学习之 Request 对象中 GET 和 POST 的差异 摘要:本文将对 Java Web 中 Request 对象中 GET 和 ...同时,我们应该注意到 servlet 作为控制器是不应该输出内容的,我们应该把要打印的内容放到 JSP 文件中。

    Request对象和乱码解决.doc

    例如,`Request.getParameter()`用于获取单个请求参数的值,`Request.getParameterValues()`用于获取多个同名参数的值,而`Request.getParameterNames()`则可以获取所有参数的名称。 2. 页面乱码: 页面乱码通常...

    Java Web应用开发 18 课堂案例-使用request对象获取简单表单信息.docx

    如果直接打开`requestdemo1.jsp`而不通过`input.html`提交表单,则`request.getParameter`将返回`null`,因为没有表单数据可供获取。 为了增强程序的健壮性,避免因空对象引发`NullPointerException`,我们在处理...

    jsp页面中获取servlet请求中的参数的办法详解

    接着,我们使用`request.getParameter("id")`来获取URL参数`id`的值,并将其存储在请求作用域的属性中,便于后续JSP页面使用: ```java public class BBSServlet extends HttpServlet { private static final long...

    JSP.rar_request jsp

    例如,如果有一个名为"username"的表单字段,可以通过`request.getParameter("username")`来获取用户输入的用户名。返回的是一个String类型,如果参数不存在,会返回null。 **多值参数**:在HTML表单中,如果一个...

    Servlet表单Get和Post方式读取

    // 处理数据... } ``` 对于POST请求: ```java protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setCharacterEncoding("UTF-8...

    servlet接收form表单提交的数据

    GET方法将数据附加到URL后面,适用于少量不敏感数据;POST方法将数据放在请求体中,适合大量或敏感数据。 三、Servlet处理表单数据 1. **解析请求**: 在Servlet的`doGet()`或`doPost()`方法中,我们可以获取请求...

    十分全的servlet获取表单数据

    - **文本框和密码框**:对于`&lt;input type="text"&gt;`和`&lt;input type="password"&gt;`,可以使用`request.getParameter()`方法获取数据。例如: ```java String username = request.getParameter("username"); String ...

    7request和response.docx

    `result.jsp`接收到表单数据后,可以使用`request.getParameter()`方法获取这些值,然后根据运算符执行相应的四则运算。例如,如果运算符是"+",则可以这样做: ```jsp ! int calculate(int num1, int num2, ...

    JSP 9大内置对象学习总结

    对于表单提交的数据,可以通过`getParameter`方法获取单个字段的值,或者使用`getParameterValues`方法获取多个同名字段的值。例如,如果有多个复选框具有相同的名称,可以这样获取它们的值: ```java String[] ...

    sevlet生命周期,request web.xml 及ServletContext总结

    使用`request.getParameter("name")`获取单个参数值,对于有多值的参数,如`name[]`,可以使用`request.getParameterValues("name")`获取数组。 - **Cookie**: 通过`request.getCookies()`获取请求携带的所有...

Global site tag (gtag.js) - Google Analytics