HttpClient4 Post XML到一个服务器上

HttpClient4 Post XML到一个服务器上
 
 
现在网上介绍的HttpClient基本上全是3.x版本的内容,HttpClient4的API变化相对3已经变化很大,对HttpClient4做了简单的研究后,完成了一个HttpClient4 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 

* @author leizhimin 2010-7-8 22:29:28 
*/
 
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数据 

* @author leizhimin 2010-7-8 3:22:53 
*/
 
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请求 

* @author leizhimin 2010-7-8 1:02:42 
*/
 
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 >
 
 
3、在2的基础,上改为单线程重用连接模式
 
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.impl.conn.SingleClientConnManager; 
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数据,单线程重用连接模式 

* @author leizhimin 2010-7-8 3:22:53 
*/
 
public  class TestPostXml2 { 
         public  static  void main(String[] args)  throws IOException { 
                SingleClientConnManager sccm = new SingleClientConnManager(); 
                HttpClient httpclient =  new DefaultHttpClient(sccm); 
//                HttpGet httpget = new HttpGet(urisToGet[i]); 
//                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(); 
        } 
}
 
 
 
 

本文出自 “熔 岩” 博客,请务必保留此出处http://lavasoft.blog.51cto.com/62575/347157

猜你喜欢

转载自m635674608.iteye.com/blog/2379399
今日推荐