欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用JAVA實(shí)現(xiàn)http通信詳解

 更新時(shí)間:2015年08月14日 10:41:40   投稿:hebedich  
本文給大家匯總介紹了幾種java實(shí)現(xiàn)http通訊的方法,非常的簡(jiǎn)單實(shí)用,有需要的小伙伴可以參考下。

Http通信概述

Http通信主要有兩種方式POST方式和GET方式。前者通過Http消息實(shí)體發(fā)送數(shù)據(jù)給服務(wù)器,安全性高,數(shù)據(jù)傳輸大小沒有限制,后者通過URL的查詢字符串傳遞給服務(wù)器參數(shù),以明文顯示在瀏覽器地址欄,保密性差,最多傳輸2048個(gè)字符。但是GET請(qǐng)求并不是一無是處——GET請(qǐng)求大多用于查詢(讀取資源),效率高。POST請(qǐng)求用于注冊(cè)、登錄等安全性較高且向數(shù)據(jù)庫中寫入數(shù)據(jù)的操作。

除了POST和GET,http通信還有其他方式!請(qǐng)參見http請(qǐng)求的方法

編碼前的準(zhǔn)備

在進(jìn)行編碼之前,我們先創(chuàng)建一個(gè)Servlet,該Servlet接收客戶端的參數(shù)(name和age),并響應(yīng)客戶端。

@WebServlet(urlPatterns={"/demo.do"})
public class DemoServlet extends HttpServlet {

  private static final long serialVersionUID = 1L;

  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    PrintWriter pw = response.getWriter();
    pw.print("您使用GET方式請(qǐng)求該Servlet。<br />" + "name = " + name + ",age = " + age);
    pw.flush();
    pw.close();
  }

  public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

    request.setCharacterEncoding("utf-8");
    response.setContentType("text/html;charset=utf-8");
    String name = request.getParameter("name");
    String age = request.getParameter("age");
    PrintWriter pw = response.getWriter();
    pw.print("您使用POST方式請(qǐng)求該Servlet。<br />" + "name = " + name + ",age = " + age);
    pw.flush();
    pw.close();
  }

}

使用JDK實(shí)現(xiàn)http通信

使用URLConnection實(shí)現(xiàn)GET請(qǐng)求

實(shí)例化一個(gè)java.net.URL對(duì)象;
通過URL對(duì)象的openConnection()方法得到一個(gè)java.net.URLConnection;
通過URLConnection對(duì)象的getInputStream()方法獲得輸入流;
讀取輸入流;
關(guān)閉資源。

public void get() throws Exception{

  URL url = new URL("http://127.0.0.1/http/demo.do?name=Jack&age=10");
  URLConnection urlConnection = url.openConnection();                          // 打開連接
  BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(),"utf-8")); // 獲取輸入流
  String line = null;
  StringBuilder sb = new StringBuilder();
  while ((line = br.readLine()) != null) {
    sb.append(line + "\n");
  }

  System.out.println(sb.toString());
}

使用HttpURLConnection實(shí)現(xiàn)POST請(qǐng)求

java.net.HttpURLConnection是java.net.URL的子類,提供了更多的關(guān)于http的操作(getXXX 和 setXXX方法)。該類中定義了一系列的HTTP狀態(tài)碼:

 

public void post() throws IOException{

  URL url = new URL("http://127.0.0.1/http/demo.do");
  HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();

  httpURLConnection.setDoInput(true);
  httpURLConnection.setDoOutput(true);    // 設(shè)置該連接是可以輸出的
  httpURLConnection.setRequestMethod("POST"); // 設(shè)置請(qǐng)求方式
  httpURLConnection.setRequestProperty("charset", "utf-8");

  PrintWriter pw = new PrintWriter(new BufferedOutputStream(httpURLConnection.getOutputStream()));
  pw.write("name=welcome");          // 向連接中輸出數(shù)據(jù)(相當(dāng)于發(fā)送數(shù)據(jù)給服務(wù)器)
  pw.write("&age=14");
  pw.flush();
  pw.close();

  BufferedReader br = new BufferedReader(new InputStreamReader(httpURLConnection.getInputStream(),"utf-8"));
  String line = null;
  StringBuilder sb = new StringBuilder();
  while ((line = br.readLine()) != null) {  // 讀取數(shù)據(jù)
    sb.append(line + "\n");
  }

  System.out.println(sb.toString());
}

使用httpclient進(jìn)行http通信

httpclient大大簡(jiǎn)化了JDK中http通信的實(shí)現(xiàn)。

maven依賴:

<dependency>
  <groupId>org.apache.httpcomponents</groupId>
  <artifactId>httpclient</artifactId>
  <version>4.3.6</version>
</dependency>

GET請(qǐng)求

