国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Java > 正文

使用JAVA實現http通信詳解

2019-11-26 15:00:38
字體:
來源:轉載
供稿:網友

Http通信概述

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

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

編碼前的準備

在進行編碼之前,我們先創建一個Servlet,該Servlet接收客戶端的參數(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實現http通信

使用URLConnection實現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實現POST請求

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

 

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");          // 向連接中輸出數據(相當于發送數據給服務器)  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) {  // 讀取數據    sb.append(line + "/n");  }  System.out.println(sb.toString());}

使用httpclient進行http通信

httpclient大大簡化了JDK中http通信的實現。

maven依賴:

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

GET請求

public void httpclientGet() throws Exception{  // 創建HttpClient對象  HttpClient client = HttpClients.createDefault();  // 創建GET請求(在構造器中傳入URL字符串即可)  HttpGet get = new HttpGet("http://127.0.0.1/http/demo.do?name=admin&age=40");  // 調用HttpClient對象的execute方法獲得響應  HttpResponse response = client.execute(get);  // 調用HttpResponse對象的getEntity方法得到響應實體  HttpEntity httpEntity = response.getEntity();  // 使用EntityUtils工具類得到響應的字符串表示  String result = EntityUtils.toString(httpEntity,"utf-8");  System.out.println(result);}

POST請求

public void httpclientPost() throws Exception{  // 創建HttpClient對象  HttpClient client = HttpClients.createDefault();  // 創建POST請求  HttpPost post = new HttpPost("http://127.0.0.1/http/demo.do");  // 創建一個List容器,用于存放基本鍵值對(基本鍵值對即:參數名-參數值)  List<BasicNameValuePair> parameters = new ArrayList<>();  parameters.add(new BasicNameValuePair("name", "張三"));  parameters.add(new BasicNameValuePair("age", "25"));  // 向POST請求中添加消息實體  post.setEntity(new UrlEncodedFormEntity(parameters, "utf-8"));  // 得到響應并轉化成字符串  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協議的客戶端編程工具包,并且它支持HTTP協議最新的版本和建議。HttpClient已經應用在很多的項目中,比如Apache Jakarta上很著名的另外兩個開源項目Cactus和HTMLUnit都使用了HttpClient。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 陇川县| 宁德市| 马公市| 高州市| 广河县| 桂阳县| 海宁市| 曲水县| 库车县| 南投市| 龙川县| 双鸭山市| 星子县| 侯马市| 高淳县| 定安县| 大渡口区| 察雅县| 溧阳市| 麻城市| 怀化市| 仙居县| 象州县| 滨州市| 昌江| 马鞍山市| 阜平县| 定兴县| 永定县| 隆昌县| 衡水市| 谢通门县| 苏尼特右旗| 开鲁县| 合作市| 茶陵县| 沛县| 武功县| 江源县| 西充县| 沧州市|