內容

目錄

一般

請先閱讀一般 遷移指南頁面,以了解 Apache Tomcat® 版本之間遷移或升級時應考量的常見事項。

從 9.0.x 遷移至 10.0.x

本節列出 9.0.x 和 10.0.x 之間所有已知變更,這些變更可能會在升級時造成向後相容性問題。

需要 Java 8

Apache Tomcat 10.0.x 需要 Java 8 或更新版本。這與 Tomcat 9.0.x 相同。

規格 API

Apache Tomcat 10 支援 Jakarta Servlet 5.0、Jakarta Server Pages 3.0、Jakarta Expression Language 4.0、JakartaWebSocket 2.0 和 Jakarta Authentication 2.0 規格

Tomcat 9.0.x 和 Tomcat 10.0.x 之間有一個重大的變更。規格 API 所使用的 Java 套件已從 javax... 變更為 jakarta...。必須針對新的 API 重新編譯 Web 應用程式。

Tomcat 可在部署時使用 Apache Tomcat Jakarta EE 遷移工具將現有的 Web 應用程式從 Java EE 8 轉換至 Jakarta EE 9。若要使用此功能,應將 Web 應用程式置於 Host legacyAppBase 資料夾(預設名稱為 webapps-javaee),且它們會轉換為 Host appBase 資料夾(預設名稱為 webapps)中的等效 Jakarta EE Web 應用程式。

或者,Apache Tomcat Jakarta EE 遷移工具或任何類似的轉換工具都可以在事先使用,以受益於更快的部署時間和更精確的轉換組態選項。

Servlet 5.0 API

Java 套件已從 javax.servlet 變更為 jakarta.servlet

伺服器頁面 3.0

Java 套件已從 javax.servlet.jsp 變更為 jakarta.servlet.jsp

表達式語言 4.0

Java 套件已從 javax.el 變更為 jakarta.el

WebSocket 2.0

Java 套件已從 javax.websocket 變更為 jakarta.websocket

驗證 4.0

Java 套件已從 javax.security.auth.message 變更為 jakarta.security.auth.message

內部 API

儘管 Tomcat 10 內部 API 與 Tomcat 9 廣泛相容,但已在詳細層級進行許多變更,且它們並非二進位相容。與 Tomcat 內部元件互動的客製化元件開發人員應檢閱相關 API 的 JavaDoc。

特別要注意的是

  • GenericPrincipal.getPassword() 已移除。

web.xml 預設值

conf/web.xml 將預設要求和回應字元編碼設定為 UTF-8。

工作階段管理

預設已停用重新啟動時的會話持續性。它可以在 conf/context.xml 或每個 Web 應用程式中重新啟用。

HTTP/2

已從 HTTP/2 連接器移除 HTTP/1.1 和 HTTP/2 連接器之間重複的組態設定,現在它會從相關的 HTTP/1.1 連接器繼承這些設定。

記錄

記錄實作現在只會在有東西要寫入記錄檔時才建立記錄檔。

存取記錄模式

為了與 httpd 對齊,%D 模式現在會以微秒而非毫秒記錄要求時間。若要以毫秒記錄要求時間,請使用 %{ms}T

升級 10.0.x

當將 Apache Tomcat 執行個體從一個 Tomcat 10 版本升級到另一個版本時,特別是在為 $CATALINA_HOME 和 $CATALINA_BASE 使用不同的位置時,必須確保將組態檔中的任何變更(例如新屬性和預設值的變更)套用為升級的一部分。為了協助識別這些變更,可以使用下方的表單來檢視 Tomcat 10 不同版本中的組態檔差異。

Tomcat 10.0.x 顯著變更

Tomcat 開發人員的目標是讓每個修補程式版本與前一個版本完全向下相容。偶爾,為了修正錯誤,有必要中斷向下相容性。在多數情況下,這些變更不會被注意到。本節列出未完全向下相容且可能會在升級時造成中斷的變更。

  • 在 10.0.3 之後,HostConfig.check(String) 方法的語意已變更。該方法會在呼叫方法之前將應用程式標記為已服務,而不是在檢查資源之前將應用程式標記為已服務,然後在檢查完成後將應用程式取消標記為已服務。如果在呼叫方法時將應用程式標記為已服務,則該方法將為 NO-OP。

  • 在 10.0.9 之後,由於機密傳輸保證,Tomcat 在加入「Cache-Control: private」時不再加入「Expires」HTTP 回應標頭。這可能會導致未明確設定自己的標頭但依賴 Tomcat 之前行為的應用程式的快取行為發生變更。如果您想要停用快取,您需要在應用程式中明確設定。請參閱 BZ 65513 以取得更多資訊。

  • 在 10.0.11 之後,由於已更新的 Commons FileUpload 分支現在使用 java.nio.file.Files,使用多部分上傳的應用程式需要確保 JVM 設定有足夠的直接記憶體來儲存所有進行中的多部分上傳。

  • 在 10.0.14 之後,系統屬性 org.apache.juli.AsyncLoggerPollInterval 不再使用。

Tomcat 10.0.x 組態檔差異

從下方的方塊中選取組態檔、舊版本和新版本,然後按一下「檢視差異」以查看差異。差異將顯示在新的標籤/視窗中。

注意:如果沒有差異,您將會看到一個錯誤頁面。

您也可以在工作副本中使用類似以下的 Git 指令

git diff 10.0.0 10.0.12 -- conf/