Remote request dispatcher (RRD) is a pluggable extension
to the web container which allows application frameworks, servlets
and JavaServer Pages (JSP) to include content from outside the currently
executing resource's Java™ Virtual
Machine (JVM) as part of the response sent to the client.
Before you begin
You must have WebSphere® Application Server Network Deployment installed
to use remote request dispatcher function. You should also familiarize
yourself the limitations of remote request dispatcher. See article,
Remote request dispatcher considerations for details.
Procedure
- Install enterprise application files with the console.
- Configure the sending of include requests between the application
and remote resources.
- Configure web applications to dispatch remote includes.
- Configure web applications to service remote includes.
- Optional: Modify your application to locate
resources located in two different contexts using the servlet programming
model.
The Servlet Programming Model for including
resources remotely does not require you to use any non-Java Platform,
Enterprise Edition (Java EE)
Servlet Application Programming Interfaces (APIs). The remote request
dispatcher (RRD) component follows the same rules to obtain a ServletContext
and a remote resource. By using JavaServer Pages standard tag library
(JSTL), your application is further removed from obtaining a ServletContext
object or RequestDispatcher that is required in the framework example
in the following step because the JSTL custom tag does this implicitly.
Study the following example of a sample JavaServer Pages application
to learn how to locate resources that are in two different contexts,
investments and banking.
<HEAD>
<%@ page
language="java"
contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8059-1"
isELIgnored="false"
%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" $>
</HEAD>
<BODY>
<%--
Programming example using JavaServer Pages and JavaSever Pages
Standard Tag Library (JSTL).
JSTL provides a custom tag to import contents (in servlet and JSP
terms include) in the scope of the same request from outside of
the current web module context by specifying a context parameter.
JSTL restriction: The web module that is imported
must run inside of the same JVM as the calling resource
if imported URL is not fully qualified.
RRD extends this functionality by permitting the web module to
be located within the scope of the current WebSphere Application Server
core group versus the scope of the JVM.
--%>
<hr size="5"/>
<%-- Include resource investmentSummary.jsp located in the
web application with context root of /investments. --%>
<c:import url="investmentSummary.jsp" context="/investments"/>
<hr size="5"/>
<%-- Include resource accountSummary.jsp located in the
web application with context root of /banking. --%>
<c:import url="accountSummary.jsp" context="/banking"/>
<hr size="5"/>
</BODY>
</HTML>
- Optional: Modify your application to locate
resources located in two different contexts using the framework programming
model.
The Framework Programming Model for including
resources remotely does not require you to use any non- Java Platform, Enterprise Edition (Java EE) Servlet Application Programming Interfaces
(APIs). When a request is initiated for a ServletContext name that
is not presently running inside of the current web container, the
remote request dispatcher (RRD) component returns a ServletContext
object that can locate a resource that exists anywhere inside a WebSphere Application Sever WebSphere Application Server Network Deployment environment
provided that the resource exists and RRD is enabled for that ServletContext
object. Study the following sample framework snippet that demonstrates
how to locate resources located in two different contexts, investments
and banking.
/*
Programming example using a generic framework.
Servlet Specification provides an API to obtain
a servlet context in the scope of the same request
different from the current web module context by
specifying a context parameter.
Servlet Specification restriction: The web module that obtain
must run inside of the same JVM as the calling resource.
RRD extends this functionality by permitting the web module to be located
within the scope of the current WebSphere Application Server core group
versus the scope of the JVM.
*/
protected void frameworkCall (ServletContext context, HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException(
PrintWriter writer = response.getWriter();
writer.write("<HTML>");
writer.write("<HEAD>");
writer.write("</HEAD>");
writer.write("<BODY>");
writer.write("<hr size=\"5/">);
//Include resource investmentSummary.jsp located in web application
//with context root of /investments.
RequestDispatcher rd = getRequestDispatcher ( context, "/investments", "/investmentSummary.jsp");
rd.include(request, response);
writer.write("<hr size=\"5/">);
//Include resource accountSummary.jsp located in web application
//with context root of /banking.
rd = getRequestDispatcher ( context, "/banking", "/accountSummary.jsp");
rd.include(request, response);
writer.write("</BODY>");
writer.write("</HTML>");
}
private RequestDispatcher getRequestDispatcher (ServletContext context, String contextName, String resource) {
return context.getContext(contexName).getRequestDispatcher(resource);
}
Results
After enabling at least one enterprise application to dispatch
remote includes and at least one enterprise application to service
remote includes, RRD is now enabled.
What to do next
Restart the modified applications if already installed or
start newly installed applications to enable RRD on each application.