最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

Http通信概述

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

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

編碼前的準備

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

@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方式請求該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方式請求該Servlet。<br />" + "name = " + name + ",age = " + age);
    pw.flush();
    pw.close();
  }

}

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

使用URLConnection實現(xiàn)GET請求

實例化一個java.net.URL對象;
通過URL對象的openConnection()方法得到一個java.net.URLConnection;
通過URLConnection對象的getInputStream()方法獲得輸入流;
讀取輸入流;
關閉資源。

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實現(xiàn)POST請求

java.net.HttpURLConnection是java.net.URL的子類,提供了更多的關于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);    // 設置該連接是可以輸出的
  httpURLConnection.setRequestMethod("POST"); // 設置請求方式
  httpURLConnection.setRequestProperty("charset", "utf-8");

  PrintWriter pw = new PrintWriter(new BufferedOutputStream(httpURLConnection.getOutputStream()));
  pw.write("name=welcome");          // 向連接中輸出數(shù)據(jù)(相當于發(fā)送數(shù)據(jù)給服務器)
  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進行http通信

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

maven依賴:

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

GET請求

public void httpclientGet() throws Exception{

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

  // 創(chuàng)建GET請求(在構造器中傳入URL字符串即可)
  HttpGet get = new HttpGet("http://127.0.0.1/http/demo.do?name=admin&age=40");

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

  // 調(diào)用HttpResponse對象的getEntity方法得到響應實體
  HttpEntity httpEntity = response.getEntity();

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

POST請求

public void httpclientPost() throws Exception{

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

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

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

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

  // 得到響應并轉(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下的子項目,用來提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。

相關文章

  • MyBatis 中  type-aliases-package的作用(簡化類型映射)

    MyBatis 中  type-aliases-package的作用(簡化類型映射)

    MyBatis中type-aliases-package的作用是簡化類型映射,通過指定包路徑,MyBatis會自動掃描該包下的所有類并為這些類生成類型別名,減少XML配置文件中的冗長代碼,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因

    SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因

    spring-boot-maven-plugin是spring boot提供的maven打包插件,本文主要介紹了SpringBoot Maven打包插件spring-boot-maven-plugin無法解析原因,具有一定的參考價值,感興趣的可以了解一下
    2024-03-03
  • SpringMVC @RequestBody屬性名大寫字母注入失敗的解決

    SpringMVC @RequestBody屬性名大寫字母注入失敗的解決

    這篇文章主要介紹了SpringMVC @RequestBody屬性名大寫字母注入失敗的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-04-04
  • Java getParameter方法案例詳解

    Java getParameter方法案例詳解

    這篇文章主要介紹了Java getParameter方法案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • SpringBoot整合Druid數(shù)據(jù)庫連接池的方法

    SpringBoot整合Druid數(shù)據(jù)庫連接池的方法

    Druid是Java語言中最好的數(shù)據(jù)庫連接池。Druid能夠提供強大的監(jiān)控和擴展功能。這篇文章主要介紹了SpringBoot整合Druid數(shù)據(jù)庫連接池的方法,需要的朋友可以參考下
    2020-07-07
  • 詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn)

    詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn)

    這篇文章主要介紹了詳解Java Fibonacci Search斐波那契搜索算法代碼實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-10-10
  • 淺析RxJava處理復雜表單驗證問題的方法

    淺析RxJava處理復雜表單驗證問題的方法

    這篇文章主要介紹了RxJava處理復雜表單驗證問題的相關資料,非常不錯具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • RocketMQ集群消費與廣播消費模式

    RocketMQ集群消費與廣播消費模式

    這篇文章主要介紹了RocketMQ集群消費與廣播消費模式,消息隊列RocketMQ版支持集群消費和廣播消費,本文介紹集群消費和廣播消費的基本概念、適用場景、功能差異、注意事項以及設置方式
    2023-02-02
  • 深入JAVA對象深度克隆的詳解

    深入JAVA對象深度克隆的詳解

    本篇文章是對JAVA對象深度克隆進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • 解密Java?Map如何高效地操作鍵值對

    解密Java?Map如何高效地操作鍵值對

    Map是Java中非常重要的數(shù)據(jù)結(jié)構之一,它存儲鍵值對,可以通過鍵快速查找對應的值,是我們在實際開發(fā)中使用最為頻繁的數(shù)據(jù)結(jié)構之一,下面小編就來和大家探討一下Map是如何高效地操作鍵值對的吧
    2023-09-09

最新評論

怀来县| 林口县| 土默特右旗| 防城港市| 景谷| 大竹县| 齐齐哈尔市| 恩施市| 江门市| 金塔县| 昌宁县| 嘉兴市| 普陀区| 台东市| 台东市| 巨鹿县| 天长市| 吴堡县| 东丰县| 宁德市| 宜阳县| 惠水县| 镇赉县| 乐安县| 中卫市| 敖汉旗| 台中市| 苏尼特左旗| 孟州市| 宜都市| 博罗县| 罗江县| 黄平县| 宜良县| 砀山县| 黑山县| 运城市| 凉城县| 泾川县| 凤阳县| 珠海市|