Latest Stable
6.1.0
Released 24 May 2024
(2 years ago)
Latest Development
6.2.0-M2
Released 18 May 2026
(14 days ago)
Software
Servlet/Jakarta
IntroductionJakarta Servlet (formerly Java Servlet) is a Jakarta EE specification that defines a standard way to create Java classes that handle HTTP requests and responses on the server side. It forms the foundation of Java web development, enabling dynamic content generation, session management, and request processing. Servlets power many Java web frameworks and enterprise applications.
VendorEclipse Foundation
Written inJava
PlatformJakarta EE
Repositoryhttps://github.com/jakartaee/servlet
Websitehttps://jakarta.ee/specifications/servlet/
LicenseEclipse Public License 2.0
LATEST RELEASES:
6.2.0-M2 18 May 2026 (14 days ago)
6.2.0-M1 15 Oct 2025 (7 months ago)
6.1.0 24 May 2024 (2 years ago)
6.1.0-M2 27 Feb 2024 (2 years ago)
6.1.0-M1 16 Nov 2023 (2 years ago)

All Releases

VersionInitial releaseLatest releaseNamespace changePlatform
6.2-6.2.0-M2
18 May 2026
(14 days ago)
Jakarta EE 12
6.16.1.0
24 May 2024
(2 years ago)
6.1.0
24 May 2024
(2 years ago)
Jakarta EE 11
6.06.0.0
12 May 2022
(4 years ago)
6.0.0
12 May 2022
(4 years ago)
Jakarta EE 10
5.05.0.0
07 Sep 2020
(5 years ago)
5.0.0
07 Sep 2020
(5 years ago)
jakarta.servletJakarta EE 9
4.04.0.0
15 Aug 2017
(8 years ago)
4.0.4
18 Jun 2020
(5 years ago)
4.0.3-4.0.x: Jakarta EE 8
4.0.0-4.0.2: Java EE 8
3.13.1.0
25 Apr 2013
(13 years ago)
3.1.0
25 Apr 2013
(13 years ago)
Java EE 7
3.03.0.1
12 Jul 2011
(14 years ago)
3.0.1
12 Jul 2011
(14 years ago)
Java EE 6, Java SE 6
2.52.5
17 Jul 2006
(19 years ago)
2.5
17 Jul 2006
(19 years ago)
Java EE 5, Java SE 5
2.42.4
08 Nov 2005
(20 years ago)
2.4
08 Nov 2005
(20 years ago)
J2EE 1.4, J2SE 1.3
2.32.3
08 Nov 2005
(20 years ago)
2.3
08 Nov 2005
(20 years ago)
J2EE 1.3, J2SE 1.2
2.22.2
08 Nov 2005
(20 years ago)
2.2
08 Nov 2005
(20 years ago)
javax.servletJ2EE 1.2, J2SE 1.2

How Is Jakarta Servlet Support Determined?

Jakarta Servlet does not follow a standalone support lifecycle. Instead, its support is tied directly to the Jakarta EE platform version it ships with -- when the platform is actively maintained by the Eclipse Foundation and its vendor community, the Servlet specification it includes is considered supported.

In practice, this means your Servlet version's longevity depends on two things: which Jakarta EE platform it belongs to, and whether your application server vendor (Tomcat, Jetty, WildFly, GlassFish, etc.) continues to ship security patches for that platform generation.

Unlike runtimes such as Java SE or Node.js, the Eclipse Foundation does not publish EOL dates for individual Servlet specification versions. Support ends when the ecosystem around it -- your app server, your Jakarta EE implementation, and your Java SE version -- stops receiving updates.

For authoritative guidance, refer to the Jakarta Servlet specification page and your application server vendor's own support roadmap.

What Are the Real Risks of Running an Outdated Servlet Version?

The most immediate risk with older Servlet versions is not a missing patch from the Eclipse Foundation -- it is dependency incompatibility. Modern frameworks like Spring Boot, Jakarta Faces, and CDI tie their minimum requirements to specific Servlet API versions. If your Servlet version lags behind, you are locked out of framework upgrades.

The namespace migration is the sharpest risk in the Servlet ecosystem. Code written against javax.servlet (Servlet 4.0 and below) is not binary-compatible with containers expecting jakarta.servlet (Servlet 5.0 and above). Mixing both in the same deployment will cause ClassNotFoundException or silent runtime failures that are notoriously hard to debug.

Key risk areas to watch

Risk Description
Namespace incompatibility Libraries compiled against jakarta.servlet will not load in a javax.servlet container, and vice versa
App server EOL Tomcat, Jetty, and WildFly each publish their own support windows -- once your app server version reaches EOL, your Servlet runtime stops getting security fixes
Java SE version dependency Newer Servlet specs require a minimum Java SE version; sticking to old Servlet versions often forces you to stay on older Java as well
Framework compatibility Spring Boot 3.x, Jakarta EE 10+ tooling, and modern CDI containers require Servlet 5.0 or above

