Java Reference
In-Depth Information
ren, wird es in gleicher Weise erzeugt wie in Listing 12.3 zu sehen. Anschließend muss eine
Web-Seite erzeugt werden, die im einfachsten Fall nur einen Text der Art „Änderung wurde
durchgeführt“ enthalten könnte. Etwas komfortabler wäre es, wenn zusätzlich der neue
Zählerwert angezeigt wird. Wenn dann aber anschließend der Zähler nochmals verä ndert
werden soll, dann müsste man zuerst wieder auf die Seite, die die Submit-Buttons enthält,
zurücknavigieren. Bequemer ist es, wenn als Reaktion auf das Erhöhen und Zurücksetzen
wieder die Seite aus Bild 12.3 erscheint. Dort sieht man den aktuellen Zählerstand und
kann direkt wieder eine Aktion anstoß en. Man könnte nun den Code zur Generierung des
HTML-Textes aus Listing 12.3 in die beiden anderen Servlets kopieren. Ich glaube, es ist
unnötig zu betonen, dass dies nicht die beste aller denkbaren Lösungen darstellt.
Da die Servlet-Objekte durch das Framework erzeugt werden, hat man in einem Servlet
zwar keine Referenz auf die anderen Servlets. Das Framework bietet aber an, eine HTTP-
Anfrage an ein anderes Servlet weiterzuleiten, wobei das zuerst aktivierte Servlet vor dem
Weiterleiten durchaus noch eigene Aktionen ausführen kann. Das Servlet zum Erhöhen des
Zählers macht von dieser Möglichkeit Gebrauch (s. Listing 12.4).
Listing 12.4 Klasse IncrementServlet
package javacomp.servlets.application1;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
@WebServlet("/increment")
public class IncrementServlet extends HttpServlet
{
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException
{
ServletContext myContext = getServletContext();
Counter counter;
synchronized(myContext)
{
counter = (Counter)myContext.getAttribute("counter");
if(counter == null)
{
counter = new Counter();
myContext.setAttribute("counter", counter);
}
}
counter.increment();
RequestDispatcher dispatcher =
myContext.getRequestDispatcher("/display");
dispatcher.forward(request, response);
}
}
Wie dem Programmcode von Listing 12.4 entnommen werden kann, funktioniert das Weiter-
leiten so, dass man sich über das ServletContext-Objekt einen RequestDispatcher bescha
(dabei wie in @WebServlet die URL relativ zur Anwendung angibt) und auf dieses Request-
 
Search WWH ::




Custom Search