这两天在做http服务端请求操作,客户端post数据到服务端后,服务端通过request.getParameter()进行请求,无法读取到数据,搜索了一下发现是因为设置为text/plain模式才导致读取不到数据

  1. urlConn.setRequestProperty("Content-Type","text/plain; charset=utf-8");

若设置为以下方式,则通过request.getParameter()可以读取到数据

  1. urlConn.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
  • enctype的三种编码

form表单中enctype属性可以用来控制对表单数据的发送前的如何进行编码,即在发送到服务器之前,所有字符都会进行编码(空格转换为 "+" 加号,特殊符号转换为 ASCII HEX 值)。默认是application/x-www-form-urlencoded。

multipart/form-data用于发送二进制的文件,其他两种类型不能用于发送文件

text/plain用于发送纯文本内容,不对特殊字符进行编码,一般用于email之类的。

application/x-www-form-urlencoded和text/plain的区别简单讲就是一个发送html内容,一个发送纯文本内容

  1. application/x-www-form-urlencoded    在发送前编码所有字符(默认)
  2. multipart/form-data    不对字符编码。在使用包含文件上传控件的表单时,必须使用该值。
  3. text/plain    空格转换为 "+" 加号,但不对特殊字符编码。
  • 当定义enctype为application/x-www-form-urlencoded时,使用以下方式接收数据
  1. request.getParameter(参数名);
  • 当定义enctype为text/plain时,使用以下方式接收数据
  1. // 接收请求数据
  2. BufferedReader reader = request.getReader();
  3. char[] buf = new char[512];
  4. int len = 0;
  5. StringBuffer contentBuffer = new StringBuffer();
  6. while ((len = reader.read(buf)) != -1) {
  7. contentBuffer.append(buf, 0, len);
  8. }
  9.         String content = contentBuffer.toString();
  10.         
  11.         if(content == null){
  12.             content = "";
  13.         }
  • post 与get

post和get可以通过键值对的方式进行参数传输,服务端通过request.getparameter方式进行请求获取数据。

  • 客户端post数据到服务端,服务端接收处理
  1. public class UrlConnection {    
  2.     @SuppressWarnings("finally")
  3.     public static boolean response(String url,String content) {
  4.         String line         = "";
  5.         String message        = "";
  6.         String returnData   = "";
  7.         boolean postState     = false;
  8.         BufferedReader bufferedReader = null;
  9.         
  10.         try {
  11.             URL urlObject = new URL(url);
  12.             HttpURLConnection urlConn = (HttpURLConnection) urlObject.openConnection();
  13.             urlConn.setDoOutput(true);
  14.             /*设定禁用缓存*/
  15.             urlConn.setRequestProperty("Pragma:", "no-cache");      
  16.             urlConn.setRequestProperty("Cache-Control", "no-cache");
  17.             /*维持长连接*/
  18.             urlConn.setRequestProperty("Connection", "Keep-Alive");  
  19.             /*设置字符集*/
  20.             urlConn.setRequestProperty("Charset", "UTF-8");
  21.             /*设定输出格式为json*/
  22.             urlConn.setRequestProperty("Content-Type", "application/json;charset=utf-8");
  23.             /*设置使用POST的方式发送*/
  24.             urlConn.setRequestMethod("POST");             
  25.             /*设置不使用缓存*/
  26.             urlConn.setUseCaches(false);
  27.             /*设置容许输出*/
  28.             urlConn.setDoOutput(true);  
  29.             /*设置容许输入*/
  30.             urlConn.setDoInput(true);              
  31.             urlConn.connect();
  32.             
  33.             OutputStreamWriter outStreamWriter = new OutputStreamWriter(urlConn.getOutputStream(),"UTF-8");
  34.             outStreamWriter.write(content);
  35.             outStreamWriter.flush();
  36.             outStreamWriter.close();
  37.             
  38.             /*若post失败*/
  39.             if((urlConn.getResponseCode() != 200)){
  40.                 returnData = "{\"jsonStrStatus\":0,\"processResults\":[]}";
  41.                 message = "发送POST失败!"+ "code="+urlConn.getResponseCode() + "," + "失败消息:"+ urlConn.getResponseMessage();
  42.                 // 定义BufferedReader输入流来读取URL的响应
  43.                 InputStream errorStream = urlConn.getErrorStream();
  44.                 
  45.                 if(errorStream != null)
  46.                 {
  47.                     InputStreamReader inputStreamReader = new InputStreamReader(errorStream,"utf-8");
  48.                     bufferedReader = new BufferedReader(inputStreamReader);  
  49.               
  50.                     while ((line = bufferedReader.readLine()) != null) {  
  51.                         message += line;    
  52.                     }         
  53.                     inputStreamReader.close();
  54.                 }
  55.                 errorStream.close();
  56.                 System.out.println("发送失败!错误信息为:"+message);                  
  57.             }else{
  58.                 /*发送成功返回发送成功状态*/
  59.                 postState = true;
  60.                 
  61.                 // 定义BufferedReader输入流来读取URL的响应
  62.                 InputStream inputStream = urlConn.getInputStream();  
  63.                 
  64.                 InputStreamReader inputStreamReader = new InputStreamReader(inputStream,"utf-8");
  65.                 bufferedReader = new BufferedReader(inputStreamReader);  
  66.           
  67.                 while ((line = bufferedReader.readLine()) != null) {  
  68.                     message += line;  
  69.                 }        
  70.                 returnData = message;
  71.                 inputStream.close();
  72.                 inputStreamReader.close();
  73.                 
  74.                 System.out.println("发送POST成功!返回内容为:" + message);                        
  75.             }
  76.         } catch (Exception e) {
  77.             e.printStackTrace();
  78.         }finally{
  79.             try {   
  80.                 if (bufferedReader != null) {  
  81.                     bufferedReader.close();  
  82.                 }                  
  83.             } catch (IOException ex) {  
  84.                 ex.printStackTrace();  
  85.             }          
  86.             return postState;
  87.         }
  88.     }
  89.     
  90.     /*读取request数据*/
  91.     public static String getRequestData(HttpServletRequest request) throws IOException{
  92.         BufferedReader reader = request.getReader();
  93.         char[] buf = new char[512];
  94.         int len = 0;
  95.         StringBuffer contentBuffer = new StringBuffer();
  96.         while ((len = reader.read(buf)) != -1) {
  97.             contentBuffer.append(buf, 0, len);
  98.         }
  99.         
  100.         String content = contentBuffer.toString();
  101.         
  102.         if(content == null){
  103.             content = "";
  104.         }
  105.         
  106.         return content;
  107.     }
  108. }