What Actually Happens When a Servlet Specification Becomes Obsolete?

The Eclipse Foundation does not "end" a Servlet specification the way vendors retire a software product. A spec version simply stops evolving -- no new features, no errata, no updates. What changes over time is the world around it: app servers drop support, Java SE versions that the spec requires reach EOL, and library authors stop testing against old containers.

The practical turning point for most teams happens at the app server level. Once Apache Tomcat or Eclipse Jetty stops backporting security patches to the version that implements your Servlet spec, you are effectively running unsupported infrastructure regardless of what the specification document says.

The javax.servlet to jakarta.servlet namespace break -- introduced in Servlet 5.0 -- is a concrete example of how obsolescence plays out in this ecosystem. Applications that never migrated cannot use any library that has dropped javax.servlet support, which now includes the majority of the Jakarta EE ecosystem. That is a harder wall than a typical EOL date.

Most teams find that the migration trigger is not end-of-life notices from Eclipse, but rather a dependency upgrade that demands a newer Servlet API. Plan your upgrade path around your application server vendor's support schedule and your framework requirements, not a centralized EOL calendar.

How Do You Check Which Servlet Version Your Application Is Using?

There are several ways to determine your Servlet API version, depending on whether you are looking at your build config, your running container, or the bytecode itself.

Check via Maven dependency

If your project uses Maven, look for the Servlet API dependency in your pom.xml:

<!-- Jakarta namespace (Servlet 5.0+) -->
<dependency>
  <groupId>jakarta.servlet</groupId>
  <artifactId>jakarta.servlet-api</artifactId>
</dependency>

<!-- Legacy javax namespace (Servlet 4.0 and below) -->
<dependency>
  <groupId>javax.servlet</groupId>
  <artifactId>javax.servlet-api</artifactId>
</dependency>

The groupId alone tells you which namespace generation you are on. You can also run:

mvn dependency:tree | grep servlet

Check via Gradle

./gradlew dependencies --configuration compileClasspath | grep servlet

Check at runtime inside a Servlet

From within a running servlet, you can query the container's Servlet spec version programmatically:

int major = getServletContext().getMajorVersion();
int minor = getServletContext().getMinorVersion();
// e.g., major=6, minor=1 means Servlet 6.1

Check via Apache Tomcat

If you are using Apache Tomcat as your container, the Servlet spec version is tied to your Tomcat version. You can check it from the command line:

catalina.sh version

The output will include a line such as Servlet specification version: 6.0.

Note that the version reported by the container is the spec version the container implements, which may differ from the API version your application was compiled against. Both should be checked.

FAQ

Q1: Does Jakarta Servlet have an official end-of-life date?
No. The Eclipse Foundation does not publish EOL dates for individual Servlet specification versions. A specification version is considered active as long as it is part of a supported Jakarta EE platform and implemented by actively maintained application servers. In practice, support timelines are determined by your app server vendor, not by the specification body.

Q2: Can I use a library compiled against jakarta.servlet in a javax.servlet container?
No -- the two namespaces are binary-incompatible. If you load a class compiled against jakarta.servlet.http.HttpServletRequest inside a container that only knows javax.servlet.http.HttpServletRequest, you will get a ClassNotFoundException or NoClassDefFoundError at runtime. Migration requires recompiling or using bytecode transformation tools such as the Eclipse Transformer.

Q3: How does the Servlet version relate to the Jakarta EE version?
Each Jakarta EE platform release bundles a specific Servlet specification version. The two are versioned independently but always released together as part of the platform. If you target a specific Jakarta EE platform -- for example, to use a certified app server -- you are implicitly targeting the Servlet version that platform includes. The release table above shows which Servlet version maps to which platform.

Q4: Does Spring Boot 3 require a specific Servlet version?
Yes. Spring Boot 3.x moved to the jakarta.servlet namespace and requires Servlet 5.0 or above. If your application still uses javax.servlet imports, you cannot upgrade to Spring Boot 3 without first migrating your Servlet dependencies and updating all affected class imports. Spring Boot 2.x remains on javax.servlet for compatibility with the older generation.

Q5: Which Servlet version does Apache Tomcat 10 implement?
Apache Tomcat 10.1 implements Servlet 6.0 and uses the jakarta.servlet namespace. Tomcat 9.x implements Servlet 4.0 and uses the legacy javax.servlet namespace. Applications migrating from Tomcat 9 to Tomcat 10 must update their namespace imports -- dropping the application into a Tomcat 10 container without code changes will result in classloading failures. Refer to the official Tomcat migration guide for step-by-step instructions.