Feedback Form

The Servlet API: Full Breakdown of javax.servlet & jakarta.servlet

The Servlet API: Full Breakdown of javax.servlet & jakarta.servlet

Java Servlets web development का एक बहुत important हिस्सा हैं, जो web server और client के बीच communication को handle करते हैं। जब भी आप Java web applications बनाते हो, तो Servlet API ही वो backbone होती है जो HTTP request और response को manage करती है। इस blog में हम Servlet API को deep level पर समझेंगे — जिसमें javax.servlet और jakarta.servlet दोनों packages का detailed breakdown रहेगा।

Introduction to Servlet API

Servlet API basically classes और interfaces का एक collection है जो web applications में request-response model को implement करने में मदद करता है। ये API Java EE (अब Jakarta EE) का हिस्सा है और इसका main purpose है dynamic web content generate करना जैसे HTML pages, JSON data, या XML responses।

Servlets server-side components हैं जो incoming client request को process करते हैं और response generate करके वापस भेजते हैं। इनका main advantage यह है कि ये platform-independent और secure होते हैं।

Two Main Packages of Servlet API

  • javax.servlet — ये base package है जिसमें core interfaces और classes होती हैं जो Servlets को define करती हैं।
  • javax.servlet.http — ये HTTP protocol specific package है जो web applications में GET और POST जैसी methods को handle करता है।

लेकिन Jakarta EE के introduction के बाद, इन packages का नाम बदलकर jakarta.servlet और jakarta.servlet.http कर दिया गया है। इसका reason है namespace migration from Java EE to Jakarta EE under Eclipse Foundation।

javax.servlet Package Overview

javax.servlet package Servlet API का core हिस्सा है। इसमें ऐसे interfaces और classes शामिल हैं जो basic servlet functionality को define करते हैं। यानी web request और response को handle करने के लिए यही package foundation तैयार करता है।

Key Interfaces in javax.servlet

  • Servlet — ये core interface है जो हर servlet को implement करना जरूरी होता है।
  • ServletRequest — ये incoming request data (जैसे parameters, headers) को access करने की सुविधा देता है।
  • ServletResponse — ये client को response भेजने के लिए methods provide करता है।
  • ServletConfig — ये servlet configuration information रखता है जो web.xml से आती है।
  • ServletContext — ये entire web application के लिए shared context provide करता है।
  • RequestDispatcher — इसका use एक servlet से दूसरे servlet या JSP को request forward करने में किया जाता है।
  • Filter — ये request और response को modify करने के लिए intermediary layer का काम करता है।

Important Classes in javax.servlet

  • GenericServlet — ये abstract class है जो Servlet interface को implement करती है। इसे extend करके developers custom servlets बना सकते हैं।
  • ServletInputStream — ये request body से binary data read करने के लिए use होती है।
  • ServletOutputStream — ये response body में binary data भेजने के लिए use होती है।

Jakarta Servlet Package Overview

जब Oracle ने Java EE को Eclipse Foundation को transfer किया, तो नए naming convention के तहत सभी javax.* packages को jakarta.* में बदल दिया गया। इसका मतलब यह है कि javax.servlet अब jakarta.servlet हो गया है। Functionality वही है, बस namespace change हुआ है।

Why Namespace Change?

Oracle के पास javax namespace का legal ownership था। इसलिए Eclipse Foundation ने नए ecosystem के लिए इसे jakarta में rename कर दिया ताकि Jakarta EE projects independent रूप से evolve कर सकें।

इसका असर यह हुआ कि सभी modern servlet containers (जैसे Tomcat 10+, Jetty 12+) अब jakarta.servlet namespace use करते हैं।

Backward Compatibility

अगर आपका पुराना project javax.servlet का use करता है, तो Tomcat 9 तक वो support करेगा। लेकिन Tomcat 10 या उसके बाद versions में आपको migration tool या manual refactoring करनी होगी ताकि code jakarta.servlet namespace को support करे।

Important Interfaces & Classes in Servlet API

Servlet Interface

