Handling HTTP Requests and Responses in Servlets

Servlets are designed to handle HTTP requests and responses, making them essential for building dynamic web applications. This guide explains the basics of HttpServletRequest and HttpServletResponse, demonstrates the difference between GET and POST methods, and shows how to send text/html responses.

Basics of HttpServletRequest and HttpServletResponse

HttpServletRequest

The HttpServletRequest object represents the client’s request and contains details such as headers, parameters, and the request method.

Key Methods:

  • getParameter(String name): Retrieves request parameters.
  • getHeader(String name): Gets the value of a specific header.
  • getMethod(): Returns the HTTP method (e.g., GET, POST).
  • getRequestURI(): Returns the URI of the request.

Example:

String username = request.getParameter("username");
String method = request.getMethod();
System.out.println("Request Method: " + method);
System.out.println("Username: " + username);

HttpServletResponse

The HttpServletResponse object enables the servlet to send data back to the client.

Key Methods:

  • setContentType(String type): Sets the content type of the response.
  • getWriter(): Returns a PrintWriter to write the response.
  • sendRedirect(String location): Redirects the client to a new location.

Example:

response.setContentType("text/html");
response.getWriter().println("<h1>Response from Servlet</h1>");

Understanding GET and POST Methods

GET Method

  • Used to request data from a server.
  • Appends data as query parameters in the URL.
  • Suitable for retrieving data but not for sensitive information.

Servlet Implementation:

 
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String name = request.getParameter("name");
    out.println("<h1>Hello, " + name + "! This is a GET response.</h1>");
}

Example URL:

http://localhost:8080/MyApp/hello?name=John

POST Method

  • Used to send data securely to the server in the request body.
  • Preferred for submitting forms and sending sensitive information.

Servlet Implementation:

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    String username = request.getParameter("username");
    out.println("<h1>Welcome, " + username + "! This is a POST response.</h1>");
}

HTML Form Example:

<form action="hello" method="POST">
    <label for="username">Name:</label>
    <input type="text" id="username" name="username">
    <button type="submit">Submit</button>
</form>

Sending text/html Responses

Servlets can generate dynamic HTML responses based on client requests.

Example:

@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
    response.setContentType("text/html");
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE html>");
    out.println("<html>");
    out.println("<head><title>Servlet Example</title></head>");
    out.println("<body>");
    out.println("<h1>Welcome to Servlets</h1>");
    out.println("<p>This response is dynamically generated.</p>");
    out.println("</body>");
    out.println("</html>");
}

Best Practices

  • Parameter Validation: Always validate user inputs to prevent injection attacks.
  • Content Type: Set the appropriate content type for your response (e.g., text/html, application/json).
  • Avoid Business Logic in Servlets: Use helper classes or frameworks like Spring for better separation of concerns.
  • Use POST for Sensitive Data: Avoid sending sensitive data using the GET method.