1. 概述

本文将介绍如何通过编程方式创建和配置Jetty实例。Jetty是一个轻量级、易于嵌入的HTTP服务器和Servlet容器。我们将探讨如何设置和配置一个或多个服务器实例。

2. Maven依赖

首先需要在pom.xml中添加以下Jetty 9依赖:

<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-server</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>
<dependency>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-webapp</artifactId>
    <version>9.4.8.v20171121</version>
</dependency>

3. 创建基础服务器

启动嵌入式Jetty服务器非常简单:

Server server = new Server();
server.start();

关闭服务器同样直接:

server.stop();

4. 处理器(Handlers)

服务器运行后,需要指定如何处理传入请求。这通过Handler接口实现。虽然可以自定义Handler,但Jetty已提供常见场景的现成实现。我们看两个典型例子:

4.1 WebAppContext

WebAppContext类可将请求处理委托给现有Web应用。应用可通过WAR文件路径或Web应用文件夹路径提供:

Handler webAppHandler = new WebAppContext(webAppPath, "/myApp");
server.setHandler(webAppHandler);

✅ 此配置将应用暴露在/myApp上下文路径下

4.2 HandlerCollection

对于复杂场景,可通过HandlerCollection组合多个处理器。假设有两个自定义处理器:

  • 第一个仅执行日志记录
  • 第二个生成实际响应

按顺序处理请求的配置方式:

Handler handlers = new HandlerCollection();
handlers.addHandler(loggingRequestHandler);
handlers.addHandler(customRequestHandler);
server.setHandler(handlers);

⚠️ 处理器执行顺序由添加顺序决定

5. 连接器(Connectors)

接下来配置服务器监听的地址、端口及空闲超时。Server类提供便捷构造器绑定特定端口或地址,但仅适合简单场景。当需要在多个套接字上建立连接时,需使用:

  • Connector接口
  • ServerConnector实现类
ServerConnector connector = new ServerConnector(server);
connector.setPort(80);
connector.setHost("192.168.1.100"); // 示例IP
connector.setIdleTimeout(30000);
server.addConnector(connector);

配置说明:

  • 监听地址:192.168.1.100:80
  • 连接空闲超时:30秒
  • 需其他套接字时,可添加更多Connector

❌ 避免直接使用Server构造器绑定端口,限制扩展性

6. 总结

本文介绍了Jetty嵌入式服务器的核心配置要点:

  • 基础服务器启动/关闭
  • 使用Handlers处理请求
  • 通过Connectors管理网络连接

完整示例代码可在GitHub仓库查看。掌握这些基础后,可进一步探索Jetty的高级特性如会话管理、SSL配置等。


原始标题:Creating and Configuring Jetty 9 Server in Java