English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 生命周期

Der Lebenszyklus des Servlets kann als der gesamte Prozess von der Erstellung bis zur Zerstörung definiert werden. Hier ist der Prozess, den das Servlet befolgt:

  • Wird nach der Initialisierung des Servlets aufgerufen init () Methode.

  • Servlet-Aufruf service() Methode, um die Anfragen des Clients zu verarbeiten.

  • Wird vor dem Zerstören des Servlets aufgerufen  destroy() Methode.

  • Schließlich wird das Servlet vom JVM-Garbage Collector recycelt.

Lassen Sie uns nun detailliert über die Lebenszyklusmethoden sprechen.

init() Methode

Der init-Method wird so gestaltet, dass er nur einmal aufgerufen wird. Er wird beim ersten Erstellen des Servlets aufgerufen und wird bei jeder nachfolgenden Benutzeranfrage nicht erneut aufgerufen. Daher wird er für eine einmalige Initialisierung verwendet, ähnlich wie die init-Methode von Applets.

Ein Servlet wird erstellt, wenn der Benutzer zum ersten Mal die URL aufruft, die dem Servlet entspricht, aber Sie können auch angeben, dass das Servlet beim ersten Start des Servers geladen wird.

Wenn ein Benutzer einen Servlet aufruft, wird eine Servlet-Instanz erstellt, und jeder Benutzeranruf erzeugt einen neuen Thread, der zu gegebener Zeit an doGet oder doPost übergeben wird. Die init() Methode erstellt oder lädt einfach einige Daten, die während des gesamten Lebenszyklus des Servlets verwendet werden.

Die Definition der init Methode ist wie folgt:

public void init() throws ServletException {
  // Initialisierungscode...
}

service() Methode

Die service() Methode ist die Hauptmethode zur Ausführung tatsächlicher Aufgaben. Der Servlet-Container (d.h. der Webserver) ruft die service() Methode auf, um Anfragen vom Client (Browser) zu bearbeiten und formatierte Antworten zurückzuschreiben.

Bei jedem Empfang einer Servlet-Anfrage durch den Server wird ein neuer Thread erstellt und der Service aufgerufen. Die service() Methode überprüft den HTTP-Anfrage-Typ (GET, POST, PUT, DELETE usw.) und ruft zu gegebener Zeit doGet, doPost, doPut, doDelete und andere Methoden auf.

Nachfolgend sind die Eigenschaften dieser Methode aufgeführt:

public void service(ServletRequest request, 
                    ServletResponse response) 
      throws ServletException, IOException{
}

Die service() Methode wird vom Container aufgerufen, die service Methode ruft zu gegebener Zeit doGet, doPost, doPut, doDelete und andere Methoden auf. Daher müssen Sie nichts mit der service() Methode tun, Sie müssen lediglich doGet() oder doPost() basierend auf dem vom Client erhaltenen Anfrage-Typ überschreiben.

doGet() und doPost() sind die häufigsten Methoden bei jeder Service-Anfrage. Nachfolgend sind die Eigenschaften dieser beiden Methoden aufgeführt.

doGet() Methode

Eine GET-Anfrage stammt aus einer normalen Anfrage einer URL oder aus einem HTML-Formular ohne angegebenen METHOD, die von der doGet()-Methode bearbeitet wird.

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet-Code
}

doPost() Methode

POST-Anfragen kommen von einem HTML-Formular, das als METHOD POST spezifiziert ist und von der doPost() -Methode bearbeitet wird.

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet-Code
}

destroy() -Methode

Die destroy() -Methode wird nur einmal aufgerufen, am Ende des Servlet-Lebenszyklus. Die destroy() -Methode kann Ihre Servlet löschen, Datenbankverbindungen schließen, Hintergrundprozesse beenden, Cookie-Listen oder Click-Counter auf die Festplatte schreiben und andere ähnliche Bereinigungstätigkeiten durchführen.

Nach dem Aufruf der destroy() -Methode wird das Servlet-Objekt als Müllabfuhr markiert. Die destroy() -Methode ist wie folgt definiert:

  public void destroy() {
    // Terminierungscode...
  }

Architekturgegenstand

Das folgende Diagramm zeigt ein typisches Schema des Servlet-Lebenszyklus.

  • Die erste eingehende HTTP-Anfrage wird an den Servlet-Container delegiert.

  • Der Servlet-Container lädt den Servlet vor dem Aufruf der service() -Methode.

  • Dann verarbeitet der Servlet-Container mehrere Anfragen, die von mehreren Threads erzeugt werden, durch mehrere Threads, wobei jeder Thread eine einzige Servlet-Instanz des service() -Verfahrens ausführt.