Jetty 是一個基於 Java 的開源 HTTP 伺服器與 Servlet 容器,支援最新 Servlet 規範,廣泛應用於 Apache Geronimo、JBoss、Eclipse 等專案。其設計哲學為易用性、可擴展性、易嵌入性,適合傳統 Web 應用、靜態內容服務、微服務嵌入等場景。
jetty.xml) 或 API 程式化配置Web 2.0/Ajax/Comet 場景下,大量長連線會耗盡傳統執行緒池。Jetty 的 Continuation 機制基於 Java NIO 非阻塞 I/O,允許單一執行緒處理多個異步請求:
// 使用 Continuation 的 Servlet 片段
Continuation continuation = ContinuationSupport.getContinuation(request);
continuation.suspend(1000); // 掛起請求,釋放執行緒處理其他任務
// 事件發生時 resume() 喚醒,請求重新進入 Servlet 鏈
對比傳統阻塞模式 (while(!event) Thread.sleep()) 佔用執行緒,Continuation 大幅提升併發能力。
Jetty 設計為組件,可無縫嵌入應用程式:
Server server = new Server(8080);
server.setHandler(new DefaultHandler());
// 可選:載入外部 jetty.xml 配置
XmlConfiguration configuration = new XmlConfiguration(
new FileInputStream("etc/jetty.xml"));
configuration.configure(server);
server.start();
server.join();
$JETTY_HOME/webappsjava -jar start.jar (預設端口 8080)https://localhost:8080/your-war-context/防止未授權關閉伺服器:
java -DSTOP.PORT=8079 -DSTOP.KEY=mypassword -jar start.jar
# 關閉時需提供密碼:java -DSTOP.PORT=8079 -DSTOP.KEY=mypassword -jar start.jar --stop
start.jar 啟動 → 呼叫 Server.main()Server 實例 (繼承 HttpServer)XmlConfiguration 讀取 jetty.xml,透過反射注入組件:HttpListener、HttpContext、HttpHandler、WebApplicationJetty 以輕量、模組化、非阻塞 I/O 著稱,是嵌入式 Web 容器的首選。Continuation 機制完美解決 Comet/長輪詢的併發瓶頸,配合靈活的配置方式,無論獨立部署或嵌入微服務皆表現優異。