关于request无法获取到前端发送的form表单数据

问题:servlet中使用request.getParameter()获取不到前端发送的form表单数据

post请求是接收到了的,但是输出一直是"null",数据为空,本来一直以为是后台写错了

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        doGet(request, response);
        request.setCharacterEncoding("utf-8");
        String psd = request.getParameter("psd");
        System.out.println(psd);
    }

 结果是前端提交表单的问题,原本是准备把前端的表单内容和文件上传一起做的,所以在前端form表单中加入了 enctype="multipart/form-data"

 

    
请输入个人信息


性别:

唱歌 跳舞 音乐 游泳

所以导致后台输出时候一直都是“null”,当把enctype="multipart/form-data"去掉后,就能正常输出了!

这是因为enctype="application/x-www-form-urlencoded"是默认的编码方式,当以这种方式提交数据时,HTTP报文中的内容是:

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 

 

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

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--

所以当form表单内容采用enctype=multipart/form-data编码时,调用request.getParameter()获取不到数据

你可能感兴趣的:(Web前端)