{"id":295,"date":"2026-10-13T10:11:16","date_gmt":"2026-10-13T10:11:16","guid":{"rendered":"http:\/\/www.scmgalaxy.com\/tutorials\/2011\/01\/18\/tomcat-7-finalized\/"},"modified":"2026-10-13T10:11:16","modified_gmt":"2026-10-13T10:11:16","slug":"tomcat-7-finalized","status":"publish","type":"post","link":"https:\/\/www.devopsschool.com\/blog\/tomcat-7-finalized\/","title":{"rendered":"Tomcat 7.0.6 in Context: What the First Stable Tomcat 7 Release Changed"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Apache Tomcat 7.0.6 was announced as the first stable Tomcat 7 release, and it marked a shift toward Servlet 3.0-style Java web application design. This guide is for engineers maintaining legacy Java stacks or planning migrations, and it focuses on what changed in Tomcat 7 and why those changes mattered operationally.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Originally published on 2011-01-18; fully revised and updated.<\/em><\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img decoding=\"async\" src=\"https:\/\/www.devopsschool.com\/blog\/wp-content\/uploads\/2011\/01\/tomcat-7.png\" alt=\"Apache Tomcat 7 release graphic\"\/><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">What was finalized in Tomcat 7.0.6<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">According to the original release announcement, Tomcat 7.0.6 was presented as the first stable release of the Tomcat 7 branch. The post also reiterates that Tomcat is a servlet container (not a full Java EE application server), while implementing functionality aligned with Java EE Web Profile expectations of that period.<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>First stable Tomcat 7 branch release (version 7.0.6).<\/li><li>Support highlighted for Servlet 3.0 and JavaServer Pages 2.2.<\/li><li>Bug-fix release notes referenced for memory leak fixes and other issues.<\/li><li>Source, binaries, and an embeddable packaging option were made available.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Why Servlet 3.0 mattered for Tomcat users<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The biggest practical change discussed in the original post was configuration style. Earlier deployments often concentrated web-app setup in large <code>web.xml<\/code> files. Servlet 3.0 introduced annotation-based options and modularized metadata, reducing reliance on a single central descriptor for many use cases.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Configuration model changes at a glance<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Aspect<\/th><th>Earlier style (pre-Servlet 3.0 emphasis)<\/th><th>Tomcat 7 \/ Servlet 3.0 style<\/th><\/tr><\/thead><tbody><tr><td>Primary configuration location<\/td><td>Heavy use of central <code>web.xml<\/code><\/td><td>Annotation-driven config plus optional descriptor entries<\/td><\/tr><tr><td>Security and initialization metadata<\/td><td>Commonly consolidated in one descriptor<\/td><td>Can be split across annotations and library metadata<\/td><\/tr><tr><td>Third-party library integration<\/td><td>More manual descriptor maintenance<\/td><td>Improved metadata discovery model<\/td><\/tr><tr><td>Request handling model<\/td><td>Primarily synchronous flow<\/td><td>Asynchronous processing support available<\/td><\/tr><tr><td>Cookie handling<\/td><td>Older baseline behavior<\/td><td>Advanced cookie management improvements noted<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Configuration examples: descriptor-centric vs annotation-centric<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, many teams ran a hybrid model during migration: existing <code>web.xml<\/code> definitions remained, while new endpoints moved to annotations over time.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"HTML, XML\" data-shcb-language-slug=\"xml\"><span><code class=\"hljs language-xml language-xml\"><span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">web-app<\/span> <span class=\"hljs-attr\">version<\/span>=<span class=\"hljs-string\">\"2.5\"<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servlet<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servlet-name<\/span>&gt;<\/span>HelloServlet<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servlet-name<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servlet-class<\/span>&gt;<\/span>com.example.HelloServlet<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servlet-class<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servlet<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servlet-mapping<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">servlet-name<\/span>&gt;<\/span>HelloServlet<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servlet-name<\/span>&gt;<\/span>\n    <span class=\"hljs-tag\">&lt;<span class=\"hljs-name\">url-pattern<\/span>&gt;<\/span>\/hello<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">url-pattern<\/span>&gt;<\/span>\n  <span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">servlet-mapping<\/span>&gt;<\/span>\n<span class=\"hljs-tag\">&lt;\/<span class=\"hljs-name\">web-app<\/span>&gt;<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">HTML, XML<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">xml<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css language-java\"><span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">java<\/span><span class=\"hljs-selector-class\">.io<\/span><span class=\"hljs-selector-class\">.IOException<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">javax<\/span><span class=\"hljs-selector-class\">.servlet<\/span><span class=\"hljs-selector-class\">.ServletException<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">javax<\/span><span class=\"hljs-selector-class\">.servlet<\/span><span class=\"hljs-selector-class\">.annotation<\/span><span class=\"hljs-selector-class\">.WebServlet<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">javax<\/span><span class=\"hljs-selector-class\">.servlet<\/span><span class=\"hljs-selector-class\">.http<\/span><span class=\"hljs-selector-class\">.HttpServlet<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">javax<\/span><span class=\"hljs-selector-class\">.servlet<\/span><span class=\"hljs-selector-class\">.http<\/span><span class=\"hljs-selector-class\">.HttpServletRequest<\/span>;\n<span class=\"hljs-selector-tag\">import<\/span> <span class=\"hljs-selector-tag\">javax<\/span><span class=\"hljs-selector-class\">.servlet<\/span><span class=\"hljs-selector-class\">.http<\/span><span class=\"hljs-selector-class\">.HttpServletResponse<\/span>;\n\n<span class=\"hljs-keyword\">@WebServlet<\/span>(\"\/hello\")\npublic class HelloServlet extends HttpServlet {\n    <span class=\"hljs-keyword\">@Override<\/span>\n    protected void doGet(HttpServletRequest req, HttpServletResponse resp)\n            throws ServletException, IOException {\n        <span class=\"hljs-selector-tag\">resp<\/span><span class=\"hljs-selector-class\">.getWriter<\/span>()<span class=\"hljs-selector-class\">.write<\/span>(\"<span class=\"hljs-selector-tag\">Hello<\/span> <span class=\"hljs-selector-tag\">from<\/span> <span class=\"hljs-selector-tag\">annotation-based<\/span> <span class=\"hljs-selector-tag\">mapping<\/span>\");\n    }\n}<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Request processing flow with asynchronous support<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The release commentary linked async threading support to handling more concurrent connections. That is a capability statement, not a universal performance guarantee; actual gains depend on workload and application behavior.<\/p>\n\n\n\n<pre class=\"mermaid\">\nflowchart TD\n    A[Browser request] --> B[Tomcat connector]\n    B --> C[Servlet mapping]\n    C --> D{Async enabled}\n    D -- No --> E[Request thread handles work]\n    D -- Yes --> F[Start async context]\n    F --> G[Background processing]\n    G --> H[Dispatch response]\n    E --> H\n    H --> I[Browser receives response]\n<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Release artifacts and primary references<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The original post pointed readers to three useful references: Servlet 3.0 annotation background, the Tomcat 7 changelog, and Tomcat 7 downloads. For historical verification, use these links directly:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"http:\/\/blogs.sun.com\/swchan\/entry\/servlet_3_0_annotations\" target=\"_blank\" rel=\"noopener\">Servlet 3.0 annotations overview (historical link)<\/a><\/li><li><a href=\"http:\/\/tomcat.apache.org\/tomcat-7.0-doc\/changelog.html\" target=\"_blank\" rel=\"noopener\">Tomcat 7 changelog<\/a><\/li><li><a href=\"http:\/\/tomcat.apache.org\/download-70.cgi\" target=\"_blank\" rel=\"noopener\">Tomcat 7 download page<\/a><\/li><\/ul>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"PHP\" data-shcb-language-slug=\"php\"><span><code class=\"hljs language-php language-bash\"><span class=\"hljs-comment\"># Check local Tomcat runtime version<\/span>\n$CATALINA_HOME\/bin\/catalina.sh version\n\n<span class=\"hljs-comment\"># Inventory descriptor-heavy applications<\/span>\nfind webapps -path <span class=\"hljs-string\">\"*\/WEB-INF\/web.xml\"<\/span>\n\n<span class=\"hljs-comment\"># Spot annotation-based servlet usage in source<\/span>\ngrep -R <span class=\"hljs-string\">\"@WebServlet\\|@WebFilter\\|@WebListener\"<\/span> -n src\/<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">PHP<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">php<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<h2 class=\"wp-block-heading\">Best practices for teams maintaining legacy Tomcat 7 estates<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li>Keep a clear inventory of apps still dependent on large, centralized <code>web.xml<\/code> files.<\/li><li>Use staged migration: move one servlet\/filter\/listener area at a time to annotations.<\/li><li>Validate async behavior under production-like load before enabling broadly.<\/li><li>Cross-check every operational decision against current Apache documentation, especially for security and support lifecycle status.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Historically, this release was an important stabilization point for Tomcat 7 and Servlet 3.0 adoption. Operationally today, the key takeaway is to use that context to guide disciplined modernization and risk reduction.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Apache Tomcat 7.0.6 was announced as the first stable release in the Tomcat 7 branch, bringing Servlet 3.0-era capabilities into mainstream use. This revised guide explains the key changes, their operational impact, and practical steps for teams still touching legacy Tomcat 7 workloads.<\/p>\n","protected":false},"author":1,"featured_media":3904,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_joinchat":[],"footnotes":""},"categories":[2],"tags":[2754,310,2757,2758,399,2759,594,2755,2761,2765,2767,2764,2760,2766,2763,2756,2768,2762],"class_list":["post-295","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorised","tag-apache-tomcat","tag-application","tag-java-servlet","tag-java-servlet-container","tag-server","tag-servlet","tag-tomcat","tag-tomcat-7","tag-tomcat-7-introduction","tag-tomcat-7-latest-version","tag-tomcat-7-launched","tag-tomcat-7-new-version","tag-tomcat-7-overview","tag-tomcat-7-released","tag-tomcat-7-updates","tag-tomcat-server","tag-web","tag-what-is-tomcat-7"],"_links":{"self":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/295","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/comments?post=295"}],"version-history":[{"count":3,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/295\/revisions"}],"predecessor-version":[{"id":79133,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/posts\/295\/revisions\/79133"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media\/3904"}],"wp:attachment":[{"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/media?parent=295"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/categories?post=295"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.devopsschool.com\/blog\/wp-json\/wp\/v2\/tags?post=295"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}