Feedback Form

Introduction: Evolution from javax.servlet.http to jakarta.servlet.http

Evolution from javax.servlet.http to jakarta.servlet.http

अगर आप Java Web Development में काम करते हैं या Servlet-based frameworks जैसे Spring, JSP या JSF से जुड़े हैं, तो आपने ज़रूर देखा होगा कि हाल के versions में javax.servlet की जगह jakarta.servlet आ गया है। ये बदलाव सिर्फ नाम का नहीं, बल्कि पूरे Java EE ecosystem के लिए एक बहुत बड़ा structural परिवर्तन है। चलिए इसे step by step समझते हैं — simple भाषा में, exam और interview दोनों point of view से।

Evolution of Servlet Package

शुरुआत में Java EE (Java Enterprise Edition) का पूरा ecosystem Oracle के control में था। उस समय web-related classes javax.servlet package के अंदर आती थीं। लेकिन जब Oracle ने Java EE को Eclipse Foundation को transfer किया, तो licensing issues और trademark reasons के चलते namespace को बदलना पड़ा।

Java EE से Jakarta EE तक का सफर

  • शुरुआत में Servlet API javax.servlet namespace में था।
  • Java EE 8 तक सबकुछ javax पैकेज में चलता रहा।
  • 2019 में Oracle ने Java EE को Eclipse Foundation को handover किया।
  • Trademark issue के कारण javax नाम का उपयोग आगे नहीं किया जा सका।
  • इसलिए नया namespace jakarta introduce किया गया — और इस तरह बना jakarta.servlet

Why the Change Happened?

अब सवाल आता है — आखिर Oracle ने namespace बदलने की ज़रूरत क्यों महसूस की? इसका जवाब licensing और branding से जुड़ा है। Oracle के पास javax का trademark था और Eclipse Foundation के पास उसका control नहीं था। ताकि आगे maintenance और improvements में कोई legal issue न हो, namespace को jakarta में migrate करना पड़ा।

Key Reasons

  • Trademark Restriction: Oracle ने ‘javax’ को trademark के रूप में सुरक्षित रखा था।
  • Open Source Control: Eclipse Foundation को Java EE को आगे बढ़ाने की पूरी स्वतंत्रता चाहिए थी।
  • Future Flexibility: New features को add करने के लिए नया namespace जरूरी था।

Difference Between javax.servlet and jakarta.servlet

चलिए अब देखते हैं कि दोनों packages में actual difference क्या है। ध्यान रहे — functionality लगभग वही है, बस namespace बदला है। लेकिन migration के समय ये change critical बन जाता है।

Feature javax.servlet jakarta.servlet
Package Name javax.servlet.http jakarta.servlet.http
API Version Up to Servlet 4.0 Servlet 5.0 and above
Java EE Version Java EE 8 Jakarta EE 9+
Compatibility Older Application Servers (Tomcat 8, 9) Newer Servers (Tomcat 10, Jetty 11, GlassFish 6)
Migration Requirement Not Required Mandatory for New Deployment

Impact on Developers

ये change developers के लिए थोड़ा challenging रहा क्योंकि अब हर class, filter, listener, servlet mapping आदि का package बदल गया। इसका मतलब है कि आपको अपने existing projects में सारे imports बदलने होंगे।

Example Code Comparison

आइए एक simple example से समझते हैं कि Servlet class में क्या फर्क आता है:

Old (javax.servlet.http)

import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse res) {
    res.getWriter().println("Hello from javax.servlet!");
  }
}

New (jakarta.servlet.http)

import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class HelloServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse res) {
    res.getWriter().println("Hello from jakarta.servlet!");
  }
}

आप देख सकते हैं — बस javax की जगह jakarta आ गया, बाकी logic वही रहा। लेकिन ये छोटा change भी पूरे project में apply करना पड़ता है, खासकर बड़े enterprise applications में।

Migration Process (How to Migrate)

अब सबसे बड़ा सवाल — अगर आपका project अभी भी javax.servlet पर है तो आपको क्या करना चाहिए? चलिए step by step process देखते हैं:

1. Identify Current Version

सबसे पहले ये check करें कि आपका project किस Servlet या Application Server version पर चल रहा है। अगर आप Tomcat 9 या उससे नीचे इस्तेमाल कर रहे हैं तो वो अभी भी javax.servlet पर है।

