Monday, 5 May 2014

Servlets : Send Redirect Demo[Transfer control to different domain]

🚀 Master Java Servlets & Web Architecture!

Looking to strengthen your backend development foundation? Subscribe to Ram N Java for more step-by-step programming guides!

🔔 Subscribe to Ram N Java

What is response.sendRedirect() in Java Servlets?

In Java Servlet programming, HttpServletResponse.sendRedirect(String location) is used to redirect an incoming client request to an entirely different resource.

Unlike RequestDispatcher.forward()—which operates purely server-side within the same web application—sendRedirect() instructs the client's browser to make a fresh request to a new URL. This means you can transfer control not only within the same container, but also across external domains (such as Google, Yahoo, or external payment gateways).

How sendRedirect Works Under the Hood

  1. The client sends an HTTP request to your servlet endpoint (e.g., /search).
  2. The servlet processes incoming parameters and invokes response.sendRedirect("https://www.google.com/search?q=" + query).
  3. The servlet container returns an HTTP status code 302 (Found / Temporary Redirect) with the Location header containing the target URL.
  4. The client's browser reads this header and automatically issues a brand-new GET request to the target domain.
  5. The user's browser address bar updates to reflect the new target URL.

Step-by-Step Implementation: Search Query Redirect

Let us look at a practical demonstration where search text entered in an HTML form is redirected to an external search engine:

1. The HTML Input Form (index.html)

<form action="searchRedirect" method="GET">
  <label for="search">Search Query:</label>
  <input type="text" id="search" name="query" />
  <input type="submit" value="Search on Google" />
</form>

2. The Redirect Servlet (SearchRedirectServlet.java)

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class SearchRedirectServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {

        // Retrieve search query submitted from form
        String query = req.getParameter("query");

        // Redirect control to an external domain
        if (query != null && !query.trim().isEmpty()) {
            res.sendRedirect("https://www.google.com/search?q=" + query);
        } else {
            res.sendRedirect("https://www.google.com");
        }
    }
}

Key Differences: sendRedirect() vs RequestDispatcher.forward()

  • Scope: sendRedirect() can redirect to any external domain, whereas forward() works only within the same web application.
  • Browser Address Bar: In sendRedirect(), the browser URL updates to the new location. In forward(), the browser URL remains unchanged.
  • HTTP Requests: sendRedirect() involves two separate request/response round-trips; forward() executes entirely within a single round-trip.

Recommended Related Tutorials

Deepen your understanding of request dispatching and redirection with these tutorials from Ram N Java:


Click here to watch in Youtube : https://www.youtube.com/watch?v=8LjrXsgK080

Click the below Image to Enlarge



SendRedirectDemo Project Dir Structure


MySearchServlet.java
import java.io.IOException;

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

public class MySearchServlet extends HttpServlet
{

    private static final long serialVersionUID = 1L;

    public void init() throws ServletException
    {
        System.out.println("----------------------------------");
        System.out.println(" Init method is called in "
                + this.getClass().getName());
        System.out.println("----------------------------------");
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        String searchKey = request.getParameter("searchKey");
        response.sendRedirect("https://www.google.co.in/#q=" + searchKey);
    }

    public void destroy()
    {
        System.out.println("----------------------------------");
        System.out.println(" destroy method is called in "
                + this.getClass().getName());
        System.out.println("----------------------------------");
    }
}

web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    metadata-complete="true" version="3.0">
    
    <display-name>SendRedirectDemo</display-name>
    
    <description>
        This is a simple web application with a source code organization
        based on the recommendations of the Application Developer's Guide.
    </description>
    
    <servlet>
        <servlet-name>search</servlet-name>
        <servlet-class>MySearchServlet</servlet-class>
    </servlet>
    
    <servlet-mapping>
        <servlet-name>search</servlet-name>
        <url-pattern>/search</url-pattern>
    </servlet-mapping>

</web-app>

index.html
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SendRedirectDemo</title>
</head>
<body>
    <li><a href="mysearch.html">mysearch</a></li>
</body>
</html>

mysearch.html
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>SendRedirectDemo</title>
</head>
<body>
    <form action="search">
        <input type="text" name="searchKey"> 
        <input type="submit" value="Google Search">
    </form>
</body>
</html>

Environment Used 

JDK version :1.6.0_30
Tomcat version : 7.0.50 

To Download SendRedirectDemo_Different_ContainerApp Project Click the below link

https://sites.google.com/site/javaee4321/servlets/SendRedirectDemo_Different_ContainerApp.zip?attredirects=0&d=1

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • No comments:

    Post a Comment

    Tutorials