java客户端数据发送到服务器(POST请求)总结

今天为了测试服务处理请求的功能,自己学了从客户端发送模拟浏览器发送请求,现在总结如下:

首先看写的相关的代码

客户端:

客户端主要用到的类是URLConnection

	URL url = new URL("http://localhost:8080/yiliaotest/RetransServlet");
	URLConnection con = url.openConnection();
	// post请求必须设置下面两项
	con.setDoOutput(true);
	con.setDoInput(true);
	// 不使用缓存
	con.setUseCaches(false);
	String personjson = "[{\"xingming\":\"namezxc\",\"xingbie\":0}]";
	String zhengzhuangjson = "[{\"kesou\":0}]";

	// 设置自定义的请求头,也可以用这个方法得到发送数据
	con.setRequestProperty("personjson", personjson);
	con.setRequestProperty("zhengzhuangjson", zhengzhuangjson);
	// 这句是打开链接
	OutputStream out = con.getOutputStream();
	// 把数据写到报文
	out.write(("zhengzhuangjson=" + zhengzhuangjson).getBytes());
	// &号是数据间隔,
	out.write("&".getBytes());
	out.write(("personjson=" + personjson).getBytes());

	out.flush();
	out.close();
	// 这句才是真正发送请求
	con.getInputStream();

服务器端

在doPost方法里写语句

	System.out.println("getContentType: " + request.getContentType());
	System.out.println("getQueryString: " + request.getQueryString());
	System.out.println("getRemoteAddr: " + request.getRemoteAddr());
	System.out.println("getRemoteHost: " + request.getRemoteHost());
	System.out.println("getRemotePort: " + request.getRemotePort());
	System.out.println("getRemoteUser: " + request.getRemoteUser());
	System.out.println("getLocalAddr: " + request.getLocalAddr());
	System.out.println("getLocalName: " + request.getLocalName());
	System.out.println("getLocalPort: " + request.getLocalPort());
	System.out.println("getMethod: " + request.getMethod());
	System.out.println("-------request.getParamterMap()-------");
	// 得到请求的参数Map,注意map的value是String数组类型
	Map map = request.getParameterMap();
	Set<String> keySet = map.keySet();
	for (String key : keySet) {
		String[] values = (String[]) map.get(key);
		for (String value : values) {
			System.out.println(key);
			System.out.println(key + "=" + value);
		}
	}
	System.out.println("-------request.getParamterMap() end-------");
	System.out.println("--------request.getHeader()--------");
	// 得到请求头的name集合
	Enumeration<String> em = request.getHeaderNames();
	while (em.hasMoreElements()) {
		String name = (String) em.nextElement();
		String value = request.getHeader(name);
		System.out.println(name + "=" + value);
	}
	System.out.println("--------request.getHeader() end--------");
	// 使用getParameter方法得到请求发来的数据
	String personjsonstr = request.getParameter("personjson");
	String zhengzhuangstr = request.getParameter("zhengzhuangjson");
	System.out.println(personjsonstr);
	System.out.println(zhengzhuangstr);

输出结果:

getContentType: application/x-www-form-urlencoded
getQueryString: null
getRemoteAddr: 127.0.0.1
getRemoteHost: 127.0.0.1
getRemotePort: 59236
getRemoteUser: null
getLocalAddr: 127.0.0.1
getLocalName: localhost
getLocalPort: 8080
getMethod: POST
-------request.getParamterMap()-------
zhengzhuangjson
zhengzhuangjson=[{"kesou":0}]
personjson
personjson=[{"xingming":"namezxc","xingbie":0}]
-------request.getParamterMap() end-------
--------request.getHeader()--------
personjson=[{"xingming":"namezxc","xingbie":0}]
zhengzhuangjson=[{"kesou":0}]
cache-control=no-cache
pragma=no-cache
user-agent=Java/1.6.0_65
host=localhost:8080
accept=text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
connection=keep-alive
content-type=application/x-www-form-urlencoded
content-length=77
--------request.getHeader() end--------
[{"xingming":"namezxc","xingbie":0}]
[{"kesou":0}]

总结:

1.如果不设置Content-type,默认是:application/x-www-form-urlencoded。

2.GET请求的参数与对应的值位于请求行中,并附加在URL后面,通过“?”分隔开来。

POST请求的数据在请求报文里。

3.两种请求方式的数据都以“key1=value1&key2=value”的格式。

4.Post用URLConnection里的OutputStream对象写入数据,服务端用HttpServletRequest的getParameter(key)方法得到属性值value。

5.对http协议有个好的理解,是学习发送请求、传输数据到服务器的基础。

参考链接:

关于Get与Post请求的区别:

