隨筆 - 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 閱讀(6535) 評論(0)  編輯  收藏
          主站蜘蛛池模板: 玉山县| 荃湾区| 边坝县| 蓬安县| 万载县| 阿图什市| 东莞市| 新化县| 惠水县| 肃北| 都江堰市| 安岳县| 雷州市| 霸州市| 康马县| 孝感市| 陵川县| 吉木乃县| 石狮市| 彝良县| 松桃| 平乐县| 安庆市| 丽江市| 白水县| 成安县| 肇东市| 渭南市| 本溪| 青阳县| 紫金县| 樟树市| 周宁县| 浠水县| 红安县| 舟山市| 宁安市| 托里县| 彭阳县| 舞钢市| 遂川县|