HttpClient 4 Post XML到一个服务器

对于POST方式,最先想到的就是表单提交了,POST XML自然想到的就是定义一个变量名,比如叫xmldata,然后将这个参数的值POST出去,在服务端接收的时候,自然也是通过 requset.getParameter("xmldata")方式来接收。

现在我在这里要做的不是通过上面的方式,而是不指定参数名来Post,实际上就是将一个流写入请求。

下面是具体的实现方式:

1、参数名方式POST XML数据

import org.apache.http.*;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.client.*;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.UnsupportedEncodingException;
import java.util.*;

/**
 * 通过指定参数名的方式POST XML
 * 
 */
public class TestPost {
	public static void main(String[] args) throws IOException {
		HttpClient httpclient = new DefaultHttpClient();
		HttpPost httppost = new HttpPost(
				"http://localhost:8080/waitsrv/GenXmlServlet");
		List<NameValuePair> formparams = new ArrayList<NameValuePair>();
		formparams.add(new BasicNameValuePair("xmldate", "<html>你好啊啊</html>"));
		formparams.add(new BasicNameValuePair("info", "xxxxxxxxx"));
		UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,
				"GBK");
		// entity.setContentType("text/xml; charset=GBK");
		httppost.setEntity(entity);
		HttpResponse response = httpclient.execute(httppost);
		HttpEntity resEntity = response.getEntity();
		InputStreamReader reader = new InputStreamReader(
				resEntity.getContent(), "ISO-8859-1");
		char[] buff = new char[1024];
		int length = 0;
		while ((length = reader.read(buff)) != -1) {
			System.out.println(new String(buff, 0, length));
			httpclient.getConnectionManager().shutdown();
		}
	}
}


2、不指定参数名的方式来POST数据

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.HttpClient;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.entity.*;

import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

/**
 * 不指定参数名的方式来POST数据
 * 
 */
public class TestPostXml {
	public static void main(String[] args) throws IOException {
		HttpClient httpclient = new DefaultHttpClient();
		HttpPost httppost = new HttpPost(
				"http://localhost:8080/waitsrv/GenXmlServlet");
		StringEntity myEntity = new StringEntity("<html>你好啊啊</html>", "GBK");
		httppost.addHeader("Content-Type", "text/xml");
		httppost.setEntity(myEntity);
		HttpResponse response = httpclient.execute(httppost);
		HttpEntity resEntity = response.getEntity();
		InputStreamReader reader = new InputStreamReader(
				resEntity.getContent(), "ISO-8859-1");
		char[] buff = new char[1024];
		int length = 0;
		while ((length = reader.read(buff)) != -1) {
			System.out.println(new String(buff, 0, length));
		}
		httpclient.getConnectionManager().shutdown();
	}
}


服务端接收方式:
package com;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;

/**
 * 接收XLM请求
 * 
 */
public class GenXmlServlet extends HttpServlet {
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		// String xml = req.getParameter("xmldata");
		resp.setContentType("text/xml");
		resp.setCharacterEncoding("GBK");
		PrintWriter out = resp.getWriter();
		// out.println(xml);
		// System.out.println(xml);
		System.out.println("----------------------");
		InputStreamReader reader = new InputStreamReader(req.getInputStream(),
				"GBK");
		char[] buff = new char[1024];
		int length = 0;
		while ((length = reader.read(buff)) != -1) {
			String x = new String(buff, 0, length);
			System.out.println(x);
			out.print(x);
		}
	}

	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		resp.setContentType("text/html");
		PrintWriter out = resp.getWriter();
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Hello World!</title>");
		out.println("</head>");
		out.println("<body>");
		out.println("<h1>Hello World!!</h1>");
		out.println("</body>");
		out.println("</html>");
	}
}


web.xml
<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
version="2.5"> 
<servlet> 
<servlet-name>GenXmlServlet</servlet-name> 
<servlet-class>com.GenXmlServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
<servlet-name>GenXmlServlet</servlet-name> 
<url-pattern>/GenXmlServlet</url-pattern> 
</servlet-mapping> 
</web-app> 



你可能感兴趣的:(java,apache,xml,Web,servlet)