http://www.cnblogs.com/hyddd/archive/2009/03/31/1426026.html

HTTP协议教程:

http://www.w3cschool.cc/http/http-tutorial.html

时间: 2024-10-14 04:53:09

java客户端数据发送到服务器(POST请求)总结的相关文章

java给微信发送get和post请求

现在做微信订阅号.微信公众号,微信企业号都需要开发者给微信服务器发送get或post请求.具体发送get或post请求源码如下: package com.ciji.utils; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.URL; import java.net.URL

Android客户端采用Http 协议Post方式请求与服务端进行数据交互

本示例以Servlet为例,演示Android与Servlet的通信. 众所周知,Android与服务器通信通常采用HTTP通信方式和Socket通信方式,而HTTP通信方式又分get和post两种方式.至于Socket通信会在以后的博文中介绍. HTTP协议简介: HTTP (Hypertext Transfer Protocol ),是Web联网的基础,也是手机联网常用的协议之一,HTTP协议是建立在TCP协议之上的一种协议. HTTP连接最显著的特点是客户端发送的每次请求都需要服务器回送响

基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨

首先说一下networkcomms 通信框架是商业版的,本文也并不提供. 对java不太熟悉,刚刚安装了eclipse,通信只实现了把字符从java客户端传到c#服务器,服务器收到消息后,返回一个字符消息给java客户端,java客户端显示收到的消息. 服务器端基于networkcomms V3 C#通信框架. 服务器端代码: using System; using System.Collections.Generic; using System.ComponentModel; using Sy

TCP Incast 问题TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU)。只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向

TCP INCAST解决思路 应用场景:在集群文件系统内,客户端应用请求某个逻辑数据块(通常情况下一个读数据块大小是1MB),该数据块以条带化方式分别存储在几个存储服务器上,即采用更小的数据片存储(32KB,256KB等),这种小数据片称为服务器请求单元(SRU).只有当客户端接收到所有的服务器返回的其所请求数据块的SRU后才继续发送出下一个数据块请求,即客户端同时向多个存储服务器发起并发TCP请求,且所有服务器同时向客户端发送SRU. 出现的问题: 1)         这种多对一的服务器向客

java接受从安卓客户端发送过来的get请求时,出现乱码的解决思路及方法

今天下午遇到了这样一个感觉很常见的问题,但是度娘了N遍,却始终找不到有效的解决方法,于是乎,在苦求他人无果的情况下,研究出了一种简单有效的方法,具体实现思路如下: (1).让安卓客户端在发送get请求之前,先通过String str = URLEncode.encode(str, "utf-8");指定编码格式为UTF-8:这样安卓客户端在给服务器端发送请求时就会以UTF-8的格式发送. (2).服务器端通过request.getParameter("str");方

Java使用UDP发送数据到InfluxDB

最近在做压测引擎相关的开发,需要将聚合数据发送到InfluxDB保存以便实时分析和控制QPS. 下面介绍对InfluxDB的使用. 什么是InfluxDB InfluxDB是一款用Go语言编写的开源分布式时序.事件和指标数据库,无需外部依赖.该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据. InfluxDB特征: 无结构(无模式):可以是任意数量的列(tags). 可以设置metric的保存时间. 支持与时间有关的相

TCP 同步传输:客户端发送,服务器段接收

1.服务器端程序 可以在TcpClient上调用GetStream()方法来获的链接到远程计算机的网络流NetworkStream.当在客户端调用时,他获的链接服务器端的流:当在服务器端调用时,他获得链接客户端的流. class Program { static void Main(string[] args) { const int BufferSize = 8192;//缓存大小 Console.WriteLine("server is running ..."); IPAddre

通过java.net.URLConnection发送HTTP请求的方法

1.GET与POST请求的区别 a) get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet, b) post与get的不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内. 2.URLConnection的对象 a) 获取URLConnection实例 URL url = new URL(urlString); // 根据url生成urlConnection对象 urlConnection = (HttpURLConnection) url.

基于networkcomms V3通信框架的c#服务器与java客户端进行通信之Protobuf探讨

在上一篇 基于networkcomms V3通信框架的c#服务器与java客户端进行通信探讨  中探讨了在C#端与Java端通信中传递字符,有朋友提到如果传递int类型的整数,会出现编码的问题. 到网上找到了一篇文章< 使用protobuf进行C#与Java通信 >进行学习 ,使用protobuf进行编码,传递数据,好像这样可以避免编码的问题. (虽然编码问题解决了,但是粘包问题并没有解决,有经验的朋友介绍下怎样解决粘包的问题) 服务器端基于networkcomms V3 C#通信框架. ne