Tuesday 27 April 2010

RequestDispatcher

RequestDispatcher is an interface which is used to transfers the control from current web resource to another web resource (such as a Servlet, HTML, JSP) on the server.
RequestDispatcher interface is predefined in javax.servlet package.
RequstDispatcher can be get using getRequestDispacther() method of ServletRequest and/or from the ServletContext. Retrieved RequestDispatcher object is used as a wrapper around a server resource located at a particular path or given by a particular name.

It has two methods .

Include() method.
forward() method.

forward() method:-

The forward() method of Request Dispatcher is used to transfer the request between server resources,(Servlet to Servlet, HTM and JSP).
Servlet 1 gets the request from client and generates a response, which is not shown to user. The servlet 1 then transfer the request to servlet whose response is then sent back to client.
Any code written after forward(request, response) method will not execute as the request is already forwarded.
There is no record of the response of first servlet. This method is faster as compared to using sendRedirect because no network round trip to the server and back is required.

include() method:
includes the content of the requested resource (any of them jsp, servlet, heml, etc) on the server response.

syntax :

void include(request, response) throws ServletException, IOException

parameters :

request & response : These parameters must be the same as the responding servlet service method object's are passed.

//creating Home.html
<html>
 <body>
  <center><br><br>
  <b>Request Dispatcher</b>
  <form action="test/ser1"><br><br>
   <table>
    <tr>
     <th>Path: </th>
     <td><input type="text" name="path"/></td>
    </tr>
    <tr><td colspan="2">&nbsp;</td></tr>
    <tr>
     <td colspan="2" align="center">
     <input type="submit" value="invoke Testservlet1"/>
     </td>
    </tr>
   </table>
   </form>
  </center></body></html>


//creating the TestServlet1.java
package com.rajendra.servlets;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.GenericServlet;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class TestServlet1 extends GenericServlet
{
 public void service(ServletRequest req,ServletResponse res) throws ServletException, IOException
 {
   String path=req.getParameter("path");
   res.setContentType("text/html");
   PrintWriter out=res.getWriter();//creating the out objct
   out.println("text/html");
   out.println("<b>output results for the path: <i>"+path+"</i></b>");
   out.println("<br/><br/>");
   out.println("<table border='1' width='100%'><tr>");
   out.println("<th> Method used to get RequestDispatcher object</th>");
   out.println("<th> Result of invoking the respective method using the given path</th></tr>");
   out.println("<tr>");
 
   try
   {
  out.println("<td>servletContext.getRequestDispatcher(\"<b>"+path+"</b>\")</td>");
  RequestDispatcher rd=getServletContext().getRequestDispatcher(path);
  out.println("<td>");
  rd.include(req,res);
  out.println("</td>");
   }//end of try
catch(Exception e)
{
e.printStackTrace();
out.println("<td><b>Exception :</b><br/>&nbsp;&nbsp;&nbsp;");
out.println("the given path is invalid, since it does not start with <b>/</b>");
out.println("</td>");

}//end of catch
out.println("</tr>");
out.println("<td>servletrequest.getRequestDispatcher(\"<b>"+path+"</b>\")</td>");
RequestDispatcher rd=req.getRequestDispatcher(path);
out.println("<td>");
rd.include(req,res);
out.println("</td></tr>");
RequestDispatcher rd1=getServletContext().getRequestDispatcher(path);
out.println("<td>servletcontext.getNamedDispatcher(\"<b>"+path+"</b>\")</td>");
if(rd1==null)
{
out.println("<td> cannot locate the resource, returned <i>null</i></td>");

}//end of if
else
{
out.println("<td><b>Located the resource, response:</b><br/>&nbsp;&nbsp;&nbsp;&nbsp;");
rd.include(req,res);
out.println("</td>");

}//end of else
out.println("</table><br/><br/><br/>");
out.println("<a href='../Home.html'>Go back to test with different path</a>");
out.println("</body></html>");

   }//end of service()
 
 }//end of class
//compile and get the class file

//Creating TestServlet2.java
package com.rajendra.servlets;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.ServletException;
import java.io.IOException;
import java.io.PrintWriter;

public class TestServlet2 {
public void service(ServletRequest req,ServletResponse res) throws ServletException, IOException
{
PrintWriter out=res.getWriter();
out.println("Response from TestServlet2");

}//end of service

}//end of class
//compile the get the class file, copy the class file and paste into classes folder in WEB-INF folder
//creating web.xml file in WEB-INF folder
<web-app>
 <servlet>
  <servlet-name>ts1</servlet-name>
  <servlet-class>com.rajendra.servlets.TestServlet1</servlet-class>
  </servlet>
  <servlet>
   <servlet-name>ts2</servlet-name>
   <servlet-class>com.rajendra.servlets.TestServlet2</servlet-class>
   
  </servlet>
  <servlet-mapping>
     <servlet-name>ts1</servlet-name>
     <url-pattern>/test/ser1</url-pattern>
   </servlet-mapping>
   <servlet-mapping>
     <servlet-name>ts2</servlet-name>
     <url-pattern>/ser2</url-pattern>
   </servlet-mapping>
   <welcome-file-list>
   <welcome-file>Home.html</welcome-file>
   </welcome-file-list>
</web-app>

Previous Topic:
ServletResponse:




No comments:

Post a Comment