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.

Table of Contents
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.