Here’s the code to invoke a servlet from another servlet using RequestDispatcher interface.
1) Create index.html.
Index.html
<!DOCTYPE html> <html> <head> <meta charset="ISO-8859-1"> <title>Practical Work</title> </head> <body> <form action="first_servlet"> WRITE <input type="text" name="word" value="I am calling first servlet"/> <button type="submit" name="calculate">Call First Servlet </button><br/> </form> </body> </html>
2) Now, create a basic servlet and pass the data of textbox field from index.html to First_Servlet.java. Use requestdispatcher to rely the data to other servlet.
First_Servlet.java
package com.programmerbay; 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 First_Servlet extends HttpServlet{ public void service(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { String word = request.getParameter("word") ; PrintWriter output = response.getWriter(); String word1 = word+".\n Now, It is calling second servlet"; // Dispatching it to second servlet RequestDispatcher redirecting = request.getRequestDispatcher("second_servlet"); request.setAttribute("passingWord", word1); redirecting.forward(request, response); } }
3) After that, write the code for second servlet that will handle the message or information from first servlet.
Second_Servlet.java
package com.programmerbay; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Second_Servlet extends HttpServlet{ public void service(HttpServletRequest request,HttpServletResponse response) throws IOException { String word = (String) request.getAttribute("passingWord"); PrintWriter output = response.getWriter(); output.println(word); } }
4) Edit the deployment descriptor.
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1"> <servlet> <servlet-name>Invoke_First</servlet-name> <servlet-class>com.programmerbay.First_Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Invoke_First</servlet-name> <url-pattern>/first_servlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>Invoke_Second</servlet-name> <servlet-class>com.programmerbay.Second_Servlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>Invoke_Second</servlet-name> <url-pattern>/second_servlet</url-pattern> </servlet-mapping> </web-app>
Output: