目录
一、Jetty是什么?先看一个生活比喻
假设你要开一家餐馆(Web应用),可以选择两种经营模式:
传统大饭店模式(如Tomcat):
有固定的前厅(HTTP连接器)、标准化厨房(Servlet容器)、甚至自带停车场(JSP支持)。功能全面但体积较大。定制化私房菜模式(即Jetty):
你可以自由组合用餐区(Connector)、厨房设备(Handler)、甚至选择只做外卖(嵌入式部署)。特点是灵活轻便,按需配置。
Jetty的本质:一个模块化的Java HTTP服务器和Servlet容器,既能独立运行,也能轻松嵌入应用程序。
二、5分钟快速入门:搭建你的第一个Jetty服务
步骤1:Maven依赖配置
<dependency> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-server</artifactId> <version>11.0.15</version> </dependency>
步骤2:编写简易Servlet(厨房厨师)
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
resp.getWriter().print("🍜 Jetty服务已启动!");
}
}
步骤3:组装服务器(餐厅开业准备)
public class JettyStarter { public static void main(String[] args) throws Exception { Server server = new Server(8080); // 在8080端口营业 // 配置请求处理流水线 ServletContextHandler handler = new ServletContextHandler(); handler.addServlet(HelloServlet.class, "/hello"); server.setHandler(handler); server.start(); server.join(); // 保持营业状态 } }
运行后访问 http://localhost:8080/hello 就能看到欢迎信息!
三、核心组件拆解:Jetty的四大金刚
组件 | 类比 | 作用说明 | 常用配置示例 |
---|---|---|---|
Server | 餐厅总经理 | 整个服务器的生命周期管理 | new Server(端口号) |
Connector | 前台接待员 | 处理网络连接和协议解析 | ServerConnector 配置HTTPS |
Handler | 部门经理 | 请求路由和业务逻辑分发 | ResourceHandler 处理静态资源 |
Servlet | 后厨工作人员 | 具体处理HTTP请求的业务逻辑 | 自定义doGet /doPost 方法 |
组件协作流程图:
客户端 → Connector接收 → Handler路由 → Servlet处理 → 返回响应
四、为什么选择Jetty?对比传统服务器
优势场景:
嵌入式开发:像乐高一样嵌入Spring Boot等框架
new SpringApplicationBuilder() .sources(MyApp.class) .web(WebApplicationType.NONE) // 禁用默认Tomcat .run(args);
快速启停:启动速度比传统服务器快30%-50%
按需加载:最小化部署只需约2MB内存
适用情况举例:
- 需要频繁重启的微服务
- IoT设备上的边缘计算节点
- 需要WebSocket支持的实时聊天应用
五、新手常见问题解答
Q:Jetty和Tomcat怎么选?
A:就像选择咖啡机——Tomcat是功能齐全的全自动咖啡机,Jetty是支持DIY的胶囊咖啡机。需要快速标准化选前者,追求定制化选后者。
Q:Jetty如何处理高并发?
Jetty使用NIO(非阻塞IO)模型,就像餐厅使用叫号系统:
传统BIO模式 → 每个顾客一个服务员全程服务(资源浪费)
Jetty的NIO → 一个服务员管理多个顾客的就餐进度(高效复用)