Maison  >  Article  >  Java  >  Explication détaillée de la communication http en utilisant JAVA

Explication détaillée de la communication http en utilisant JAVA

高洛峰
高洛峰original
2017-01-05 14:26:032243parcourir

Aperçu de la communication HTTP

La communication HTTP comporte principalement deux méthodes : la méthode POST et la méthode GET. Le premier envoie des données au serveur via des entités de message HTTP, qui offrent une sécurité élevée et aucune limite sur la taille de transmission des données. Le second transmet la chaîne de requête de l'URL aux paramètres du serveur et les affiche dans la barre d'adresse du navigateur en texte brut. a une mauvaise confidentialité et peut transmettre jusqu'à 2048 caractères. Mais les requêtes GET ne sont pas inutiles : les requêtes GET sont principalement utilisées pour les requêtes (lecture de ressources) et sont très efficaces. Les requêtes POST sont utilisées pour l'enregistrement, la connexion et d'autres opérations avec une haute sécurité et l'écriture de données dans la base de données.

En plus du POST et du GET, il existe d'autres moyens de communication http ! Veuillez consulter la méthode de requête http

Préparation avant l'encodage

Avant l'encodage, nous créons d'abord un Servlet qui reçoit les paramètres du client (nom et âge) et répond au client.

@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();
  }
 
}

Utilisez JDK pour implémenter la communication http

Utilisez URLConnection pour implémenter la requête GET

Instancier un objet java.net.URL
Via l'openConnection de l'objet URL ; ( ) méthode pour obtenir un java.net.URLConnection ;
obtenir le flux d'entrée via la méthode getInputStream() de l'objet URLConnection ;
lire le flux d'entrée
fermer la ressource ;

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());
}

Explication détaillée de la communication http en utilisant JAVA

Utilisez HttpURLConnection pour implémenter les requêtes POST

java.net.HttpURLConnection est une sous-classe de java.net.URL, fournissant plus d'informations sur http opérations (méthodes getXXX et setXXX). Cette classe définit une série de codes d'état HTTP :

Explication détaillée de la communication http en utilisant JAVA

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());
}

Explication détaillée de la communication http en utilisant JAVA

Utiliser httpclient pour la communication http

httpclient grandement simplifie l'implémentation de la communication http dans le JDK.

dépendances maven :

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

Requête 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);
}

Explication détaillée de la communication http en utilisant JAVA

Requête 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);
}

Un sous-projet visant à fournir une boîte à outils de programmation client efficace, à jour et riche en fonctionnalités qui prend en charge le protocole HTTP, et il prend en charge la dernière version et les recommandations du protocole HTTP. HttpClient a été utilisé dans de nombreux projets. Par exemple, deux autres projets open source célèbres sur Apache Jakarta, Cactus et HTMLUnit, utilisent tous deux HttpClient.

Pour des explications plus détaillées sur la communication http utilisant JAVA, veuillez faire attention au site Web PHP chinois !

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn