What is the difference between the getRequestDispatcher(String) and getNamedDispatcher(String) methods in the ServletContext Class?
NamedDispatcher
Returns a RequestDispatcher object that acts as a wrapper for the named servlet.
getNamedDispatcher(String) method takes the name of the Servlet as parameter which is declared via Deployment descriptor.
Example: Deployment Descriptor
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.example.ServletExample</servlet-class>
</servlet>
RequestDispatcher dispatch = request.getNamedDispatcher(?FirstServlet??);
dispatch.forward(request, response);
Note:
A servlet instance can determine its name using
servletConfig.getServletName(); This method returns the name of the
class that implements the Servlet interface or extends the HttpServlet class.
RequestDispatcher
Returns a RequestDispatcher object that acts as a wrapper for the resource located at the given path.
RequestDispatcher dispatch = request.getRequestDispatcher("/tes");
Here "/tes" represents the url-pattern element value of the servlet class.
<servlet-mapping>
<servlet-name>Test</servlet-name>
<url-pattern>/tes</url-pattern>
</servlet-mapping>
It represents the path of the servlet class. Since both the base as
well as target servlet are in the same package structure by just
specifying the url-pattern element value we will be able to access the
target servlet.
We shouldn't specify the entire path like
String str = "/WEB-INF/classes/com/example/posr/Test"
RequestDispatcher dispatch = request.getRequestDispatcher(str);
To forward a request to a JSP page we use
RequestDispatcher dispatch = request.getRequestDispatcher("/TestJspOne.jsp");
Here "/TestJspOne.jsp" the slash denotes the Jsp page is at the root of the application.