2. Upgrade Application Server

  • Tomcat 10 या Jetty 11 जैसे servers अब jakarta.servlet का support देते हैं।
  • Upgrade के बाद आपको package migration करनी पड़ेगी।

3. Update Imports

सभी Java files में javax.servlet को jakarta.servlet से replace करें। ये काम manually भी कर सकते हैं या किसी tool की मदद से।

4. Update Deployment Descriptors

अगर आप web.xml इस्तेमाल कर रहे हैं, तो उसमें भी कुछ references बदलने पड़ सकते हैं। उदाहरण:

<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee" version="5.0">
  <servlet>
    <servlet-name>HelloServlet</servlet-name>
    <servlet-class>com.example.HelloServlet</servlet-class>
  </servlet>
</web-app>

5. Test and Deploy

सभी changes के बाद application को recompile करें और Tomcat 10 जैसे updated server पर deploy करें।

Advantages of jakarta.servlet

अब जानते हैं कि jakarta.servlet में क्या improvements और benefits हैं:

  • Modernization: पूरी Java EE ecosystem को modern standard (Jakarta EE) में shift किया गया।
  • Open Development: अब Jakarta EE community-driven project है, जिससे नए updates तेजी से आते हैं।
  • Cloud-Native Support: Jakarta EE को microservices और cloud-based architectures के साथ compatible बनाया गया।
  • Future Proof: jakarta namespace future versions के लिए scalable है।

Effect on Frameworks

Servlet package change का असर सिर्फ servlets तक सीमित नहीं है। बहुत सारे frameworks जैसे Spring, JSF, JSP, Hibernate आदि पर भी इसका indirect effect पड़ा।

Spring Framework

Spring Framework 6 और Spring Boot 3 से jakarta.servlet officially supported हो गया है। इसका मतलब है कि अब आपको अपने imports jakarta namespace में रखने होंगे।

Other Frameworks

  • JSF (Jakarta Faces): javax.faces → jakarta.faces
  • JPA (Jakarta Persistence): javax.persistence → jakarta.persistence
  • JAX-RS (Jakarta RESTful Services): javax.ws.rs → jakarta.ws.rs

Real World Example

मान लीजिए आपके पास एक old Spring Boot project है जो Tomcat 9 और Java EE 8 पर चलता है। जब आप उसे Spring Boot 3 में upgrade करते हैं, तो application अचानक break हो जाता है क्योंकि internal libraries jakarta namespace expect करती हैं।

ऐसे में आप Maven dependency और import statements को update करके migration कर सकते हैं।

<dependency>
  <groupId>jakarta.servlet</groupId>
  <artifactId>jakarta.servlet-api</artifactId>
  <version>5.0.0</version>
</dependency>

Version Comparison Chart

Servlet API Version Namespace Released With Compatible Tomcat
2.5 javax.servlet Java EE 5 Tomcat 6
3.0 javax.servlet Java EE 6 Tomcat 7
4.0 javax.servlet Java EE 8 Tomcat 9
5.0 jakarta.servlet Jakarta EE 9 Tomcat 10
6.0 jakarta.servlet Jakarta EE 10 Tomcat 10.1+

Exam Point Summary

  • javax.servlet → jakarta.servlet change namespace migration का result है।
  • Functional difference नहीं है, सिर्फ package name बदला गया है।
  • Servlet 5.0 से jakarta namespace mandatory है।
  • Tomcat 10, Jetty 11 और GlassFish 6 से jakarta.servlet officially supported है।
  • Frameworks जैसे Spring 6 और Hibernate 6 अब jakarta EE पर आधारित हैं।

Key Takeaways

  • Namespace change future compatibility के लिए जरूरी था।
  • Migration में सिर्फ package replace नहीं, dependency updates भी जरूरी हैं।
  • jakarta.servlet modern cloud-ready ecosystem का हिस्सा है।
  • New developers को शुरुआत से jakarta package का use करना चाहिए।

Developer Note

अगर आप exam या interview की तैयारी कर रहे हैं तो ये question बहुत common है — “What is the difference between javax.servlet and jakarta.servlet?” इसका short answer यही है कि दोनों में सिर्फ namespace difference है, functionality same रहती है, लेकिन jakarta.servlet future versions के लिए standard बन चुका है।