HttpURLConnection or URLConnection post xml content to web server

 

 

客户端示例1:

package client;

import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;

public class HttpPostTest2 {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		String url = "http://192.168.0.101:8080/mport/testServlet";
		String charset = "UTF-8";
		String param1 = URLEncoder.encode("param1", charset);
		String param2 = URLEncoder.encode("param2", charset);
		String query = String.format("param1=%s&param2=%s", param1, param2);

		URLConnection urlConnection = new URL(url).openConnection();
		urlConnection.setUseCaches(false);
		urlConnection.setDoOutput(true); // Triggers POST.
		urlConnection.setRequestProperty("accept-charset", charset);
		urlConnection.setRequestProperty("content-type", "application/x-www-form-urlencoded");//必须定义为text/xml、text/html、multi/form-data内容类型,如果定义为application/x-www-form-urlencoded则在request.getParamter()方法取得到数据
		urlConnection.setRequestProperty("Content-Length", String.valueOf(query.length()));

		OutputStreamWriter writer = null;
		try {
			writer = new OutputStreamWriter(urlConnection.getOutputStream(), charset);
			writer.write(query); // Write POST query string (if any needed).
			writer.flush();
		} finally {
			if (writer != null)
				try {
					writer.close();
				} catch (IOException logOrIgnore) {
				}
		}

		InputStream result = urlConnection.getInputStream();
		int length = result.available();
		byte[] bytes = new byte[length];
		result.read(bytes);
		System.out.write(bytes);
		result.close();
		// Now do your thing with the result.
		// Write it into a String and put as request attribute
		// or maybe to OutputStream of response as being a Servlet behind `jsp:include`.
	}
}

 客户端示例2:

package client;

import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URL;

public class HttpPostTest3 {

	/**
	 * @param args
	 * @throws Exception
	 */
	public static void main(String[] args) throws Exception {
		InputStream input = HttpPostTest3.class.getResourceAsStream("documentTest4.xml");
		byte[] data;
		try {
			data = new byte[input.available()];
			input.read(data);
			// 把XML的数据转成字符串
			String str = new String(data);
			System.out.println(str);
			byte[] bb = str.getBytes("UTF-8");
			// 请求地址
			URL url = new URL("http://192.168.0.101:8080/mport/testServlet");
			HttpURLConnection conn = (HttpURLConnection) url.openConnection();
			conn.setRequestMethod("POST");
			conn.setConnectTimeout(5 * 1000);// 设置超时的时间
			conn.setDoInput(true);
			conn.setDoOutput(true);// 如果通过post提交数据,必须设置允许对外输出数据
			conn.setRequestProperty("Content-Type", "text/xml; charset=UTF-8");// 必须定义为text/xml内容类型,如果定义为application/x-www-form-urlencoded、multi/form-data
			conn.setRequestProperty("Content-Length", String.valueOf(bb.length));
			conn.connect();
			DataOutputStream out = new DataOutputStream(conn.getOutputStream());
			out.writeBytes(str); // 写入请求的字符串
			out.flush();
			out.close();
			// 请求返回的状态
			if (conn.getResponseCode() == 200) {
				System.out.println("yes++");
				// 请求返回的数据
				InputStream in = conn.getInputStream();
				String a = null;
				try {
					byte[] data1 = new byte[in.available()];
					in.read(data1);
					// 转成字符串
					a = new String(data1);
					System.out.println(a);
				} catch (Exception e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
			} else {
				System.out.println("no++");
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

 服务端代码示例:

package abeop.serlvet;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestServlet extends HttpServlet {

	private static final long serialVersionUID = 2623084802650650845L;

	@Override
	protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		// 测试是否被getParamter()方法获取到,只有在没被获取到情况下才能取得getInputStream()
		System.out.println("param1: " + req.getParameter("param1"));
		// 第一种方式
		try {
			InputStream in = req.getInputStream();
			BufferedReader br = new BufferedReader(new InputStreamReader(in));
			StringBuffer data = new StringBuffer();
			String line = null;
			while ((line = br.readLine()) != null) {
				data.append(line);
			}
			System.out.println("服务器端获取到流数据:" + data.toString());
			// 设置返回状态
			resp.setStatus(HttpServletResponse.SC_OK);
		} catch (Exception ex) {
			resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
		}
		// 第二方式
		// ServletInputStream sis = req.getInputStream();
		// int readed=0;//读出字节数
		// byte [] buffer = new byte [1024];
		// while((readed = sis.read(buffer, 0, buffer.length))!=-1){
		// System.out.write(buffer, 0, readed);
		// }
	}
}

 web.xml配置:

<servlet>
		<servlet-name>TestServlet</servlet-name>
		<servlet-class>abeop.serlvet.TestServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>TestServlet</servlet-name>
		<url-pattern>/testServlet</url-pattern>
	</servlet-mapping>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值