- Java EE Tutorials
- Servlets Tutorials
- Servlets Interview Questions
Request Dispatcher
While developing web applications we need to distribute the request processing and response generation to multiple servlet objects. So we need to dispatch requests from one component to another component. This can be done by using RequestDispatcher interface.
RequestDispatcher interface is implemented by servlet container to dispatch or to pass the request to a web resource such as Servlet, HTML page or JSP page.
To dispatch the request from Servlet or JSP to web resource using RequestDispatcher we need to perform following steps:
- Get a RequestDispatcher object reference
- Using include () and forward () methods of RequestDispatcher.
Getting a RequestDispatcher object
RequestDispatcher object can be obtained by using following methods.
- The getRequestDispacther () method of ServletContext.
- The getNamedDispacther () method of ServletContext.
- The getRequestDispacther () method of ServletRequest.
The getRequestDispacther () method of ServletContext
This method takes String argument to locate the resource to which request is to be dispatched. When this method is called, the container locates given path. Path should start with the / character. If given path does not start with / character it throws IllegalArgumentException.
The getNamedDispacther () method of ServletContext
This method takes String argument used to locate Servlet to which request is to be dispatched. When this method is called, the container locates the Servlet with given name in the context.
The getRequestDispacther () method of ServletRequest
This method obtains the RequestDispatcher object using path to the current request. The Servlet container builds complete path and locates the resource provided in the getRequestDispacther() method of ServletContext.
Using include () and forward () methods of RequestDispatcher
The include() method: This method includes the response of another Servlet into the calling Servlet. This method can be invoked from calling Servlet while servicing the request. It includes contents of resource such as Servlet, JSP page or HTML page in the response. If we want generate response in the source servlet then we should make use of include () method.
The forward() method: This method is used to forward requests to resource such as Servlet, JSP file or HTML page on the server. This method checks whether servlet has obtained the response and output in the response buffer. If buffer is not committed, the content is cleared. However if the buffer is already committed, it throws IllegalStateException. It implies that after invoking forward () method, the Servlet cannot add any response content.
Request Dispatcher Example
Now let us write an example to see how RequestDispatcher works. First write an HTML file called hello.html. This file will contain a form, to enter some text.
Listing 1:hello.html
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form action="Simple" method="get"> Name: <input type="text" name="uname"><br /> <input type="submit" value="Submit" /> </form> </body> </html>
Now on submit of the the data, an action Simple.java which is a servlet would be called. In this servlet we are checking if the entered String equals “Javabeat”. If true, then the request is dispatched to another servlet Welcome. Else and error message is displayed and the request dispatcher calls the hello.html again.
Listing 2: Simple.java servlet
package javabeat.net.servlets; 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 Simple extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String str = request.getParameter("uname"); if (str.equals("Javabeat")) { RequestDispatcher rd = request.getRequestDispatcher("Welcome"); rd.forward(request, response); } else { out.print("Sorry username error--redirecting to login page!"); RequestDispatcher rd = request.getRequestDispatcher("hello.html"); rd.include(request, response); } } }
Listing 2: Welcome.java servlet
package javabeat.net.servlets; 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 Welcome extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String uname = request.getParameter("uname"); out.print("Welcome " + uname); } }
Now that everything is ready, execute the hello.html. Right mouse click on hello.html select Run > Run As and output would appear as below:
Now enter data as “Javabeat” and click on submit button:
Now enter data as “somename” and click on submit button:
Previous Tutorial : Servlet Context || Next Tutorial : sendRedirect in Servlet