Java Post 数据请求和接收的更多相关文章

  1. JAVA发送HttpClient请求及接收请求结果

    1.写一个HttpRequestUtils工具类,包括post请求和get请求 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 2 ...

  2. JAVA发送HttpClient请求及接收请求结果过程

    1.写一个HttpRequestUtils工具类,包括post请求和get请求 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 ...

  3. 页面ajax请求传参及java后端数据接收

    js ajax请求传参及java后端数据接收 Controller: package com.ysl.PassingParameters.controller; import java.util.Li ...

  4. java 接口自动化测试之数据请求的简单封装

    我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...

  5. 第三篇 :微信公众平台开发实战Java版之请求消息,响应消息以及事件消息类的封装

    微信服务器和第三方服务器之间究竟是通过什么方式进行对话的? 下面,我们先看下图: 其实我们可以简单的理解: (1)首先,用户向微信服务器发送消息: (2)微信服务器接收到用户的消息处理之后,通过开发者 ...

  6. java spring-WebSocket json参数传递与接收

    Websocket原理(摘抄) 一.websocket与http WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环 ...

  7. SpringMVC请求参数接收总结

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  8. SpringMVC请求参数接收总结(一)

    前提 在日常使用SpringMVC进行开发的时候,有可能遇到前端各种类型的请求参数,这里做一次相对全面的总结.SpringMVC中处理控制器参数的接口是HandlerMethodArgumentRes ...

  9. 2.5万字长文简单总结SpringMVC请求参数接收

    这是公众号<Throwable文摘>发布的第22篇原创文章,暂时收录于专辑<架构与实战>.暂定下一篇发布的长文是<图文分析JUC同步器框架>,下一篇发布的短文是&l ...

随机推荐

  1. 【BZOJ3439】 Kpm的MC密码 (TRIE+主席树)

    3439: Kpm的MC密码 Description 背景 想Kpm当年为了防止别人随便进入他的MC,给他的PC设了各种奇怪的密码和验证问题(不要问我他是怎么设的...),于是乎,他现在理所当然地忘记 ...

  2. ASPX在Debug模式下直接link原始CSS而非Bundle后的CSS

    由于对CSS做了bundle, debug的时候修改原始css文件不会直接反映到浏览器中, 效率较低. 于是我想在debug的时候直接link原始CSS. 很简单. <% #if DEBUG % ...

  3. [LeetCode#161] One Edit Distance

    Problem: Given two strings S and T, determine if they are both one edit distance apart. General Anal ...

  4. linux系统目录详解

    Linux目录结构包括文件类型和一些重要的文件子目录. linux文件系统的最顶端是/,称为linux的root,所有的目录.文件.设备都在/之下.文件类型linux有四种基本文件系统类型:普通文件. ...

  5. 【转】关于Certificate、Provisioning Profile、App ID的介绍及其之间的关系

    原文网址:http://www.cnblogs.com/cywin888/p/3263027.html 刚接触iOS开发的人难免会对苹果的各种证书.配置文件等不甚了解,可能你按照网上的教程一步一步的成 ...

  6. Gson ------ 实例演习

    [本文范围]: 本文并非JSON知识讲解资料,亦非GSON知识讲解资料,而是通过实例让开发人员了解通过Gson如何使Java对象和Json对象进行相互转换. [JSON参考资料]: Json快速入门: ...

  7. 通过udl文件得到连接字符串

    1.新建一个文件,文件名任意,扩展名为udl 2.双击打开这个udl文件 3.点下一步: 4.测试连接成功后点击确定 5.用记事本打开这个udl文件: 连接字符串就出来了

  8. ShadowGun Deadzone 放出 GM Kit Mod 包

    一向在技术上比较开放的 MadFinger 继上次给出 shadowgun 的关卡包之后,这次更加大方的给出了更加完整的关卡的代码,甚至包括服务器:ShadowGun Deadzone GM Kit. ...

  9. zoj 1221 Risk Flory

    博客开了快半年了- -学习编程也快1年半了,觉得空空的不太好看,刚好最近开始练习ACM了,就来做一个简单的ACM学习笔记吧,纪念的第一题zol 1221 Risk 风险游戏(个人觉得是这样翻- -翻译 ...

  10. Web Service学习笔记

    Web Service概述 Web Service的定义 W3C组织对其的定义如下,它是一个软件系统,为了支持跨网络的机器间相互操作交互而设计.Web Service服务通常被定义为一组模块化的API ...