Servlet Lebenszyklus
Der Servlet-Lebenszyklus kann als der gesamte Prozess von der Erstellung bis zur Zerstörung definiert werden. Das Folgende ist der Prozess, dem ein Servlet folgt:
- Nach der Servlet-Initialisierung rufen Sie dieinit ()Methode auf.
- Das Servlet ruft dieservice()Methode auf, um Client-Anfragen zu verarbeiten.
- Vor der Zerstörung des Servlets rufen Sie diedestroy()Methode auf.
- Schließlich wird das Servlet vom Garbage Collector der JVM eingesammelt.
Nun wollen wir die Lebenszyklusmethoden im Detail besprechen.
init()-Methode
Die init-Methode ist so konzipiert, dass sie nur einmal aufgerufen wird. Sie wird aufgerufen, wenn das Servlet zum ersten Mal erstellt wird, und wird bei jeder späteren Benutzeranfrage nicht erneut aufgerufen. Daher wird sie für eine einmalige Initialisierung verwendet, genau wie die init-Methode von Applet.
Das Servlet wird erstellt, wenn ein Benutzer zum ersten Mal die URL aufruft, die dem Servlet entspricht, aber Sie können auch angeben, dass das Servlet geladen wird, wenn der Server zum ersten Mal gestartet wird.
Wenn ein Benutzer ein Servlet aufruft, wird eine Servlet-Instanz erstellt, und jede Benutzeranfrage erzeugt einen neuen Thread, der zum geeigneten Zeitpunkt an die doGet- oder doPost-Methode ü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 lautet wie folgt:
public void init() throws ServletException {
// 初始化代码...
}
service()-Methode
Die service()-Methode ist die Hauptmethode zum Ausführen der eigentlichen Aufgaben. Der Servlet-Container (d. h. der Webserver) ruft die service()-Methode auf, um Anfragen von Clients (Browsern) zu verarbeiten, und schreibt die formatierte Antwort zurück an die Clients.
Jedes Mal, wenn der Server eine Servlet-Anfrage empfängt, erstellt der Server einen neuen Thread und ruft den service auf. Die service()-Methode überprüft den HTTP-Anfragetyp (GET, POST, PUT, DELETE usw.) und ruft Methoden wie doGet, doPost, doPut, doDelete zum geeigneten Zeitpunkt auf.
Im Folgenden sind die Merkmale dieser Methode aufgeführt:
public void service(ServletRequest request,
ServletResponse response)
throws ServletException, IOException{
}
Die Methode service() wird vom Container aufgerufen. Die Methode service ruft Methoden wie doGet, doPost, doPut, doDelete zu geeigneten Zeitpunkten auf. Daher müssen Sie nichts mit der Methode service() tun; Sie müssen nur doGet() oder doPost() entsprechend dem Anforderungstyp des Clients überschreiben.
Die Methoden doGet() und doPost() sind die am häufigsten verwendeten Methoden bei jeder Dienstanforderung. Im Folgenden sind die Merkmale dieser beiden Methoden aufgeführt.
doGet()-Methode
GET-Anfragen stammen von einer normalen Anfrage an eine URL oder von einem HTML-Formular, das kein METHOD angibt, und werden von der doGet()-Methode verarbeitet.
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
doPost()-Methode
POST-Anfragen stammen von einem HTML-Formular, das METHOD ausdrücklich als POST angibt, und werden von der doPost()-Methode verarbeitet.
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
destroy()-Methode
Die destroy()-Methode wird nur einmal aufgerufen, am Ende des Servlet-Lebenszyklus. Die destroy()-Methode ermöglicht es Ihrem Servlet, Datenbankverbindungen zu schließen, Hintergrundthreads anzuhalten, Cookie-Listen oder Klickzähler auf die Festplatte zu schreiben und andere ähnliche Bereinigungsaktivitäten durchzuführen.
Nachdem die destroy()-Methode aufgerufen wurde, wird das Servlet-Objekt für die Garbage Collection markiert. Die destroy-Methode ist wie unten dargestellt definiert:
public void destroy() {
// 终止化代码...
}
Architekturdiagramm
Das folgende Diagramm zeigt ein typisches Szenario des Servlet-Lebenszyklus.
- Die erste am Server eintreffende HTTP-Anfrage wird an den Servlet-Container delegiert.
- Der Servlet-Container lädt das Servlet, bevor er die Methode service() aufruft.
- Der Servlet-Container verarbeitet dann mehrere von mehreren Threads erzeugte Anfragen, wobei jeder Thread die Methode service() einer einzelnen Servlet-Instanz ausführt.