Showing posts with label Servlet Tutorial. Show all posts
Showing posts with label Servlet Tutorial. Show all posts

Sunday, 4 May 2014

Servlets : Send Redirect Demo[Transfer control to the Servlet which is in the Same Webcontainer]

Enjoying Java & Servlet Tutorials?

Subscribe to Ram N Java for hands-on, practical Java guides and clear web development tutorials!

🔔 Subscribe to Ram N Java

What is Send Redirect in Java Servlets?

In Java web applications, sendRedirect is a mechanism provided by the HttpServletResponse interface that redirects a client browser to a different resource. Unlike request forwarding, which occurs entirely on the server side, a redirection involves communication between the client (browser) and the server.

When you call response.sendRedirect("url"), the servlet container sends an HTTP response back to the browser with an HTTP status code 302 (Found) along with a Location header containing the destination URL. Upon reading this response, the browser automatically sends a brand new GET request to the specified URL.

How Control Transfers Within the Same Web Container

In this demonstration, control is transferred between two servlets hosted inside the same Tomcat web container:

  • LoginServlet (mapped to /login): Handles incoming user credentials submitted via a POST request from index.html.
  • WelcomeServlet (mapped to /welcome): Welcomes authenticated users and displays output directly to the browser.

When valid credentials are provided, LoginServlet invokes:

response.sendRedirect("welcome");

The browser receives status code 302, detects the target location http://localhost:8080/sendredirectdemo/welcome, and initiates a clean GET request to display the welcome screen.

Key Takeaways

  • Two Requests & Two Responses: Redirection requires two distinct round-trips between the client and server.
  • URL Updates in the Browser: The browser address bar updates to show the target resource URL.
  • HTTP Status Code 302: Indicates a temporary redirect to the browser.
  • Different Scope: Request attributes set in the initial servlet are not carried over to the redirected servlet because a new request is created.

Recommended Related Tutorials

Continue mastering Java Servlets with these related video guides from Ram N Java:


Click here to watch in Youtube : https://www.youtube.com/watch?v=oWD-x1dIDSc

Click the below Image to Enlarge



SendRedirectDemo Project Dir Structure

LoginServlet.java
import java.io.IOException;
import java.io.PrintWriter;

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

public class LoginServlet 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 doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException
    {
        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        String userName = request.getParameter("username");
        String passWord = request.getParameter("password");

        if (userName.equalsIgnoreCase("ram") && passWord.equals("ram"))
        {
            response.sendRedirect("http://localhost:8080/SendRedirectDemo/welcome");
        }
        else
        {
            out.print("Sorry UserName or Password is Wrong!");
            RequestDispatcher requestDispatcher = request
                    .getRequestDispatcher("/index.html");
            requestDispatcher.include(request, response);
        }
    }

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


WelcomeServlet.java
import java.io.IOException;
import java.io.PrintWriter;

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

public class WelcomeServlet 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
    {

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();

        out.print("Welcome");
    }

    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>LoginServlet</servlet-name>
    <servlet-class>LoginServlet</servlet-class>
  </servlet>
  
  <servlet>
    <servlet-name>WelcomeServlet</servlet-name>
    <servlet-class>WelcomeServlet</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>LoginServlet</servlet-name>
    <url-pattern>/login</url-pattern>
  </servlet-mapping>
  
  <servlet-mapping>
    <servlet-name>WelcomeServlet</servlet-name>
    <url-pattern>/welcome</url-pattern>
  </servlet-mapping>
  
</web-app>

index.html
<!DOCTYPE HTML>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>RequestDispatcherDemo</title>
</head>
<body>
    <form action="login" method="post">
        
        UserName :  <input type="text" name="username" /><br /> 
        
        Password :&nbsp; &nbsp; <input type="password" name="password" /><br /> 
            
        <input type="submit" value="login" />
        
    </form>
</body>
</html>

Environment Used 

JDK version :1.6.0_30
Tomcat version : 7.0.50 

To Download SendRedirectDemoApp Project Click the below link

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

