Java Reference
In-Depth Information
2. Wenn man eine Referenz auf das Objekt hat, braucht man auch Zugriff auf die Klasse
Counter, die Teil der ersten Web-Anwendung ist.
Zur Lösung des ersten Problems ist in der Schnittstelle ServletContext eine Methode mit
dem Namen getContext vorhanden, mit der sich ein Zugriff auf ein anderes ServletContext-
Objekt beschaff en lässt. Als Parameter muss man dazu den Namen der Anwendung (mit „/“
beginnend) angeben. Durch die folgenden Codezeilen bekommt man also in der zweiten
Web-Anwendung Zugriff auf den ServletContext der ersten Anwendung „application1“:
ServletContext myContext = getServletContext();
ServletContext otherContext = myContext.getContext("/application1");
Dies ist zwar der Code, der am Ende zielführend ist. Ohne zusätzliche Konfi gurations-
einstellungen wird aber der lokalen Variablen otherContext null zugewiesen. In Abschnitt
12.2.1 wurde erwähnt, dass die von mir bevorzugte Variante der Dateiorganisation so aus-
sieht, dass im Verzeichnis conf\Catalina\localhost für jede Web-Anwendung eine XML-
Datei angelegt wird, in der auf das Verzeichnis, in dem sich die Dateien der Anwendung
befi nden, verwiesen wird. In der XML-Datei muss man nun seiner Anwendung das Recht
einräumen, auf andere Komponenten zugreifen zu dürfen. In jeder XML-Datei befi ndet sich
ein <Context>-Element. Dessen Attribut crossConnect, das den Standardwert false hat,
muss explizit auf true gesetzt werden. Die XML-Datei für die zweite Web-Komponente sieht
damit wie folgt aus:
<Context path="/application2" reloadable="true"
docBase="C:\Users\oechsle\EclipseWorkspace\application2"
workDir="C:\Users\oechsle\EclipseWorkspace\application2\work"
crossContext="true"/>
Wenn man Zugriff auf einen anderen ServletContext hat, dann ist es nicht nur möglich,
über setAttribute, removeAttribute und getAttribute auf dem Speicher der anderen Anwen-
dung zu arbeiten, sondern man kann sich damit auch wieder einen RequestDispatcher von
diesem anderen ServletContext geben lassen und damit die HHTP-Anfrage an ein Servlet
der anderen Anwendung weiterleiten. In Listing 12.5 wird diese Möglichkeit genutzt. Nach
dem Erniedrigen des Zählers wird wieder das DisplayServlet der ersten Web-Komponente
aktiviert, um eine Web-Seite mit dem aktuellen Zählerstand und den beiden Buttons zu
erzeugen.
Listing 12.5 Klasse DecrementServlet
package javacomp.servlets.application2;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import javacomp.servlets.application1.Counter;
@WebServlet("/decrement")
public class DecrementServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
 
Search WWH ::




Custom Search