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

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

除了POST和GET,http通信還有其他方式!請(qǐng)參見(jiàn)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ì)象;
通過(guò)URL對(duì)象的openConnection()方法得到一個(gè)java.net.URLConnection;
通過(guò)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();                          // 打開(kāi)連接
  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)目,用來(lái)提供高效的、最新的、功能豐富的支持HTTP協(xié)議的客戶端編程工具包,并且它支持HTTP協(xié)議最新的版本和建議。HttpClient已經(jīng)應(yīng)用在很多的項(xiàng)目中,比如Apache Jakarta上很著名的另外兩個(gè)開(kāi)源項(xiàng)目Cactus和HTMLUnit都使用了HttpClient。

相關(guān)文章

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

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

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

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

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

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

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

    Java getParameter方法案例詳解

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

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

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

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

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

    淺析RxJava處理復(fù)雜表單驗(yàn)證問(wèn)題的方法

    這篇文章主要介紹了RxJava處理復(fù)雜表單驗(yàn)證問(wèn)題的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-06-06
  • RocketMQ集群消費(fèi)與廣播消費(fèi)模式

    RocketMQ集群消費(fèi)與廣播消費(fèi)模式

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

    深入JAVA對(duì)象深度克隆的詳解

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

    解密Java?Map如何高效地操作鍵值對(duì)

    Map是Java中非常重要的數(shù)據(jù)結(jié)構(gòu)之一,它存儲(chǔ)鍵值對(duì),可以通過(guò)鍵快速查找對(duì)應(yīng)的值,是我們?cè)趯?shí)際開(kāi)發(fā)中使用最為頻繁的數(shù)據(jù)結(jié)構(gòu)之一,下面小編就來(lái)和大家探討一下Map是如何高效地操作鍵值對(duì)的吧
    2023-09-09

最新評(píng)論

宜章县| 柏乡县| 固原市| 禄丰县| 巴里| 拉萨市| 宁南县| 武城县| 玉山县| 抚顺市| 蓬溪县| 衡阳市| 宁城县| 龙里县| 溧阳市| 泸州市| 凌海市| 额尔古纳市| 琼结县| 辛集市| 潍坊市| 梁平县| 什邡市| 贺兰县| 云林县| 嘉兴市| 邵东县| 桦甸市| 青州市| 石林| 松阳县| 榆树市| 当涂县| 三台县| 文成县| 临夏市| 宜宾县| 沁水县| 金昌市| 巴塘县| 金湖县|