Call one servlet from another servlet

Call one servlet from another servlet?

There are several ways to call one servlet from another servlet in Java:

1.  Request Dispatching

  • Forwarding:  Use the RequestDispatcher to forward the request from one servlet to another. The forwarded servlet handles the request and produces the response.
  • Including:  Use the RequestDispatcher to include the content of another servlet in the response of the current servlet.

2.  Redirecting

   Use the HttpServletResponse.sendRedirect() method to redirect the client’s browser to another servlet. This causes a new request to be sent to the server, which the target servlet will handle.

one servlet

First Servlet (Caller):
1.  First Servlet (Caller): 

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

@WebServlet("/forwardCaller")
public class ForwardCallerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        request.setAttribute("message", "Hello from ForwardCallerServlet");
        RequestDispatcher dispatcher = request.getRequestDispatcher("/forwardTarget");
        dispatcher.forward(request, response);
    }
}

Second Servlet (Target):
2.  Second Servlet (Target): 

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

@WebServlet("/forwardTarget")
public class ForwardTargetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String message = (String) request.getAttribute("message");
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().println("<html><body>");
        response.getWriter().println("<h2>" + message + "</h2>");
        response.getWriter().println("</body></html>");
    }
}

Example 2: Including using RequestDispatcher
1.  First Servlet (Caller): 

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

@WebServlet("/includeCaller")
public class IncludeCallerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().println("<html><body>");
        response.getWriter().println("<h2>Before including another servlet</h2>");
        
        RequestDispatcher dispatcher = request.getRequestDispatcher("/includeTarget");
        dispatcher.include(request, response);
        
        response.getWriter().println("<h2>After including another servlet</h2>");
        response.getWriter().println("</body></html>");
    }
}

Second Servlet (Target):
2.  Second Servlet (Target): 

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

@WebServlet("/includeTarget")
public class IncludeTargetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.getWriter().println("<h2>Content from IncludeTargetServlet</h2>");
    }
}

Example
Example 3: Redirecting using sendRedirect
1.  First Servlet (Caller): 

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

@WebServlet("/redirectCaller")
public class RedirectCallerServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.sendRedirect("redirectTarget");
    }
}


2.  Second Servlet (Target): 

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

@WebServlet("/redirectTarget")
public class RedirectTargetServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().println("<html><body>");
        response.getWriter().println("<h2>Redirected to RedirectTargetServlet</h2>");
        response.getWriter().println("</body></html>");
    }
}


Explanation of the one servlet from another servlet

  • Forwarding Example:
    • ForwardCallerServlet forwards the request to ForwardTargetServlet using RequestDispatcher.forward(). The target servlet handles the request and generates the response.
  • Including Example:
    • IncludeCallerServlet includes the output of IncludeTargetServlet in its own response using RequestDispatcher.include(). The caller servlet’s response includes content from both servlets.
  • Redirecting Example:
    • RedirectCallerServlet redirects the client’s browser to RedirectTargetServlet using HttpServletResponse.sendRedirect(). The browser makes a new request to the target servlet, which generates the response.

Homepage

Readmore