public void httpclientGet() throws Exception{

  // 創(chuàng)建HttpClient對(duì)象
  HttpClient client = HttpClients.createDefault();

  // 創(chuàng)建GET請(qǐng)求(在構(gòu)造器中傳入U(xiǎn)RL字符串即可)
  HttpGet get = new HttpGet("http://127.0.0.1/http/demo.do?name=admin&age=40");

  // 調(diào)用HttpClient對(duì)象的execute方法獲得響應(yīng)
  HttpResponse response = client.execute(get);

  // 調(diào)用HttpResponse對(duì)象的getEntity方法得到響應(yīng)實(shí)體
  HttpEntity httpEntity = response.getEntity();

  // 使用EntityUtils工具類得到響應(yīng)的字符串表示
  String result = EntityUtils.toString(httpEntity,"utf-8");
  System.out.println(result);
}

POST請(qǐng)求

public void httpclientPost() throws Exception{

  // 創(chuàng)建HttpClient對(duì)象
  HttpClient client = HttpClients.createDefault();

  // 創(chuàng)建POST請(qǐng)求
  HttpPost post = new HttpPost("http://127.0.0.1/http/demo.do");

  // 創(chuàng)建一個(gè)List容器,用于存放基本鍵值對(duì)(基本鍵值對(duì)即:參數(shù)名-參數(shù)值)
  List<BasicNameValuePair> parameters = new ArrayList<>();
  parameters.add(new BasicNameValuePair("name", "張三"));
  parameters.add(new BasicNameValuePair("age", "25"));

  // 向POST請(qǐng)求中添加消息實(shí)體
  post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));

  // 得到響應(yīng)并轉(zhuǎn)化成字符串
  HttpResponse response = client.execute(post);
  HttpEntity httpEntity = response.getEntity();
  String result = EntityUtils.toString(httpEntity,"utf-8");
  System.out.println(result);
}

HttpClient是Apache Jakarta Common下的子項(xiàng)目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應(yīng)用在很多的項(xiàng)目中,比如Apache Jakarta上很著名的另外兩個(gè)開源項(xiàng)目Cactus和HTMLUnit都使用了HttpClient。

相關(guān)文章

  • Java內(nèi)存溢出實(shí)現(xiàn)原因及解決方案

    Java內(nèi)存溢出實(shí)現(xiàn)原因及解決方案

    這篇文章主要介紹了Java內(nèi)存溢出實(shí)現(xiàn)原因及解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • Java設(shè)計(jì)模式之策略模式案例詳解

    Java設(shè)計(jì)模式之策略模式案例詳解

    策略模式(Strategy?Pattern)定義了一組同類型的算法,在不同的類中封裝起來,每種算法可以根據(jù)當(dāng)前場(chǎng)景相互替換,從而使算法的變化獨(dú)立于使用它們的客戶端即算法的調(diào)用者
    2022-07-07
  • Java實(shí)現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)

    Java實(shí)現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)

    這篇文章主要為大家詳細(xì)介紹了如何利用Java語言實(shí)現(xiàn)超大Excel文件解析(XSSF,SXSSF,easyExcel)以及速度的對(duì)比,感興趣的可以了解一下
    2022-07-07
  • Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?at?index?10解決辦法

    Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?a

    在做Java開發(fā)時(shí)肯定會(huì)碰到傳遞時(shí)間參數(shù)的情況,這篇文章主要給大家介紹了關(guān)于Java日期接收?qǐng)?bào)錯(cuò):could?not?be?parsed,?unparsed?text?found?at?index?10的解決辦法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-01-01
  • Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼

    Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼

    本篇文章主要介紹了Java利用Redis實(shí)現(xiàn)消息隊(duì)列的示例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07
  • Java繼承方法重寫實(shí)現(xiàn)原理及解析

    Java繼承方法重寫實(shí)現(xiàn)原理及解析

    這篇文章主要介紹了Java繼承方法重寫實(shí)現(xiàn)原理及解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-12-12
  • JavaWeb亂碼問題的終極解決方案(推薦)

    JavaWeb亂碼問題的終極解決方案(推薦)

    這篇文章主要給大家介紹了關(guān)于JavaWeb亂碼問題的終極解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用JavaWeb具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • spring boot 若依系統(tǒng)整合Ueditor部署時(shí)上傳圖片錯(cuò)誤問題

    spring boot 若依系統(tǒng)整合Ueditor部署時(shí)上傳圖片錯(cuò)誤問題

    這篇文章主要介紹了spring boot 若依系統(tǒng)整合Ueditor部署時(shí)上傳圖片錯(cuò)誤問題,本文給大家分享問題解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • 深入講解Java?synchronized的核心原理

    深入講解Java?synchronized的核心原理

    這篇文章主要為大家詳細(xì)介紹了Java中synchronized的核心原理以及簡(jiǎn)單的用法,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-07-07
  • Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    Java常用面板之JScrollPane滾動(dòng)面板實(shí)例詳解

    這篇文章主要介紹了Java常用面板JScrollPane的簡(jiǎn)單介紹和一個(gè)相關(guān)實(shí)例,,需要的朋友可以參考下。
    2017-08-08

最新評(píng)論