内容

目录

一般

请先阅读一般的迁移指南页面,了解适用于 Apache Tomcat® 版本之间迁移或升级的常见注意事项。

从 10.1.x 迁移到 11.0.x

本节列出了 10.1.x 和 11.0.x 之间所有已知可能导致升级时向后兼容性问题的变更。

需要 Java 17

Apache Tomcat 11.0.x 需要 Java 17 或更高版本。Apache Tomcat 10.1.x 需要 Java 11。

SecurityManager 已在 Java 17 及更高版本中被弃用,并且 Jakarta EE 11 规范项目已删除在 SecurityManager 下运行的支持。因此,Tomcat 11.0.x 已删除配置 SecurityManager 的支持。

规范 API

Apache Tomcat 11.0 支持 Jakarta Servlet 6.1、Jakarta Pages 4.0、Jakarta Expression Language 6.0、Jakarta WebSocket 2.2、Jakarta Authentication 3.1 和 Jakarta Annotations 3.0 规范

Servlet 6.1 API

已澄清使用 null 或空字符串添加和设置 HTTP 头的预期行为。

已澄清 ServletOutputStream.isReady() 的 Javadoc 中“写入操作”的含义。

ServletRequest.getParameter() 和其他参数方法现在已明确规定,如果调用触发参数解析并且在解析过程中遇到错误,则会抛出运行时异常。

对 HTTP/2 服务器推送的支持现在是可选的,并已从 Tomcat 中移除。

澄清 Cookie.setAttribute(String,String)Cookie.getAttribute(String) 对没有值的 Cookie 属性(例如 HttpOnlySecurePartitioned)的行为。

Pages 4.0

3.1 API 中所有标记为已弃用的方法和类已移除。

Expression Language 6.0

5.0 API 中所有标记为已弃用的方法和类已移除。

已移除在 SecurityManager 下运行的支持。

WebSocket 2.2

已移除在 SecurityManager 下运行的支持。

Authentication 3.1

已移除在 SecurityManager 下运行的支持。

Annotations 3.0

无。

内部 API

尽管 Tomcat 11.0 内部 API 与 Tomcat 10.1 大致兼容,但在细节层面有许多更改,并且它们不具备二进制兼容性。与 Tomcat 内部进行交互的自定义组件开发人员应查看相关 API 的 JavaDoc。

特别值得注意的是

  • 10.1.x 中所有标记为已弃用的代码已移除。
  • 字节到字符的转换现在在转换失败时抛出异常。
  • 已移除 Tomcat 自定义 WAR URL 处理程序中使用 ^ 字符分隔 WAR 文件和 WAR 内容的支持。当前的默认分隔符 * 保持不变。
  • Cookie 解析和处理现在按照 RFC 6265 的要求将带引号 Cookie 值中的引号视为值的一部分。

升级 11.0.x

将 Apache Tomcat 实例从 Tomcat 11.0 的一个版本升级到另一个版本时,尤其是在为 $CATALINA_HOME 和 $CATALINA_BASE 使用不同位置时,有必要确保作为升级的一部分,应用配置文件中的任何更改,例如新属性和默认值的更改。为帮助识别这些更改,可以使用下面的表单查看 Tomcat 11.0 不同版本之间配置文件的差异。

Tomcat 11.0.x 值得注意的变更

Tomcat 开发人员的目标是使每个稳定的补丁版本与之前的版本完全向后兼容。偶尔,为了修复错误,有必要破坏向后兼容性。在大多数情况下,这些更改不会被注意到。本节列出了不完全向后兼容且可能在升级时导致中断的更改。

  • 从 11.0.0-M5 版本开始,连接器属性 maxParameterCount 的默认值已从 10,000 减少到 1,000。

Tomcat 11.0.x 配置文件差异

从下面的框中选择配置文件、旧版本和新版本,然后点击“查看差异”以查看差异。差异将在新标签页/窗口中显示。

注意:如果没有差异,您将看到一个错误页面。

您也可以在工作副本中像这样使用 Git 命令

git diff 11.0.0-M1 11.0.0-M3 -- conf/