Feedback Form

Reading Input: GET/POST Parameters, Multipart Forms, and InputStream

GET/POST Parameters, Multipart Forms, and InputStream

GET और POST Parameters क्या होते हैं?

जब भी कोई user किसी website पर form submit करता है, तो browser उस data को server तक भेजता है। इस data को भेजने के दो common तरीके होते हैं — GET और POST। ये दोनों methods HTTP protocol का हिस्सा हैं और इन्हीं के जरिए client और server के बीच data transfer होता है।

GET Method

GET method का use तब किया जाता है जब हमें data को URL के साथ भेजना होता है। मतलब, form का data URL के query string में दिखाई देता है।

उदाहरण:

https://example.com/search?name=Ravi&city=Delhi
  • GET method में data URL में दिखाई देता है, इसलिए यह कम secure होता है।
  • GET का use read-only requests के लिए किया जाता है।
  • इसमें data length limited होती है (approx 2048 characters तक)।
  • Browser GET requests को cache कर सकता है।

POST Method

POST method का use तब किया जाता है जब हमें data को सुरक्षित तरीके से server को भेजना होता है। इसमें data URL में नहीं दिखता, बल्कि HTTP request body के अंदर जाता है।

उदाहरण:

POST /login HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded

username=ravi&password=12345
  • POST method secure होता है क्योंकि data URL में नहीं दिखता।
  • POST large data और binary files (जैसे images या documents) भेजने के लिए use किया जाता है।
  • Server POST requests को cache नहीं करता।
  • POST method का use database update या file upload जैसी operations में किया जाता है।

GET vs POST Comparison Table

Feature GET POST
Data Visibility URL में दिखाई देता है Hidden रहता है (body में जाता है)
Security कम secure ज़्यादा secure
Data Length Limited Unlimited
Use Case Data fetch करना Data insert/update करना
Caching Allowed Not allowed

Form Handling in Servlet

Servlet में form data को handle करने के लिए हम HttpServletRequest object का use करते हैं। इस object के methods से हम client द्वारा भेजे गए parameters को retrieve कर सकते हैं।

Example (GET/POST Form Data Read करना)

मान लीजिए हमारे पास एक HTML form है जो name और email भेजता है:

<form action="RegisterServlet" method="post">
Name: <input type="text" name="username"><br>
Email: <input type="email" name="useremail"><br>
<input type="submit" value="Register">
</form>

अब Servlet में हम इन values को ऐसे प्राप्त करेंगे:

public class RegisterServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
    String name = request.getParameter("username");
    String email = request.getParameter("useremail");
    PrintWriter out = response.getWriter();
    out.println("Name: " + name);
    out.println("Email: " + email);
  }
}

यह code client से आए form data को पढ़कर response में display करता है।

Multipart Forms क्या होते हैं?

जब किसी form के जरिए text data के साथ-साथ files (जैसे images, PDFs, etc.) भी upload करनी हों, तब हमें multipart/form-data encoding type का use करना होता है।

उदाहरण:

<form action="UploadServlet" method="post" enctype="multipart/form-data">
Select File: <input type="file" name="uploadFile"><br>
<input type="submit" value="Upload">
</form>

यहाँ enctype="multipart/form-data" बताता है कि यह form file upload के लिए है।

Servlet में Multipart Form Data Handle करना

Java Servlet API में @MultipartConfig annotation का use करके file uploads को handle किया जाता है।

import java.io.*;
import javax.servlet.*;
import javax.servlet.annotation.*;
import javax.servlet.http.*;

@MultipartConfig
public class UploadServlet extends HttpServlet {
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
    Part filePart = request.getPart("uploadFile");
    String fileName = filePart.getSubmittedFileName();
    InputStream fileContent = filePart.getInputStream();

    FileOutputStream fos = new FileOutputStream("C:/uploads/" + fileName);
    byte[] buffer = new byte[1024];
    int bytesRead;
    while ((bytesRead = fileContent.read(buffer)) != -1) {
      fos.write(buffer, 0, bytesRead);
    }
    fos.close();

    response.getWriter().println("File Uploaded Successfully!");
  }
}
  • @MultipartConfig annotation Servlet को बताता है कि यह multipart data handle करेगा।
  • request.getPart() method किसी specific file field को access करता है।
  • InputStream का use file content को byte stream में पढ़ने के लिए किया जाता है।

InputStream क्या होता है?

InputStream Java की IO classes में से एक important class है जिसका use data को byte stream के रूप में पढ़ने के लिए किया जाता है। Servlet में यह method बहुत उपयोगी होता है जब हमें client द्वारा भेजे गए raw data को directly process करना हो।

Servlet में InputStream का Use

अगर कोई client custom data भेजता है, जैसे JSON या XML, तो हम उसे request.getInputStream() से पढ़ सकते हैं।

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  InputStream inputStream = request.getInputStream();
  BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  String line;
  StringBuilder jsonData = new StringBuilder();
  while ((line = reader.readLine()) != null) {
    jsonData.append(line);
  }
  response.getWriter().println("Received Data: " + jsonData.toString());
}

यह code raw request body को पढ़ता है और उसे string के रूप में display करता है। यह तरीका REST APIs में बहुत commonly use होता है।

InputStream के मुख्य Uses

  • File uploads को byte-by-byte पढ़ना
  • Raw JSON या XML data को parse करना
  • Network stream से data process करना
  • Binary data जैसे images या audio files handle करना

Practical Use Case Example

मान लीजिए एक user mobile app से image upload कर रहा है। उस case में server को raw binary data POST request में मिलेगा। Servlet में हम इसे InputStream से पढ़कर file में save कर सकते हैं:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
  InputStream inputStream = request.getInputStream();
  FileOutputStream fos = new FileOutputStream("C:/uploads/image.png");
  byte[] buffer = new byte[1024];
  int bytesRead;
  while ((bytesRead = inputStream.read(buffer)) != -1) {
    fos.write(buffer, 0, bytesRead);
  }
  fos.close();
  response.getWriter().println("Image Uploaded Successfully!");
}

इस तरह Servlet हर प्रकार के data को handle कर सकता है — चाहे वो text हो या binary files।

Summary Points

  • GET और POST दोनों methods client से server तक data भेजने के लिए use किए जाते हैं।
  • GET readable data transfer के लिए और POST secure data submission के लिए use होता है।
  • Multipart Forms file uploads के लिए जरूरी होते हैं।
  • @MultipartConfig annotation file handling को आसान बनाता है।
  • InputStream raw binary data को handle करने के लिए सबसे powerful तरीका है।

अगर आप Servlet exam या practical की तैयारी कर रहे हैं, तो यह concept बहुत important है क्योंकि questions में अक्सर पूछा जाता है कि form data को Servlet में कैसे read और process किया जाता है।