See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Thursday, 17 April 2014

    Servlets : RequestDispatcher Example

    Master Java Web Development!

    Subscribe to Ram N Java for step-by-step Java tutorials, servlet architecture, and practical backend coding guides!

    🔔 Subscribe to Ram N Java

    What is RequestDispatcher in Java Servlets?

    The RequestDispatcher interface is an essential component of the javax.servlet package. It acts as a server-side traffic controller, allowing you to pass an incoming client request from one servlet to another web resource, such as another servlet, a JSP file, or an HTML file, within the same web application.

    Unlike client-side redirection (sendRedirect), which asks the browser to initiate a new request, RequestDispatcher operates entirely on the server. This keeps the URL unchanged in the user's browser and preserves the original request and response objects throughout the process.

    Key Methods of RequestDispatcher

    The RequestDispatcher interface provides two primary methods to transfer or combine resources:

    • forward(ServletRequest request, ServletResponse response): Forwards a request from one servlet to another resource. The second resource takes over generating the complete response to the user.
    • include(ServletRequest request, ServletResponse response): Includes the content of another resource (such as a shared header, banner, or footer) directly inside the calling servlet's response.

    Real-World Use Case: User Login Flow

    A classic, practical example of using RequestDispatcher is an authentication workflow:

    1. A user enters their username and password on a web login form.
    2. LoginServlet receives the credentials and validates them against the database.
    3. If authentication succeeds: LoginServlet forwards control to WelcomeServlet using dispatcher.forward(request, response) to render the user's dashboard.
    4. If authentication fails: LoginServlet includes an error message and redisplays the login form using dispatcher.include(request, response).

    Recommended Related Tutorials

    Explore more core Java servlet concepts with these handpicked tutorials from Ram N Java:


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

    Click the below Image to Enlarge


    RequestDispatcherDemo Project Dir Structure

    LoginServlet.java
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.RequestDispatcher;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class LoginServlet 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 doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException
     {
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
    
      String userName = request.getParameter("username");
      String passWord = request.getParameter("password");
    
      if (userName.equalsIgnoreCase("ram") && passWord.equals("ram"))
      {
       RequestDispatcher requestDispatcher = request
               .getRequestDispatcher("/welcome");
       requestDispatcher.forward(request, response);
      }
      else
      {
       out.print("Sorry UserName or Password is Wrong!");
       RequestDispatcher requestDispatcher = request
               .getRequestDispatcher("/index.html");
       requestDispatcher.include(request, response);
      }
     }
    
     public void destroy()
     {
      System.out
              .println("------------------------------------------------------");
      System.out.println(" destroy method is called in "
              + this.getClass().getName());
      System.out
              .println("------------------------------------------------------");
     }
    }
    
    WelcomeServlet.java
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    public class WelcomeServlet 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 doPost(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException
     {
    
      response.setContentType("text/html");
      PrintWriter out = response.getWriter();
    
      String userName = request.getParameter("username");
      out.print("Welcome " + userName);
     }
    
     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>RequestDispatcherDemo</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>LoginServlet</servlet-name>
      <servlet-class>LoginServlet</servlet-class>
     </servlet>
     <servlet>
      <servlet-name>WelcomeServlet</servlet-name>
      <servlet-class>WelcomeServlet</servlet-class>
     </servlet>
    
    
     <servlet-mapping>
      <servlet-name>LoginServlet</servlet-name>
      <url-pattern>/login</url-pattern>
     </servlet-mapping>
     <servlet-mapping>
      <servlet-name>WelcomeServlet</servlet-name>
      <url-pattern>/welcome</url-pattern>
     </servlet-mapping>
     
    </web-app>
    
    index.html
    <!DOCTYPE HTML>
    <html lang="en">
    <head>
    <meta charset="UTF-8">
    <title>RequestDispatcherDemo</title>
    </head>
    <body>
     <form action="login" method="post">
      
      UserName :  <input type="text" name="username" /><br /> 
      
      Password :&nbsp; &nbsp; <input type="password" name="password" /><br /> 
       
      <input type="submit" value="login" />
      
     </form>
    </body>
    </html>
    
    Environment Used

    JDK version :1.6.0_30
    Tomcat version : 7.0.50

    To Download RequestDispatcherDemoApp Project Click the below link
    https://sites.google.com/site/javaee4321/servlets/RequestDispatcherDemoApp.zip?attredirects=0&d=1

    See also:

  • Servlets Tutorial
  • All Design Patterns Links
  • Older Posts Home

    Tutorials