Java如何使用Jetty实现网络通信

296 阅读2分钟

原博客: Java如何使用Jetty实现网络通信 (techdatafuture.com) 里面会持续更新技术文章

Jetty是一个开源的基于Java的Web服务器和容器,它可以作为开发和部署Java Web应用程序的嵌入式服务器,也可以作为独立的服务器。

优点:

  1. 轻量级:Jetty是一个轻量级的服务器,它的内存占用量相对较小,适合用于部署资源受限的环境。
  2. 高性能:Jetty具有高性能的特点,可以支持大量的并发连接。
  3. 可嵌入性:Jetty可以嵌入到Java应用程序中,使得应用程序可以通过Jetty来提供网络服务。
  4. 灵活性:Jetty支持各种类型的网络通信协议和传输方式,如HTTP、WebSocket、XML-RPC等。
  5. 可扩展性:Jetty提供了丰富的扩展机制,可以通过插件和模块来扩展功能。

缺点:

  1. 学习曲线较陡:对于初学者来说,如果没有之前的Web服务开发经验,可能需要花费一些时间来学习和理解Jetty的使用。
  2. 配置复杂:在一些复杂的场景下,Jetty的配置可能比较繁琐。

以下是使用Jetty实现网络通信的Java样例代码,包括客户端和服务端的代码。

首先,需要在pom.xml文件中添加Jetty的依赖:

org.eclipse.jetty jetty-server 9.4.40.v20210413

接下来,我们分别来实现客户端和服务端的代码。

客户端代码:

import org.eclipse.jetty.client.HttpClient; import org.eclipse.jetty.client.api.ContentResponse; import org.eclipse.jetty.client.api.Request; import org.eclipse.jetty.http.HttpMethod;

public class JettyClientExample { public static void main(String[] args) throws Exception { HttpClient httpClient = new HttpClient(); httpClient.start();

    Request request = httpClient.newRequest("http://localhost:8080")
            .method(HttpMethod.GET);

    ContentResponse response = request.send();

    System.out.println(response.getContentAsString());

    httpClient.stop();
}

}

服务端代码:

import org.eclipse.jetty.server.Request; import org.eclipse.jetty.server.Server; import org.eclipse.jetty.server.handler.AbstractHandler;

import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;

public class JettyServerExample { public static void main(String[] args) throws Exception { Server server = new Server(8080); server.setHandler(new HelloHandler());

    server.start();
    server.join();
}

public static class HelloHandler extends AbstractHandler {
    @Override
    public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response)
            throws IOException, ServletException {
        response.setContentType("text/html; charset=utf-8");
        response.setStatus(HttpServletResponse.SC_OK);
        baseRequest.setHandled(true);
        response.getWriter().println("<h1>Hello, Jetty!</h1>");
    }
}

}

以上示例代码中,客户端使用Jetty的HttpClient发送 HTTP GET 请求到服务端,服务端使用Jetty的Server和Handler来处理请求,并响应一个简单的HTML页面。

注意:

  1. 示例中的服务端代码使用了Jetty的抽象处理器(AbstractHandler),可以根据自己的需求来实现自定义的处理器。
  2. 运行时需要确保本地8080端口没有被占用。