Sometimes you may need that a Servlet hands off its job to another Servlet or JSP. Intra Servlet communication can be done by means of a Dispatcher or by Redirecting the initial request.
- Dispatching is done by means of Dispatcher object which allows to complete the request without actually redirecting to user to another site, hence leaving the initial URL unchanged.
- Redirection moves the initial request to another Servlet or JSP therefore changing the initial request.
Communication between Servlets using a Dispatcher
The following example shows how a Servlet can dispatch its work to another Servlet:
@WebServlet(name = "DispatchServlet", urlPatterns = {"/dispatch"}) public class DispatchServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { ServletContext sc = getServletConfig().getServletContext(); RequestDispatcher rd = null; // Do work here sc.getRequestDispatcher("/AnotherServlet"); rd.forward(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }
As you can see, the capabilities of dispatching are built into the ServletContext, by calling the getRequestDispatcher method passing a String containing the name of the Servlet/JSP that you want to hand off the request to. After a RequestDispatcher object has been obtained, invoke its forward method by passing the ServletRequest and ServletResponse objects to it.
Redirection between Servlets/JSP
In the following example we can see how to redirect the request to another Servlet:
@WebServlet(name = "DispatchServlet", urlPatterns = {"/redirect"}) public class RedirectServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Do work here response.sendRedirect(redirectUrl); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } }