內容
目錄
一般
請先閱讀一般 遷移指南頁面,以了解 Apache Tomcat® 版本之間遷移或升級的常見考量因素。
從 8.0.x 遷移到 8.5.x
本節列出 8.0.x 和 8.5.x 之間所有已知變更,這些變更可能會在升級時造成向後相容性問題。
已移除 BIO 連接器
HTTP 和 AJP 的 Java 阻擋式 I/O 實作 (BIO) 已移除。建議使用者改用 Java 非阻擋式 I/O 實作 (NIO)。從 Tomcat 8.5.17 開始,如果明確設定 BIO 連接器,Tomcat 就不會讓連接器無法啟動,而是自動將連接器切換為使用 NIO 實作,並記錄警告訊息。
已移除 Comet 支援
已移除 Comet 支援,沒有直接替換。建議使用 Comet 的應用程式改用 WebSocket。
已新增 HTTP/2 支援
HTTP/2 支援 h2(透過 TLS,經由 ALPN 協商)和 h2c(純文字,經由 HTTP/1.1 升級協商)。HTTP/2 需要明確為連接器啟用。若要啟用,請插入
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
已新增 TLS 虛擬主機和多重憑證支援
Tomcat 8.5 支援單一連接器的多個 TLS 虛擬主機,每個虛擬主機都能夠支援多個憑證。虛擬主機定義會嵌套在連接器元素內,如果指定多個虛擬主機,則使用連接器上的 defaultSSLHostConfigName 屬性指定預設值。憑證定義會嵌套在虛擬主機內。
以下範例顯示如何使用此功能為多個 TLS 虛擬主機設定單一 APR/原生連接器,每個主機都同時擁有 RSA 和 EC 憑證。
<Connector port="8443"
protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150"
SSLEnabled="true"
defaultSSLHostConfigName="openoffice.apache.org" >
<SSLHostConfig hostName="openoffice.apache.org" >
<Certificate certificateKeyFile="conf/openoffice.apache.org-rsa-key.pem"
certificateFile="conf/openoffice.apache.org-rsa-cert.pem"
type="RSA" />
<Certificate certificateKeyFile="conf/openoffice.apache.org-ec-key.pem"
certificateFile="conf/openoffice.apache.org-ec-cert.pem"
type="EC" />
</SSLHostConfig>
<SSLHostConfig hostName="www.openoffice.org" >
<Certificate certificateKeyFile="conf/www.openoffice.org-rsa-key.pem"
certificateFile="conf/www.openoffice.org-rsa-cert.pem"
type="RSA" />
<Certificate certificateKeyFile="conf/www.openoffice.org-ec-key.pem"
certificateFile="conf/www.openoffice.org-ec-cert.pem"
type="EC" />
</SSLHostConfig>
</Connector>
內部 API
儘管 Tomcat 8.5 內部 API 與 Tomcat 8.0 廣泛相容,但細節層級已經有許多變更,而且它們並不相容於二進位檔。與 Tomcat 內部互動的客製化元件開發人員應檢閱相關 API 的 JavaDoc。
特別要注意的是
- 已在所有連接器中進行重大的重構,以減少重複的程式碼並調整各實作之間的行為。
- 已從
Realm
中移除已棄用的digest
屬性。現在必須透過CredentialHandler
設定此屬性。 - 已變更
AuthenticatorBase
實作,以在子類別上呼叫doAuthenticate()
,而不是authenticate()
。
已移除 JSR-77 實作
JSR-77 實作不完整,且已在 8.5.x 中移除。特別是,已移除公開給 JMX 的下列方法。
StandardContext.getServlets()
StandardContext.isStateManageable()
StandardContext.getDeploymentDescriptor()
StandardWrapper.isStateManageable()
叢集
MessageDispatch15Interceptor
已用於將 Java 5 功能新增至 MessageDispatchInterceptor。MessageDispatch15Interceptor
已在 Tomcat 8.5.x 中移除,方法是將 Java 5 功能合併至 MessageDispatchInterceptor
。
已移除 InstanceListener
已在 8.5.x 中移除 InstanceListener 的支援。特別是,已移除下列類別。
org.apache.catalina.InstanceListener
org.apache.catalina.InstanceEvent
org.apache.catalina.util.InstanceSupport
SessionManager
已在 8.5 中完全移除下列階段管理員屬性。
distributable
maxInactiveInterval
sessionIdLength
替換如下
distributable
屬性已在 8.0 中棄用,且指定的數值會被忽略。這應透過 Context 設定。數值會根據/WEB-INF/web.xml
中<distributable />
元素是否存在而繼承。maxInactiveInterval
屬性已在 8.0 中棄用。如果指定數值,會發出警告記錄。這應透過 Context 設定。數值會根據/WEB-INF/web.xml
中<session-timeout>
元素的數值而繼承。Manager
的sessionIdLength
屬性已由SessionIdGenerator
的sessionIdLength
屬性取代。
Cookie
預設的 CookieProcessor
現在是 Rfc6265CookieProcessor
。CookieProcessor
可針對每個 Context
設定,且 LegacyCookieProcessor
可用於取得 8.0.x 行為。
Web 應用程式
Manager 和 HostManager 網路應用程式預設會設定 RemoteAddrValve
,將這些應用程式的存取限制為來自本機端連線。
內容設定
clearReferencesStatic
屬性已在 8.5.x 中移除。
升級 8.5.x
當將 Apache Tomcat 實例從 Tomcat 8 的一個版本升級到另一個版本時,特別是在 $CATALINA_HOME 和 $CATALINA_BASE 使用不同的位置時,必須確保組態檔中的任何變更(例如新的屬性和預設值的變更)會套用為升級的一部分。為了協助辨識這些變更,可以使用下方的表單檢視 Tomcat 8 不同版本中組態檔的差異。
Tomcat 8.5.x 顯著變更
Tomcat 開發人員的目標是讓每個修補程式版本完全向下相容於前一個版本。偶爾,為了修正錯誤,必須中斷向下相容性。在大部分情況下,這些變更不會被注意到。本節列出未完全向下相容且在升級時可能會造成中斷的變更。
-
在 8.5.88 之後,Connector 屬性
maxParameterCount
的預設值已從 10,000 減少到 1,000。 在 8.5.51 之後,AJP Connector 的預設監聽位址已變更為迴圈位址,而非所有位址。
參考:AJP Connector。
在 8.5.51 之後,AJP Connector 的 requiredSecret 屬性已棄用,並由 secret 屬性取代。
參考:AJP Connector。
在 8.5.51 之後,secretRequired 屬性已新增至 AJP Connector。如果設定為預設值
true
,除非已指定 secret,否則 AJP Connector 將不會啟動。參考:AJP Connector。
在 8.5.51 之後,allowedRequestAttributesPattern 屬性已新增至 AJP Connector。具有無法辨識屬性的要求現在會以 403 遭到封鎖。
參考:AJP Connector。
在 8.5.64 之後,
HostConfig.check(String)
方法的語意已變更。方法會在呼叫方法之前標記應用程式為已服務,而不是在檢查資源之前標記應用程式為已服務,然後在檢查完成後取消標記應用程式為已服務。如果在呼叫方法時應用程式標記為已服務,則方法將為 NO-OP。在 8.5.70 之後,由於機密傳輸保證,Tomcat 不再在加入「Cache-Control: private」時加入「Expires」HTTP 回應標頭。對於未明確設定其自己的標頭但依賴 Tomcat 之前行為的應用程式,這可能會導致快取行為的變更。如果您想停用快取,您需要在應用程式中明確設定它。請參閱 BZ 65513 以取得更多資訊。
在 8.5.71 之後,由於現在使用
java.nio.file.Files
的 Commons FileUpload 的更新分支,使用多部分上傳的應用程式需要確保 JVM 設定有足夠的直接記憶體來儲存所有進行中的多部分上傳。在 8.5.74 之後,系統屬性
org.apache.juli.AsyncLoggerPollInterval
不再使用。在 8.5.75 之後,已移除 JmxRemoteLifecycleListener。請注意,現代 JVM 不再需要 JMXLifecycleListener 提供的功能。
在 8.5.75 之後,
<Connector>
上的maxSavePostSize
屬性也適用於執行 HTTP/1.1 升級時存在的請求主體。在 8.5.76 之後,Tomcat 發行版本使用 Java 11 以「Java 7 模式」執行。這應該會產生完全相容的版本,可以在 Java 7 或更新版本下運作。您遇到的任何問題,例如類別檔案版本錯誤、方法不符錯誤或 JVM 驗證器,都應立即回報給 Tomcat 團隊。
Tomcat 8.5.x 設定檔差異
從下方的方塊中選擇組態檔案、舊版本和新版本,然後按一下「檢視差異」以查看差異。差異將顯示在新分頁/視窗中。
注意:如果沒有差異,您將會看到錯誤頁面。
您也可以在工作副本中使用類似於以下的 Git 命令
git diff 8.5.0 8.5.20 -- conf/