首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

深入 Jetty:輕量級 Web 伺服器核心特性與嵌入式應用實戰

     編輯:Java 相關知識

Jetty 簡介

Jetty 是一個基於 Java 的開源 HTTP 伺服器與 Servlet 容器,支援最新 Servlet 規範,廣泛應用於 Apache Geronimo、JBoss、Eclipse 等專案。其設計哲學為易用性、可擴展性、易嵌入性,適合傳統 Web 應用、靜態內容服務、微服務嵌入等場景。

核心特性詳解

1. 易用性

  • 支援 XML (jetty.xml) 或 API 程式化配置
  • 預設配置滿足大多數需求,零配置即可啟動
  • 嵌入式啟動僅需幾行代碼

2. 可擴展性:Continuation 機制應對高併發長連線

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 大幅提升併發能力。

3. 易嵌入性

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();

部署 Web 應用

  1. 將 WAR 包放入 $JETTY_HOME/webapps
  2. 啟動:java -jar start.jar (預設端口 8080)
  3. 訪問: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

架構啟動流程解析

  1. start.jar 啟動 → 呼叫 Server.main()
  2. 建立 Server 實例 (繼承 HttpServer)
  3. XmlConfiguration 讀取 jetty.xml,透過反射注入組件:HttpListener、HttpContext、HttpHandler、WebApplication
  4. 啟動連接器、執行緒池、處理器鏈

總結

Jetty 以輕量、模組化、非阻塞 I/O 著稱,是嵌入式 Web 容器的首選。Continuation 機制完美解決 Comet/長輪詢的併發瓶頸,配合靈活的配置方式,無論獨立部署或嵌入微服務皆表現優異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved