2012年3月20日星期二

HttpClient 4 Post XML到一个服务器(转) - - ITeye技术网站

HttpClient 4 Post XML到一个服务器(转) - - ITeye技术网站

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

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

下面是具体的实现方式: 

1、参数名方式POST XML数据 

Java代码  收藏代码
  1. import org.apache.http.*;  
  2. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  3. import org.apache.http.client.methods.HttpPost;  
  4. import org.apache.http.impl.client.DefaultHttpClient;  
  5. import org.apache.http.message.BasicNameValuePair;  
  6. import org.apache.http.client.*;  
  7. import java.io.IOException;  
  8. import java.io.InputStreamReader;  
  9. import java.io.UnsupportedEncodingException;  
  10. import java.util.*;  
  11.   
  12. /** 
  13.  * 通过指定参数名的方式POST XML 
  14.  *  
  15.  */  
  16. public class TestPost {  
  17.     public static void main(String[] args) throws IOException {  
  18.         HttpClient httpclient = new DefaultHttpClient();  
  19.         HttpPost httppost = new HttpPost(  
  20.                 "http://localhost:8080/waitsrv/GenXmlServlet");  
  21.         List<NameValuePair> formparams = new ArrayList<NameValuePair>();  
  22.         formparams.add(new BasicNameValuePair("xmldate""<html>你好啊啊</html>"));  
  23.         formparams.add(new BasicNameValuePair("info""xxxxxxxxx"));  
  24.         UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams,  
  25.                 "GBK");  
  26.         // entity.setContentType("text/xml; charset=GBK");  
  27.         httppost.setEntity(entity);  
  28.         HttpResponse response = httpclient.execute(httppost);  
  29.         HttpEntity resEntity = response.getEntity();  
  30.         InputStreamReader reader = new InputStreamReader(  
  31.                 resEntity.getContent(), "ISO-8859-1");  
  32.         char[] buff = new char[1024];  
  33.         int length = 0;  
  34.         while ((length = reader.read(buff)) != -1) {  
  35.             System.out.println(new String(buff, 0, length));  
  36.             httpclient.getConnectionManager().shutdown();  
  37.         }  
  38.     }  
  39. }  


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

Java代码  收藏代码
  1. import org.apache.http.HttpEntity;  
  2. import org.apache.http.HttpResponse;  
  3. import org.apache.http.NameValuePair;  
  4. import org.apache.http.client.HttpClient;  
  5. import org.apache.http.client.entity.UrlEncodedFormEntity;  
  6. import org.apache.http.client.methods.HttpPost;  
  7. import org.apache.http.impl.client.DefaultHttpClient;  
  8. import org.apache.http.message.BasicNameValuePair;  
  9. import org.apache.http.entity.*;  
  10.   
  11. import java.io.IOException;  
  12. import java.io.InputStreamReader;  
  13. import java.util.ArrayList;  
  14. import java.util.List;  
  15.   
  16. /** 
  17.  * 不指定参数名的方式来POST数据 
  18.  *  
  19.  */  
  20. public class TestPostXml {  
  21.     public static void main(String[] args) throws IOException {  
  22.         HttpClient httpclient = new DefaultHttpClient();  
  23.         HttpPost httppost = new HttpPost(  
  24.                 "http://localhost:8080/waitsrv/GenXmlServlet");  
  25.         StringEntity myEntity = new StringEntity("<html>你好啊啊</html>""GBK");  
  26.         httppost.addHeader("Content-Type""text/xml");  
  27.         httppost.setEntity(myEntity);  
  28.         HttpResponse response = httpclient.execute(httppost);  
  29.         HttpEntity resEntity = response.getEntity();  
  30.         InputStreamReader reader = new InputStreamReader(  
  31.                 resEntity.getContent(), "ISO-8859-1");  
  32.         char[] buff = new char[1024];  
  33.         int length = 0;  
  34.         while ((length = reader.read(buff)) != -1) {  
  35.             System.out.println(new String(buff, 0, length));  
  36.         }  
  37.         httpclient.getConnectionManager().shutdown();  
  38.     }  
  39. }  


服务端接收方式: 
Java代码  收藏代码
  1. package com;  
  2.   
  3. import javax.servlet.ServletException;  
  4. import javax.servlet.http.HttpServlet;  
  5. import javax.servlet.http.HttpServletRequest;  
  6. import javax.servlet.http.HttpServletResponse;  
  7. import java.io.IOException;  
  8. import java.io.InputStreamReader;  
  9. import java.io.PrintWriter;  
  10.   
  11. /** 
  12.  * 接收XLM请求 
  13.  *  
  14.  */  
  15. public class GenXmlServlet extends HttpServlet {  
  16.     protected void doPost(HttpServletRequest req, HttpServletResponse resp)  
  17.             throws ServletException, IOException {  
  18.         // String xml = req.getParameter("xmldata");  
  19.         resp.setContentType("text/xml");  
  20.         resp.setCharacterEncoding("GBK");  
  21.         PrintWriter out = resp.getWriter();  
  22.         // out.println(xml);  
  23.         // System.out.println(xml);  
  24.         System.out.println("----------------------");  
  25.         InputStreamReader reader = new InputStreamReader(req.getInputStream(),  
  26.                 "GBK");  
  27.         char[] buff = new char[1024];  
  28.         int length = 0;  
  29.         while ((length = reader.read(buff)) != -1) {  
  30.             String x = new String(buff, 0, length);  
  31.             System.out.println(x);  
  32.             out.print(x);  
  33.         }  
  34.     }  
  35.   
  36.     protected void doGet(HttpServletRequest req, HttpServletResponse resp)  
  37.             throws ServletException, IOException {  
  38.         resp.setContentType("text/html");  
  39.         PrintWriter out = resp.getWriter();  
  40.         out.println("<html>");  
  41.         out.println("<head>");  
  42.         out.println("<title>Hello World!</title>");  
  43.         out.println("</head>");  
  44.         out.println("<body>");  
  45.         out.println("<h1>Hello World!!</h1>");  
  46.         out.println("</body>");  
  47.         out.println("</html>");  
  48.     }  
  49. }  


web.xml 
Java代码  收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>   
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee"   
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"   
  6. version="2.5">   
  7. <servlet>   
  8. <servlet-name>GenXmlServlet</servlet-name>   
  9. <servlet-class>com.GenXmlServlet</servlet-class>   
  10. </servlet>   
  11. <servlet-mapping>   
  12. <servlet-name>GenXmlServlet</servlet-name>   
  13. <url-pattern>/GenXmlServlet</url-pattern>   
  14. </servlet-mapping>   
  15. </web-app>   

没有评论: