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

          常用鏈接

          留言簿(3)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          收藏夾

          我收藏的一些文章!

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          HTTP POST請(qǐng)求最常見(jiàn)的用途是發(fā)送表單參數(shù)到服務(wù)器。除了發(fā)送表單數(shù)據(jù),還可以使用POST的消息Body體發(fā)送各種數(shù)據(jù)(如純文本、XML文檔等)。本文講述如何用Java將數(shù)據(jù)寫(xiě)入POST請(qǐng)求的Body體,已經(jīng)在servlet獲取傳過(guò)來(lái)的數(shù)據(jù)。
          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{
            //發(fā)起post請(qǐng)求
            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");//這行很重要,如果不設(shè)置的話,后面解析xml流的話,會(huì)報(bào):Caused by: org.xml.sax.SAXParseException: Premature end of file.

             // 得到請(qǐng)求的輸出流對(duì)象 
                  OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream()); 
                  // 把數(shù)據(jù)寫(xiě)入請(qǐng)求的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();

            //接收發(fā)起請(qǐng)求后由服務(wù)端返回的結(jié)果
            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());
           }
          }

          獲取前段發(fā)過(guò)來(lái)的post數(shù)據(jù)

          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{
            // 測(cè)試
            try {
             response.setContentType("text/html; charset=UTF-8");
             PrintWriter out = response.getWriter();
             out.println("SUCCESS");
             ServletInputStream in = request.getInputStream();
             String str = readLine(in);// 這里是前臺(tái)發(fā)起的所有參數(shù)的值,包括二進(jìn)制形式的文件和其它形式的文件
             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 閱讀(6536) 評(píng)論(0)  編輯  收藏
          主站蜘蛛池模板: 浮山县| 山东| 基隆市| 咸阳市| 个旧市| 修武县| 丹巴县| 任丘市| 平和县| 天柱县| 陕西省| 大庆市| 洪江市| 甘泉县| 桑日县| 天柱县| 兴业县| 卫辉市| 白城市| 盖州市| 女性| 永德县| 郴州市| 磴口县| 调兵山市| 宝鸡市| 章丘市| 舞阳县| 开鲁县| 孝感市| 陈巴尔虎旗| 正蓝旗| 宜州市| 涿州市| 获嘉县| 浠水县| 绥德县| 古浪县| 舒兰市| 滨海县| 微山县|