项目概况

HTTP协议使用示例

2026-01-292 min read未分类
Mojito

Mojito Framework

使用示例: com.hanframework.mojito.config.HttpInstallerTest

一、构建一个非阻塞HTTP服务端

Installer 可以轻松构建HTTP服务端,只要编写 BusinessHandler 服务端业务处理器即可。

  • startAsync 非阻塞构建
  • start 阻塞构建
java
1 /** 2 * 构建http服务端 3 */ 4 @Test 5 public void testHttpServer() throws Exception { 6 7 Installer.httpServer((channel, request) -> { 8 System.out.println("请求地址:" + request.getRequestURI()); 9 System.out.println("请求头" + request.getHeaders()); 10 System.out.println("请求参数:" + request.getRequestParams()); 11 System.out.println("请求body:" + request.getBody()); 12 return HttpResponseFacade.HTML("<h1>Hello</h1>"); 13 }).startAsync(8080); 14 15 testHttpClient(); 16 17 okHttpClientTest(); 18 }

二、构建HTTP客户端

1. 使用第三方包构建客户端

前面说了,HTTP是基于标准的HTTP协议,所以市面上的HttpClient都是支持的。如下使用 OkHttpClient 构建一个GET请求。

java
1 private void okHttpClientTest() { 2 OkHttpClient okHttpClient = new OkHttpClient(); 3 Request request = new Builder().url("http://127.0.0.1:8080").get().build(); 4 try (Response response = okHttpClient.newCall(request).execute()) { 5 if (!response.isSuccessful()) { 6 // ... handle failed request 7 System.out.println("发送失败"); 8 } else { 9 String responseBody = response.body().string(); 10 System.out.println("OkHttpClient处理返回:" + responseBody); 11 } 12 } catch (IOException e) { 13 // ... handle IO exception 14 } 15 } 16

2. 使用框架构建客户端

因为HTTP默认的请求类是 HttpRequestFacade 所以必须使用 HttpRequestBuilder 来进行构建请求。

  • connect 建立连接
  • close 关闭连接

注意: http数据无状态协议,如果要保持连接要在请求头中指定。 addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE)

java
1 /** 2 * 支持长连接 3 * 4 * @throws Exception 异常 5 */ 6 private void testHttpClient() throws Exception { 7 Client<HttpRequestFacade, HttpResponseFacade> httpClient = Installer.httpClient(); 8 httpClient.connect("127.0.0.1", 8080); 9 URI uri = new URI("/user/get"); 10 HttpRequestBuilder httpRequestBuilder = new HttpRequestBuilder() 11 .GET(uri) 12 //设置长连接 13 .addHeader(HttpHeaders.Names.CONNECTION, HttpHeaders.Values.KEEP_ALIVE); 14 for (int i = 0; i < 10; i++) { 15 HttpRequestFacade httpRequestFacade = httpRequestBuilder.wrapBuild(); 16 System.out.println("request-id-request-" + i + "-" + httpRequestFacade.getId()); 17 MojitoFuture<HttpResponseFacade> httpResponseFacadeMojitoFuture = httpClient.sendAsync(httpRequestFacade); 18 System.out.println("request-id-response-" + i + "-" + httpResponseFacadeMojitoFuture.get().getId()); 19 } 20 httpClient.close(); 21 }