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.
Originally published on 2011-01-18; fully revised and updated.

What was finalized in Tomcat 7.0.6
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.
- First stable Tomcat 7 branch release (version 7.0.6).
- Support highlighted for Servlet 3.0 and JavaServer Pages 2.2.
- Bug-fix release notes referenced for memory leak fixes and other issues.
- Source, binaries, and an embeddable packaging option were made available.
Why Servlet 3.0 mattered for Tomcat users
The biggest practical change discussed in the original post was configuration style. Earlier deployments often concentrated web-app setup in large web.xml files. Servlet 3.0 introduced annotation-based options and modularized metadata, reducing reliance on a single central descriptor for many use cases.
Configuration model changes at a glance
| Aspect | Earlier style (pre-Servlet 3.0 emphasis) | Tomcat 7 / Servlet 3.0 style |
|---|---|---|
| Primary configuration location | Heavy use of central web.xml | Annotation-driven config plus optional descriptor entries |
| Security and initialization metadata | Commonly consolidated in one descriptor | Can be split across annotations and library metadata |
| Third-party library integration | More manual descriptor maintenance | Improved metadata discovery model |
| Request handling model | Primarily synchronous flow | Asynchronous processing support available |
| Cookie handling | Older baseline behavior | Advanced cookie management improvements noted |
Configuration examples: descriptor-centric vs annotation-centric
In practice, many teams ran a hybrid model during migration: existing web.xml definitions remained, while new endpoints moved to annotations over time.
<web-app version="2.5">
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>com.example.HelloServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloServlet</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
</web-app>Code language: HTML, XML (xml)
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
resp.getWriter().write("Hello from annotation-based mapping");
}
}Code language: CSS (css)
Request processing flow with asynchronous support
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.
flowchart TD
A[Browser request] --> B[Tomcat connector]
B --> C[Servlet mapping]
C --> D{Async enabled}
D -- No --> E[Request thread handles work]
D -- Yes --> F[Start async context]
F --> G[Background processing]
G --> H[Dispatch response]
E --> H
H --> I[Browser receives response]
Release artifacts and primary references
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:
# Check local Tomcat runtime version
$CATALINA_HOME/bin/catalina.sh version
# Inventory descriptor-heavy applications
find webapps -path "*/WEB-INF/web.xml"
# Spot annotation-based servlet usage in source
grep -R "@WebServlet\|@WebFilter\|@WebListener" -n src/Code language: PHP (php)
Best practices for teams maintaining legacy Tomcat 7 estates
- Keep a clear inventory of apps still dependent on large, centralized
web.xmlfiles. - Use staged migration: move one servlet/filter/listener area at a time to annotations.
- Validate async behavior under production-like load before enabling broadly.
- Cross-check every operational decision against current Apache documentation, especially for security and support lifecycle status.
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.
I’m Rajesh Kumar, a DevOps, SRE, DevSecOps, Cloud, and Platform Engineering expert passionate about sharing practical knowledge, real-world experiences, and industry best practices. I have worked at Cotocus and regularly write about technology, travel, investing, health, product reviews, and digital marketing through my various platforms.
I publish technical articles at DevOps School, travel stories at Holiday Landmark, stock market insights at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at TrueReviewNow, and SEO and digital marketing strategies at Wizbrand.
Find Trusted Cardiac Hospitals
Compare heart hospitals by city and services — all in one place.
Explore Hospitals