随笔 - 100  文章 - 50  trackbacks - 0
<2014年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

常用链接

留言簿(3)

随笔分类

随笔档案

文章分类

文章档案

收藏夹

我收藏的一些文章!

搜索

  •  

最新评论

阅读排行榜

评论排行榜

HTTP POST请求最常见的用途是发送表单参数到服务器。除了发送表单数据,还可以使用POST的消息Body体发送各种数据(如纯文本、XML文档等)。本文讲述如何用Java将数据写入POST请求的Body体,已经在servlet获取传过来的数据。
package login;

import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.URL;


public class RequestPostTest {

 public static void main(String[] args) throws Exception{
  //发起post请求
  String urlString="http://localhost:8080/PostDemo/login";
  URL connectURL = new URL(urlString);
  HttpURLConnection conn = (HttpURLConnection) connectURL.openConnection();
  conn.setReadTimeout(100000);
        conn.setConnectTimeout(100000);
  conn.setDoInput(true);
  conn.setDoOutput(true);
  conn.setUseCaches(false);
  conn.setRequestMethod("POST");
  conn.setRequestProperty("Connection", "Keep-Alive");

  conn.setRequestProperty("content-type", "text/html");//这行很重要,如果不设置的话,后面解析xml流的话,会报:Caused by: org.xml.sax.SAXParseException: Premature end of file.

   // 得到请求的输出流对象 
        OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
        // 把数据写入请求的Body 
        out.write("<?xml version='1.0' encoding='UTF-8'?><trans><tran><requestId>111111</requestId><orderNo>22222</orderNo></tran><tran><requestId>aaaa</requestId><orderNo>bbbb</orderNo></tran><tran><requestId>cccccc</requestId><orderNo>ddddd</orderNo></tran></trans>"); 
  out.flush();
  out.close();

  //接收发起请求后由服务端返回的结果
  int read;
  StringBuffer inputb = new StringBuffer();
  InputStream is = conn.getInputStream();
  InputStreamReader inputStreamReader = new InputStreamReader(is, "UTF-8");
   while ((read=inputStreamReader.read())>=0) {
             inputb.append( (char) read);
         }
   System.out.println(inputb.toString());
 }
}

获取前段发过来的post数据

package login;

import java.io.IOException;
import java.io.PrintWriter;

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

public class Login extends HttpServlet {
 /**
  *
  */
 private static final long serialVersionUID = -5376047309978396611L;

 public void service(HttpServletRequest req, HttpServletResponse res)
   throws IOException {
  this.doPost(req,res);
 }

 public void doGet(HttpServletRequest request, HttpServletResponse res) throws IOException{
  this.doPost(request,res);
 }
 
 public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException{
  // 测试
  try {
   response.setContentType("text/html; charset=UTF-8");
   PrintWriter out = response.getWriter();
   out.println("SUCCESS");
   ServletInputStream in = request.getInputStream();
   String str = readLine(in);// 这里是前台发起的所有参数的值,包括二进制形式的文件和其它形式的文件
   out.println(str);
   out.flush();
  } catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  return;
 }

 /**
  * Read the next line of input.
  *
  * @return a String containing the next line of input from the stream, or
  *         null to indicate the end of the stream.
  * @exception IOException
  *                if an input or output exception has occurred.
  */
 private String readLine(ServletInputStream in) throws IOException {
  byte[] buf = new byte[8 * 1024];
  StringBuffer sbuf = new StringBuffer();
  int result;
  // String line;

  do {
   result = in.readLine(buf, 0, buf.length); // does +=
   if (result != -1) {
    sbuf.append(new String(buf, 0, result, "UTF-8"));
   }
  } while (result == buf.length); // loop only if the buffer was filled

  if (sbuf.length() == 0) {
   return null; // nothing read, must be at the end of stream
  }

  // Cut off the trailing \n or \r\n
  // It should always be \r\n but IE5 sometimes does just \n
  int len = sbuf.length();
  if (sbuf.charAt(len - 2) == '\r') {
   sbuf.setLength(len - 2); // cut \r\n
  } else {
   sbuf.setLength(len - 1); // cut \n
  }
  return sbuf.toString();
 }
}


posted on 2014-12-10 23:30 fly 阅读(6524) 评论(0)  编辑  收藏