Remote Request Dispatcher (RRD) ist eine Plug-in-fähige Erweiterung für den Web-Container,
mit dem Anwendungsframeworks, Servlets und JSP-Dateien (Java™Server Pages) Inhalt, der nicht von der JVM der
derzeit ausgeführten Ressource stammt, in die Antwort einfügen können, die an den Client gesendet wird.
Vorbereitende Schritte
WebSphere Application Server Network Deployment
muss installiert sein, damit die Dispatcher-Funktion für ferne Anforderungen verwendet werden kann.
Außerdem müssen Sie sich mit den Einschränkungen des Dispatcher für ferne Anforderungen vertraut machen.
Weitere Einzelheiten finden Sie im Artikel "Hinweise zum Dispatcher für ferne Anforderungen".
Vorgehensweise
- Installieren Sie Unternehmensanwendungsdateien über die Konsole.
- Konfigurieren Sie das Senden von Include-Anforderungen zwischen der Anwendung und den fernen Ressourcen.
- Konfigurieren Sie Webanwendungen für die Zuteilung ferner Include-Anforderungen.
- Konfigurieren Sie Webanwendungen für die Verarbeitung ferner Include-Anforderungen.
- Optional: Ändern Sie Ihre Anwendung so, dass Ressourcen in zwei verschiedenen Kontexten über das Servlet-Programmiermodell gesucht werden.
Das Servlet-Programmiermodell für das Importieren von fernen Ressourcen setzt nicht voraus,
dass Sie andere APIs als die Java EE-Servlet-APIs verwenden.
Die Komponente Remote Request Dispatcher (RRD)
verwendet für den Abruf eines ServletContext und einer fernen Ressource dieselben Regeln. Wenn Sie die JavaServer Pages Standard Tag Library (JSTL) verwenden, muss Ihre Anwendung
auch kein ServletContext-Objekt und keinen RequestDispatcher abrufen, der im Framework-Beispiel benötigt
wird, weil das angepasste Tag JSTL dies implizit tut. Studieren Sie das folgende Beispiel
für eine JSP-Anwendung, um zu verstehen, wie Ressourcen gesucht werden, die sich zwei unterschiedlichen Kontexten
befinden (investments und 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>
<%--
Programmierbeispiel mit JavaServer Pages und JavaServer Pages
Standard Tag Library (JSTL).
JSTL stellt ein angepasstes Tag bereit, mit dem durch Angabe eines
Kontextparameters Inhalt in den Geltungsbereich derselben Anforderung
importiert werden kann, der nicht aus dem aktuellen Webmodul stammt
(in Servlet- und JSP-Terminologie Include).
JSTL-Einschränkung: Das importierte Webmodul muss in derselben
JVM wie die aufrufende Ressource ausgeführt werden, wenn der
importierte URL nicht vollständig qualifiziert ist.
RRD erweitert diese Funktionalität, indem er zulässt, dass sich das Webmodul in demselben Geltungsbereich wie die aktuelle Stammgruppe von
WebSphere Application Server und nicht nur im Geltungsbereich der JVM befindet.
--%>
<hr size="5"/>
<%-- Ressource investmentSummary.jsp in der Webanwendung
mit dem Kontextstamm /investments importieren. --%>
<c:import url="investmentSummary.jsp" context="/investments"/>
<hr size="5"/>
<%-- Ressource accountSummary.jsp in der Webanwendung
mit Kontextstamm /banking importieren. --%>
<c:import url="accountSummary.jsp" context="/banking"/>
<hr size="5"/>
</BODY>
</HTML>
- Optional: Ändern Sie Ihre Anwendung so, dass Ressourcen in zwei verschiedenen Kontexten über das Framework-Programmiermodell gesucht werden.
Das Framework-Programmiermodell für das Importieren von fernen Ressourcen setzt nicht voraus, dass Sie andere APIs als die Java EE-Servlet-APIs (Java Platform, Enterprise Edition) verwenden.
Wenn eine Anforderung für einen ServletContext abgesetzt wird, der derzeit nicht im aktuellen Web-Container ausgeführt wird, gibt die Komponente Remote Request Dispatcher (RRD) ein ServletContext-Objekt zurück,
das eine Ressource sucht, die in einer Umgebung mit WebSphere Application Sever WebSphere Application Server Network Deployment ausgeführt wird, sofern diese Ressource vorhanden ist und
RRD für dieses ServletContext-Objekt aktiviert ist. Schauen Sie sich das folgende
Framework-Beispiel-Snippet genau an, das veranschaulicht, wie Ressourcen in zwei unterschiedlichen Kontexten, investments und banking,
gesucht werden.
/*
Programmierbeispiel mit einem generischen Framework.
Die Servlet-Spezifikation stellt eine API bereit, mit der
durch Angabe eines Kontextparameters ein Servlet-Kontext
im Geltungsbereich der Anforderung abgerufen werden kann,
der sich vom aktuellen Webmodulkontext unterscheidet.
Einschränkung der Servlet-Spezifikation: Das Webmodul muss
in derselben JVM wie die aufrufende Ressource ausgeführt
werden.
RRD erweitert diese Funktionalität, indem er zulässt, dass sich das Webmodul in demselben Geltungsbereich wie die aktuelle Stammgruppe von
WebSphere Application Server und nicht nur im Geltungsbereich der JVM befindet.
*/
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/">);
// Ressource investmentSummary.jsp in der Webanwendung
// mit dem Kontextstamm /investments einfügen.
RequestDispatcher rd = getRequestDispatcher ( context, "/investments", "/investmentSummary.jsp");
rd.include(request, response);
writer.write("<hr size=\"5/">);
// Ressource accountSummary.jsp in der Webanwendung
// mit dem Kontextstamm /banking einfügen.
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);
}
Ergebnisse
Nachdem Sie mindestens eine Unternehmensanwendung für die Verteilung ferner Include-Anforderungen
und mindestens eine Unternehmensanwendung für die Verarbeitung ferner Include-Anforderungen
aktiviert haben, ist der Dispatcher für ferne Anforderungen (RRD) aktiviert.
Nächste Schritte
Starten Sie die geänderten Anwendungen erneut (sofern installiert), oder starten Sie
neu installierte Anwendungen, um den RRD in jeder Anwendung zu aktivieren.