我应该从 Tomcat 7 升级到 Tomcat8
Should I upgrade to Tomcat8 from Tomcat 7
我的项目目前在 Tomcat 7 上 运行。我应该升级到 Tomcat 8 吗?这样做的利弊是什么? tomcat 8 在性能、内存利用率方面更好吗?
以下是您自己了解何时升级的方法。您可以将它与任何版本的 Tomcat 一起使用,现在或将来,它不仅包括从 Tomcat 7 升级到 Tomcat 8.
大多数更改为Tomcat 主要版本更改时是对servlet的升级,JSP和 JDK 构建特定版本的规范。如果您的应用程序不需要更新的规范并且您使用的版本不是 "archived"(Tomcat 7 在撰写本文时尚未存档),您可能不需要升级。 http://tomcat.apache.org/whichversion.html 介绍了如何制作 select 离子。
在现实世界的情况下,您的选择也可能受到其他因素的影响,例如您的生产发行版中的包管理器是否支持您想要的版本。 或者相反,如果您的发行版只有特定版本的 Tomcat,您可能会升级,因为它可以节省大量时间。
请记住,新功能也意味着可能出现新错误。如果您不使用新 Tomcat 版本的规范,您是否想冒险尝试一下?仅仅因为一个版本具有更高性能的潜力并不意味着它不会在您独特的部署环境中崩溃。如果您负担得起,最好的答案是将两个版本都部署在负载均衡器后面,以防新版本不起作用。
也就是说,软件总是有改进的。我建议您阅读主要版本的各种版本的发行说明 select 以选择最适合您自己情况的版本。例如,https://tomcat.apache.org/tomcat-8.0-doc/RELEASE-NOTES.txt 涵盖 8.0 版本。
选择主要版本后,您通常希望使用它的最新版本,因为错误会随着时间的推移得到修复。
见下文 tomcat 8 的主要新功能。这将有助于决定是否需要迁移。
Tomcat 8.0 版本与 Java EE 7 规范一致。它支持:
- 支持JavaServlet 3.1
- Java 服务器页面 (JSP) 2.3
- Java 统一表达语言 (EL) 3.0
- Java WebSocket 1.0
Tomcat 8 可以使用 Apache Portable Runtime 提供卓越的可伸缩性、性能以及与本机服务器技术更好的集成。
就服务器连接器而言,默认的 HTTP 和 AJP 连接器实现已从 Java 阻塞 IO 实现 (BIO) 切换到 Java 非阻塞 IO 实现 (NIO)
另请注意,Tomcat 8 需要 Java 7 或更高版本才能 运行,因此只有在您的系统中至少使用 Java 7 时才进行迁移项目。
由于您的项目已经 运行 在 tomcat 7 上进行,我建议您再保持现状一段时间。关于 tomcat 8 性能改进的可用数据不多。互联网上报告了一些问题,这对于产品的任何新版本都很常见。
Tomcat 8在并发环境下有更好的表现。
根据我使用 tomcat 产品的经验,升级很可能不会带来任何显着的性能,除非您有一个资源非常密集的应用程序。请在升级前阅读下面 link
重要变化
Java 1.7 ==> 第一个重要变化是 Tomcat 8 现在需要 Java 7 或更高版本才能 运行,因此如果您从早期的 Tomcat 版本迁移,您应该升级到 Java 7
Specification Changes
Servlet 3.1 (JSR 340)
JSP 2.3 (JSR 245 maintenance release)
EL 3.0 (JSR 341)
WebSocket 1.0 (JSR 356)
Specification Changes: EL 3.0
Coercion of nulls to Number, Character or Boolean
- EL 2.2 and earlier (0, 0, false)
- EL 3.0 and later (null, null, null)
System property
– org.apache.el.parser.COERCE_TO_ZERO
– Set to true for EL 2.2 behaviour
Specification Changes: JSP 2.3
Minor changes to reflect the changes in EL 3.0
JSP 2.3
– Supported: GET, POST and HEAD
– Undefined: Everything else
JSP 2.2 and earlier
– Undefined: Most implementations assumed all
Tomcat only permits GET, POST and HEAD
– Protection against verb tampering
Specification Changes: WebSocket 1.0
Tomcat 7 initially shipped with a proprietary WebSocket API
- Tomcat 8 ships with a JSR 356 WebSocket implementation
– Also back-ported to Tomcat 7
- The proprietary WebSocket API is deprecated in Tomcat 7
- Applications using the proprietary API need to migrate
– Relatively simple
– https://svn.apache.org/r1424733
Specification Changes: Servlet 3.1
- Session ID changes by default on authentication
– Prevents session fixation
Tomcat Changes:
Connectors
Default connector has changed from BIO to NIO
– BIO is likely to be dropped for Tomcat 9
- Only BIO option not supported by NIO is irrelevant for NIO
– disableKeepAlivePercentage
- May notice different network / CPU loads
– More established, idle connections
– Marginally higher CPU load
Static Resources
Tomcat 7
– Aliases
– VirtualLoader
– VirtualDirContext
– JAR resources
– External repositories
- All variations on a theme
- Each implemented differently
Tomcat 8
– New WebResources implementation
▪ JAR resources
– External resources for class loader
- Completely new configuration
- Caching attributes removed from Context
Resources now defined by as:
– Pre-resources
– Main resources
– JAR resources
– Post-resources
Resources attributes:
– base
– internalPath
– webappMount
– readOnly
Internal APIs
- Lots of changes
– Manager, Loader and Resources are now Context only
– Mapper moved from Connector to Service
– WebResources
- If you extend a Tomcat class, review the API docs
Database Connection Pools
- Tomcat 7 and earlier based on DBCP 1
- Tomcat 8 based on DBCP 2
- Better performance in concurrent environments
– Comparable to Tomcat’s JDBC pool
- There are some changes to configuration attributes
– Reflect consistency changes made in Commons Pool 2
- maxActive -> maxTotal
- maxWait -> maxWaitMillis
- Validation no longer requires a validation query
– Uses Connection.isValid()
服务器连接器
在服务器连接器方面,默认的 HTTP 和 AJP 连接器实现已从 Java 阻塞 IO 实现 (BIO) 切换到 Java 非阻塞 IO 实现 (NIO)。较旧的 BIO 可能仍会被使用,但使用非阻塞 IO 的 Servlet 3.1 和 WebSocket 1.0 功能将回退到阻塞 IO,这可能会导致意外的应用程序行为。
网络应用资源
Resources 元素是配置的一部分,代表 Web 应用程序可用的所有资源,已被修改。现在它包括 类、JAR 文件、HTML、JSP 和任何其他有助于 Web 应用程序的文件。提供实现以使用目录、JAR 文件和 WAR 作为这些资源的来源,并且可以扩展资源实现以支持以其他形式(例如数据库或版本化存储库)存储的文件。
远程调试
当使用 jpda 选项启动 Tomcat 8 以启用远程调试时,Tomcat 8 默认侦听 localhost:8000。早期版本在 *:8000 上监听。如果需要,可以通过在例如 setenv.[bat|sh].
中设置 JPDA_ADDRESS 环境变量来覆盖此默认值
API
的变化
虽然 Tomcat 8 内部 API 与 Tomcat 7 广泛兼容,但在细节层面有许多变化,并且它们不二进制兼容。与 Tomcat 内部交互的自定义组件的开发人员应查看 Java 文档以了解相关的 API。
需要特别注意的是:
Manager、Loader 和 Resources 已从 Container 移至 Context,因为 Context 是它们唯一使用的地方。
映射器已从连接器移动到服务,因为映射器对于给定服务的所有连接器都是相同的。
正如我们所说,有一个新的 Resources 实现,它将 Aliases、VirtualLoader、VirtualDirContext、JAR 资源和外部存储库合并到一个框架中,而不是为每个功能单独一个框架。
一些 link 提供了有关 tomcat 8 中更改的更多信息,如下所示
http://people.apache.org/~markt/presentations/2013-09-Apache-Tomcat8.pdf
我的项目目前在 Tomcat 7 上 运行。我应该升级到 Tomcat 8 吗?这样做的利弊是什么? tomcat 8 在性能、内存利用率方面更好吗?
以下是您自己了解何时升级的方法。您可以将它与任何版本的 Tomcat 一起使用,现在或将来,它不仅包括从 Tomcat 7 升级到 Tomcat 8.
大多数更改为Tomcat 主要版本更改时是对servlet的升级,JSP和 JDK 构建特定版本的规范。如果您的应用程序不需要更新的规范并且您使用的版本不是 "archived"(Tomcat 7 在撰写本文时尚未存档),您可能不需要升级。 http://tomcat.apache.org/whichversion.html 介绍了如何制作 select 离子。
在现实世界的情况下,您的选择也可能受到其他因素的影响,例如您的生产发行版中的包管理器是否支持您想要的版本。 或者相反,如果您的发行版只有特定版本的 Tomcat,您可能会升级,因为它可以节省大量时间。
请记住,新功能也意味着可能出现新错误。如果您不使用新 Tomcat 版本的规范,您是否想冒险尝试一下?仅仅因为一个版本具有更高性能的潜力并不意味着它不会在您独特的部署环境中崩溃。如果您负担得起,最好的答案是将两个版本都部署在负载均衡器后面,以防新版本不起作用。
也就是说,软件总是有改进的。我建议您阅读主要版本的各种版本的发行说明 select 以选择最适合您自己情况的版本。例如,https://tomcat.apache.org/tomcat-8.0-doc/RELEASE-NOTES.txt 涵盖 8.0 版本。
选择主要版本后,您通常希望使用它的最新版本,因为错误会随着时间的推移得到修复。
见下文 tomcat 8 的主要新功能。这将有助于决定是否需要迁移。
Tomcat 8.0 版本与 Java EE 7 规范一致。它支持:
- 支持JavaServlet 3.1
- Java 服务器页面 (JSP) 2.3
- Java 统一表达语言 (EL) 3.0
- Java WebSocket 1.0
Tomcat 8 可以使用 Apache Portable Runtime 提供卓越的可伸缩性、性能以及与本机服务器技术更好的集成。
就服务器连接器而言,默认的 HTTP 和 AJP 连接器实现已从 Java 阻塞 IO 实现 (BIO) 切换到 Java 非阻塞 IO 实现 (NIO)
另请注意,Tomcat 8 需要 Java 7 或更高版本才能 运行,因此只有在您的系统中至少使用 Java 7 时才进行迁移项目。
由于您的项目已经 运行 在 tomcat 7 上进行,我建议您再保持现状一段时间。关于 tomcat 8 性能改进的可用数据不多。互联网上报告了一些问题,这对于产品的任何新版本都很常见。
Tomcat 8在并发环境下有更好的表现。
根据我使用 tomcat 产品的经验,升级很可能不会带来任何显着的性能,除非您有一个资源非常密集的应用程序。请在升级前阅读下面 link
重要变化
Java 1.7 ==> 第一个重要变化是 Tomcat 8 现在需要 Java 7 或更高版本才能 运行,因此如果您从早期的 Tomcat 版本迁移,您应该升级到 Java 7
Specification Changes
Servlet 3.1 (JSR 340)
JSP 2.3 (JSR 245 maintenance release)
EL 3.0 (JSR 341)
WebSocket 1.0 (JSR 356)
Specification Changes: EL 3.0
Coercion of nulls to Number, Character or Boolean
- EL 2.2 and earlier (0, 0, false)
- EL 3.0 and later (null, null, null)
System property
– org.apache.el.parser.COERCE_TO_ZERO
– Set to true for EL 2.2 behaviour
Specification Changes: JSP 2.3
Minor changes to reflect the changes in EL 3.0
JSP 2.3
– Supported: GET, POST and HEAD
– Undefined: Everything else
JSP 2.2 and earlier
– Undefined: Most implementations assumed all
Tomcat only permits GET, POST and HEAD
– Protection against verb tampering
Specification Changes: WebSocket 1.0
Tomcat 7 initially shipped with a proprietary WebSocket API
- Tomcat 8 ships with a JSR 356 WebSocket implementation
– Also back-ported to Tomcat 7
- The proprietary WebSocket API is deprecated in Tomcat 7
- Applications using the proprietary API need to migrate
– Relatively simple
– https://svn.apache.org/r1424733
Specification Changes: Servlet 3.1
- Session ID changes by default on authentication
– Prevents session fixation
Tomcat Changes:
Connectors
Default connector has changed from BIO to NIO
– BIO is likely to be dropped for Tomcat 9
- Only BIO option not supported by NIO is irrelevant for NIO
– disableKeepAlivePercentage
- May notice different network / CPU loads
– More established, idle connections
– Marginally higher CPU load
Static Resources
Tomcat 7
– Aliases
– VirtualLoader
– VirtualDirContext
– JAR resources
– External repositories
- All variations on a theme
- Each implemented differently
Tomcat 8
– New WebResources implementation
▪ JAR resources
– External resources for class loader
- Completely new configuration
- Caching attributes removed from Context
Resources now defined by as:
– Pre-resources
– Main resources
– JAR resources
– Post-resources
Resources attributes:
– base
– internalPath
– webappMount
– readOnly
Internal APIs
- Lots of changes
– Manager, Loader and Resources are now Context only
– Mapper moved from Connector to Service
– WebResources
- If you extend a Tomcat class, review the API docs
Database Connection Pools
- Tomcat 7 and earlier based on DBCP 1
- Tomcat 8 based on DBCP 2
- Better performance in concurrent environments
– Comparable to Tomcat’s JDBC pool
- There are some changes to configuration attributes
– Reflect consistency changes made in Commons Pool 2
- maxActive -> maxTotal
- maxWait -> maxWaitMillis
- Validation no longer requires a validation query
– Uses Connection.isValid()
服务器连接器
在服务器连接器方面,默认的 HTTP 和 AJP 连接器实现已从 Java 阻塞 IO 实现 (BIO) 切换到 Java 非阻塞 IO 实现 (NIO)。较旧的 BIO 可能仍会被使用,但使用非阻塞 IO 的 Servlet 3.1 和 WebSocket 1.0 功能将回退到阻塞 IO,这可能会导致意外的应用程序行为。
网络应用资源
Resources 元素是配置的一部分,代表 Web 应用程序可用的所有资源,已被修改。现在它包括 类、JAR 文件、HTML、JSP 和任何其他有助于 Web 应用程序的文件。提供实现以使用目录、JAR 文件和 WAR 作为这些资源的来源,并且可以扩展资源实现以支持以其他形式(例如数据库或版本化存储库)存储的文件。
远程调试
当使用 jpda 选项启动 Tomcat 8 以启用远程调试时,Tomcat 8 默认侦听 localhost:8000。早期版本在 *:8000 上监听。如果需要,可以通过在例如 setenv.[bat|sh].
中设置 JPDA_ADDRESS 环境变量来覆盖此默认值API
的变化虽然 Tomcat 8 内部 API 与 Tomcat 7 广泛兼容,但在细节层面有许多变化,并且它们不二进制兼容。与 Tomcat 内部交互的自定义组件的开发人员应查看 Java 文档以了解相关的 API。
需要特别注意的是:
Manager、Loader 和 Resources 已从 Container 移至 Context,因为 Context 是它们唯一使用的地方。
映射器已从连接器移动到服务,因为映射器对于给定服务的所有连接器都是相同的。
正如我们所说,有一个新的 Resources 实现,它将 Aliases、VirtualLoader、VirtualDirContext、JAR 资源和外部存储库合并到一个框架中,而不是为每个功能单独一个框架。
一些 link 提供了有关 tomcat 8 中更改的更多信息,如下所示
http://people.apache.org/~markt/presentations/2013-09-Apache-Tomcat8.pdf