>Java >java지도 시간 >JAVA를 이용한 http 통신에 대한 자세한 설명

JAVA를 이용한 http 통신에 대한 자세한 설명

高洛峰
高洛峰원래의
2017-01-05 14:26:032261검색

Http 통신 개요

Http 통신에는 크게 POST 방식과 GET 방식의 두 가지 방식이 있습니다. 전자는 보안이 높고 데이터 전송 크기에 제한이 없는 Http 메시지 엔터티를 통해 서버에 데이터를 보냅니다. 후자는 URL의 쿼리 문자열을 서버 매개 변수에 전달하고 이를 브라우저 주소 표시줄에 일반 텍스트로 표시합니다. 기밀성이 낮으며 최대 2048자까지 전송할 수 있습니다. 그러나 GET 요청은 쓸모가 없습니다. GET 요청은 주로 쿼리(리소스 읽기)에 사용되며 매우 효율적입니다. POST 요청은 등록, 로그인 및 보안 수준이 높은 기타 작업과 데이터베이스에 데이터 쓰기에 사용됩니다.

POST, GET 외에도 http 통신 방법이 있습니다! http 요청 방식을 참고하세요

인코딩 전 준비사항

인코딩 전 먼저 클라이언트의 매개변수(이름, 나이)를 받아 클라이언트에 응답하는 Servlet을 생성합니다.

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

JAVA를 이용한 http 통신에 대한 자세한 설명

HttpURLConnection을 사용하여 POST 요청 구현

java.net.HttpURLConnection은 java.net.URL의 하위 클래스로, http에 대한 추가 정보를 제공합니다. 작업(getXXX 및 setXXX 메소드). 이 클래스는 일련의 HTTP 상태 코드를 정의합니다.

JAVA를 이용한 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());
}

JAVA를 이용한 http 통신에 대한 자세한 설명

http 통신에 httpclient 사용

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

JAVA를 이용한 http 통신에 대한 자세한 설명

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

HTTP 프로토콜을 지원하는 효율적이고 기능이 풍부한 최신 클라이언트 프로그래밍 툴킷을 제공하는 하위 프로젝트입니다. HTTP 프로토콜의 최신 버전과 권장 사항을 지원합니다. HttpClient는 많은 프로젝트에서 사용되었습니다. 예를 들어 Apache Jakarta, Cactus 및 HTMLUnit의 다른 두 가지 유명한 오픈 소스 프로젝트는 모두 HttpClient를 사용합니다.

JAVA를 사용하여 http 통신을 구현하는 방법에 대한 자세한 내용은 PHP 중국어 웹사이트를 참고하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.