Servlets can invoke JSP files in two ways, the include() method and the forward() method.
The include() method in the RequestDispatcher interface calls a JSP file and waits for it to return before continuing to process the interaction. The include() method can be called multiple times within a given servlet.
This example shows a JSP file using include():
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("JSP_URI"); dispatcher.include(request, response); ... //processing continues
The forward() method in the RequestDispatcher interface handles the JSP interaction control. The servlet is no longer involved with the current interactions output after invoking forward() therefore only one call to the forward() method can be made in a particular servlet.
You cannot use the forward() method if you have already defined a PrintWriter or ServletOutputStream object.
This example shows a JSP page using forward():
RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("JSP_URI"); dispatcher.forward(request, response);
You identify which JSP noun to call by specifying a Universal Resource Identifier (URI). The path is a String describing a path within the ServletContext scope. You can also use the getRequestDispatcher() method in the request object that takes a String argument indicating a complete path.
The getRequestDispatcher method is similar to the RequestDispatcher in the ServletContext. The servlet container uses the information in the request object to transform the given relative path to a complete current servlet path, for example:
RequestDispatcher dispatcher = req.getRequestDispatcher(“foo/bar”);
In the previous example getRequestDispatcher does not start with “/”. In Web Server 6.1, this syntax resulted in a URI such as /webapp/foo/bar. In Sun Java System Web Server 7.0, the URI appears as /webapp/current_servlet_path/foo/bar
For more information about JSP pages, see Chapter 5, Developing JavaServer Pages.