Updated June 7, 2023
Introduction to Servlet Dispatcher
An interface is included in the javax.servlet package is the RequestDispatcher. After receiving the request, we receive an object in the servlet using this interface. The servlet dispatcher function requests additional resources, such as servlet, HTML files, or JSP files, using the RequestDispatcher object. A servlet dispatcher request can be forwarded to the resource using a RequestDispatcher object, or the resource can utilize it as part of a response. The resource could either be static or dynamic.
Key Takeaways
- The servlet dispatcher uses a method that uses link mapping and configuration.
- It uses in the web.xml page with the url prefix and string name.
- The interface works with url links, name parameters, and other variables.
- It creates stable, understandable web and desktop applications easily.
- It removes the complexity of large-size projects for the developers.
What is a Servlet Dispatcher?
When an incoming HttpRequest arrives, the Servlet Dispatcher manages it, delegates it, and processes it by the configuration interface. The implementation of this interface in a web or desktop application with the assistance of annotated controller endpoints, handlers, and response objects.
The controller for web applications is the Servlet Dispatcher. In the Java framework, it’s utilized to construct web applications and REST services. This servlet works in the web.xml file in a conventional web application to process requests. It contains a method to handle the appeal of the web page, servlet page, and output page.
Servlet Dispatcher Configuration
The following web.xml file provides the servlet URL to the pages from the welcome page to the output page.
File name: web.xml
Code:
<web-app>
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class> Register </servlet-class>
</servlet>
<servlet>
<servlet-name>OutputServlet</servlet-name>
<servlet-class> OutputServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> Register </servlet-name>
<url-pattern>/first_servlet</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> OutputServlet </servlet-name>
<url-pattern>/last_servlet</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>new.html</welcome-file>
</welcome-file-list>
</web-app>
The following servlet file is used to forward another page request using request dispatchers methods.
File name: Register.java
Code:
public class Register extends HttpServlet {
public void doPost(HttpServletRequest reqst, HttpServletResponse respns)
throws ServletException, IOException {
respns.setContentType(" text/html ");
PrintWriter printout = respns.getWriter();
String variable_name = "value";
if(variable_name.equals("first_servlet"){
RequestDispatcher rdobj = reqst.getRequestDispatcher("secondservlet");
rdobj.forward(reqst, respns);
}
else{
printout.print(" Sorry Invalid! ");
RequestDispatcher rdobj = reqst.getRequestDispatcher("/new.html");
rdobj.include(reqst, respns);
}
}
Servlet Dispatcher Processing
The next steps work using for servlet dispatcher interface.
The welcome file or initial file starts with the following web.xml tag.
Code:
<welcome-file-list>
<welcome-file>new.html</welcome-file>
</welcome-file-list>
The welcome file uses the servlet name in the action element.
Code:
<form action = "first_servlet" method = "post">
</form>
The files link operate the first servlet file using the servlet-mapping tag in the XML file.
Code:
<servlet>
<servlet-name>Register</servlet-name>
<servlet-class> Register </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> Register </servlet-name>
<url-pattern>/first_servlet</url-pattern>
</servlet-mapping>
Use the servlet dispatcher’s “include” or “forward” method on the page.
1. Forward method
Code:
RequestDispatcher rdobj = reqst.getRequestDispatcher("last_servlet ");
rdobj.forward(reqst, respns);
2. Include method
Code:
RequestDispatcher rdobj = reqst.getRequestDispatcher("/new.html");
rdobj.include(reqst, respns);
Create a second servlet in the web.xml file using a servlet mapping tag like first_servlet.
Code:
<servlet-name>OutputServlet</servlet-name>
<servlet-class> OutputServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> OutputServlet </servlet-name>
<url-pattern>/last_servlet</url-pattern>
</servlet-mapping>
Display the output of the servlet web application.
Servlet Dispatcher Interfaces
The RequestDispatcher interface uses two methods to send and receive servlet page requests.
1. Forward method
Syntax:
public void forward(ServletRequest requestobject,ServletResponse responseobject);
The forward method sends a request from a Java servlet file to other sources like a JSP, servlet, or HTML on the server. It shows to the next servlet page after completing the operation successfully.
2. Include method
Syntax:
public void include(ServletRequest requestobject,ServletResponse responseobject);
The content of a resource shows the available or current servlet file, HTML file, or JSP file in the given response. Mostly, it shows the current page after getting an error in the form information.
Servlet dispatcher interface example:
The interface uses in the following type of example. It needs in all servlet operations with methods.
File name: new.html
Code:
<form action = "first_servlet" method = "post">
UserName: <input type = "text" id = "uname" name = "uname"><br>
<input type = "submit" value = "Save">
</form>
File name: Register.java
Code:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Register extends HttpServlet {
public void doPost(HttpServletRequest reqst, HttpServletResponse respns)
throws ServletException, IOException {
respns.setContentType(" text/html ");
PrintWriter printout = respns.getWriter();
String variable_name = reqst.getParameter("uname");
if(variable_name.equals("first_servlet"){
RequestDispatcher rdobj = reqst.getRequestDispatcher("last_servlet ");
rdobj.forward(reqst, respns);
}
else{
printout.print(" Sorry Invalid! ");
RequestDispatcher rdobj = reqst.getRequestDispatcher("/new.html");
rdobj.include(reqst, respns);
}
}
File name: OutputServlet.java
Code:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class Register extends HttpServlet {
public void doPost(HttpServletRequest reqst, HttpServletResponse respns)
throws ServletException, IOException {
respns.setContentType(" text/html ");
PrintWriter printout = respns.getWriter();
String variable_name = reqst.getParameter("uname");
printout.print("Hello!" +variable_name);
}
File name: web.xml
Code:
<web-app>
<servlet>
<servlet-name> Register </servlet-name>
<servlet-class> Register </servlet-class>
</servlet>
<servlet>
<servlet-name> OutputServlet </servlet-name>
<servlet-class> OutputServlet </servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> Register </servlet-name>
<url-pattern> /first_servlet </url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name> OutputServlet </servlet-name>
<url-pattern> /last_servlet </url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file> new.html </welcome-file>
</welcome-file-list>
</web-app>
Output:
The following images show html form with or without information.
The following image show output information.
FAQ
Other FAQs are mentioned below:
Q1. What distinguishes the RequestDispatcher include() and forward() methods?
Answer:
The forward method will close the output stream after it has been called, but the included method leaves the output stream open. This is how the two techniques vary.
Q2. What distinguishes RequestDispatcher from sendRedirect?
Answer:
Compared to sendRedirect(), the RequestDispatcher interface enables server-side forwarding and includes operation.
Q3. Are two dispatcher servlets possible?
Answer:
DispatcherServlet instances can be configured independently of one another, just as en-servlets. Make sure your servlet mapping is set up so that one URL cannot map to more than one servlet. The container will choose which one of two servlets is in it. It can not be the one you want to choose servlet.
Q4. Can the dispatcher servlet be overridden?
Answer:
Please be aware that you can override the createDispatcherServlet() method if you need to modify the DispatcherServlet.
Conclusion
It works with the servlet lifecycle in connecting other web pages. It operates functionality using interface or methods. The configuration makes a simple, easy, and user-friendly application.
Recommended Articles
This is a guide to Servlet Dispatcher. Here we discuss the introduction, servlet dispatcher configuration & processing, interfaces, and FAQ. You may also have a look at the following articles to learn more –