1. 程式人生 > >Jetty9架構解析-Jetty配置及部署(一)

Jetty9架構解析-Jetty配置及部署(一)

2.1. Jetty配置概述

對於Web伺服器來說,可配置性是一項非常重要的指標(從軟體設計層面,我們也可以稱之為架構要素),它在很大程度上也會影響一款伺服器的適用範圍。之所以這麼說,是因為真實的部署場景千變萬化,只有做到靈活可配,我們才可以對其進行深度定製(調整記憶體分配、連結限制、I/O、安全配置等等),從而使伺服器能夠最大程度的滿足我們不同的運維部署要求。

作為輕量級Web伺服器及Servlet容器的代表,Jetty提供了出色的可配置能力,通過本章的講解,你會充分了解其強大、便捷的配置。而且Jetty的配置方案也在架構上為我們應用程式模組化架構提供了一個不錯的範本。

對於Jetty來說,其提供的配置內容與Tomcat類似,主要分為四部分:

  • 伺服器啟動配置,主要是啟動命令引數,如環境變數、JVM引數和載入模組等。
  • 伺服器定義配置,如連結器、Servlet容器。Jetty啟動時,將會根據這些配置檔案例項化伺服器物件。相對於Tomcat對Catalina容器的配置,Jetty已經拆解為多個獨立的模組配置。
  • Web應用配置。與Tomcat類似,Jetty也支援對每個部署應用提供獨立的配置檔案,用於描述其Context路徑、部署包等資訊。
  • Servlet規範配置,即我們熟知的WEB-INF/web.xml。

但是在具體的配置檔案組織形式和載入上,Jetty和Tomcat體現了兩種不同的架構理念。

Tomcat對於每一部分的配置都採用集中式管理,主要配置檔案都包含在conf目錄下。之所以如此,是由於Tomcat採用傳統架構模式,而且這種方案操作更加方便,也便於學習掌握。

而Jetty完全採用模組化架構,這一點也充分體現到了它對配置檔案的管理上。
首先,對於啟動引數,Jetty支援三種方式:

  • 直接在命令列啟動時指定。
  • 在$JETTY_BASE/start.ini中指定。
  • 在$JEETY_BASE/start.d/*.ini檔案中指定。在start.d目錄下,每個檔案對應於一個模組的配置,如http模組相關的引數檔案為http.ini。

其次,Jetty對於伺服器定義的配置(如連結器、容器、執行緒池、會話管理等)則通過$JETTY_BASE/etc/*.xml完成,同樣是分模組管理,如http模組的定義檔案為jetty-http.xml。這些XML檔案是Jetty實現的一套IoC框架,用於例項化和裝配伺服器物件。

注意:如果你對啟動配置和伺服器定義配置的關係還不是很清楚的話,我們可以做一個形象的比較,etc/*.xml之於Jetty就好比Bean配置檔案之於SpringFramework,主要用於維護伺服器物件的建立以及物件之間的注入依賴關係。而啟動配置(*.ini)就好比Properties檔案之於Spring,在Bean建立和注入過程中,可以直接引用Properties資原始檔中配置的屬性。

另外,Jetty支援為每個Web應用新增一個Context配置檔案用於配置其請求根路徑(即Context路徑)、應用檔案路徑、WAR包解壓甚至安全等等,即那些與Web應用部署密切相關但是又不屬於Servlet規範之內的配置資訊。這一點與Tomcat類似,但是管理方式略微不同,例如Tomcat不允許部署目錄既有配置檔案又有同名部署包,而Jetty則允許。也就是說Jetty把Web應用和配置檔案並列放置到了部署目錄下,而Tomcat則是將其放置到Web應用的META-INF目錄下。從這個角度看,Tomcat的方案更便於部署管理(因為維護單個目錄和檔案總要比兩個簡單)。

對於Servlet規範配置,Jetty與Tomcat基本相同。它們都提供了預設的配置(Jetty為$JETTY_HOME/etc/webdefault.xml)以及繼承關係,這樣對於一些常見配置(如JSP處理、MIME type),我們不需要在每個Web應用中都新增一遍。

最後,Jetty對於各種配置提供了一套完善的覆蓋規則,便於我們在預設配置的基礎上新增自己的定製化配置,既做到配置工作最小化,避免重複工作,又提供最大的靈活性。

下一篇文章將重點講述伺服器定義相關的配置