हर Servlet class को Servlet interface implement करना जरूरी होता है। इसमें पाँच main methods होते हैं:

Method Description
init() Servlet initialization के लिए use होता है।
service() Client requests को process करता है।
destroy() Servlet को unload करने से पहले cleanup करता है।
getServletConfig() Servlet configuration data return करता है।
getServletInfo() Servlet के बारे में basic information देता है।

GenericServlet Class

GenericServlet class Servlet interface की basic implementation देती है ताकि developer को हर बार सभी methods define न करने पड़ें। आप इसे extend करके सिर्फ service() method override कर सकते हैं।

public class MyServlet extends GenericServlet {
  public void service(ServletRequest req, ServletResponse res) {
    System.out.println("Processing request...");
  }
}

HttpServlet Class

HttpServlet class GenericServlet को extend करती है और specifically HTTP requests handle करती है। इसमें doGet(), doPost(), doPut(), और doDelete() जैसे methods होते हैं।

protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    response.getWriter().println("Hello from Servlet!");
}

ServletRequest & ServletResponse

ये दोनों interfaces servlet और client के बीच communication bridge का काम करते हैं।

ServletRequest Interface

  • Client से आने वाले data को handle करता है।
  • Parameters, headers और body को read करने की facility देता है।
  • Main methods — getParameter(), getInputStream(), getReader()

ServletResponse Interface

  • Client को response भेजने के लिए use होता है।
  • Content type set करने के लिए setContentType() method provide करता है।
  • Response लिखने के लिए getWriter() या getOutputStream() use करते हैं।

ServletContext & ServletConfig

दोनों ही configuration-related interfaces हैं लेकिन उनका scope अलग होता है।

Interface Scope Use
ServletConfig Single servlet level Specific servlet के configuration parameters access करता है।
ServletContext Entire application level Shared data और resources को manage करता है।

Filters in Servlet

Filters servlets के request और response को modify करने का एक smart तरीका हैं। उदाहरण के लिए — authentication check, logging, compression आदि।

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain)
    throws IOException, ServletException {
    System.out.println("Filter applied!");
    chain.doFilter(req, res); // आगे Servlet को request भेजना
}

RequestDispatcher Interface

ये interface एक servlet से दूसरे servlet या JSP file को request forward करने या include करने के लिए use होता है।

RequestDispatcher rd = request.getRequestDispatcher("secondServlet");
rd.forward(request, response);

Key Advantages of Servlet API

  • Highly efficient और scalable architecture
  • Platform-independent और portable
  • Robust security features
  • Session management और cookies का support
  • Easy integration with JSP और frameworks जैसे Spring

Real-World Uses of Servlet API

  • Dynamic web pages generate करना
  • Online form data process करना
  • RESTful APIs बनाना
  • Authentication systems develop करना
  • Enterprise web applications के लिए backend logic लिखना

Difference Between javax.servlet and jakarta.servlet

Feature javax.servlet jakarta.servlet
Namespace javax.servlet.* jakarta.servlet.*
Ownership Oracle Corporation Eclipse Foundation
Supported Server Tomcat 9 और नीचे Tomcat 10 और ऊपर
Migration Required Not required Yes, package name changes

Servlet API Version History

Version Release Year Major Features
2.5 2005 Annotation support
3.0 2009 Asynchronous processing
3.1 2013 Non-blocking I/O
4.0 2017 HTTP/2 support
5.0 2020 Jakarta namespace migration

Summary Notes

  • Servlet API दो parts में divided है — javax.servlet और jakarta.servlet.
  • Servlets server-side programs हैं जो dynamic web content generate करते हैं।
  • ServletRequest और ServletResponse client-server data exchange को handle करते हैं।
  • GenericServlet और HttpServlet development को simplify करते हैं।
  • Jakarta namespace new versions (Tomcat 10+) में mandatory है।
  • Filters और RequestDispatcher servlet communication को efficient बनाते हैं।
  • Servlet API web development में एक stable और powerful backbone की तरह काम करता है।