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配置等。