Dieser Artikel teilt den Lebenszyklus und das Arbeitsprinzip von Servlet als Referenz. Der spezifische Inhalt ist wie folgt
Der Dienerlebenszyklus ist in drei Phasen unterteilt:
1. Rufen Sie die Init () -Methode in der Initialisierungsstufe auf
2. Rufen Sie die Methode service () als Antwort auf die Kundenanforderung an
3. CALL DESTREL () -Methode in der Terminationsphase
Servlet -Initialisierungsphase:
In den folgenden Momenten lädt der Servlet Container das Servlet:
1. Wenn der Servlet -Behälter beginnt, werden einige Servlets automatisch geladen. Um es zu implementieren, müssen Sie nur den folgenden Code zwischen <servlet> </servlet> in der Datei web.xml hinzufügen:
<Loadon-Startups> 1 </loadon-startup>
2. Nachdem der Servlet -Container gestartet wurde, sendet der Kunde zum ersten Mal eine Anfrage an den Servlet
3. Nachdem die Servlet -Klassendatei aktualisiert wurde, laden Sie das Servlet neu laden
Nach dem Laden des Servlets erstellt der Servlet -Container eine Servlet -Instanz und ruft die Init () -Methode des Servlets für die Initialisierung auf. Die Init () -Methode wird nur einmal während des gesamten Lebens eines Servlets bezeichnet.
Wie Servlets funktionieren:
Lassen Sie uns zunächst kurz den Prozess des Empfangens und Beantwortens von Kundenanfragen erläutern. Erstens sendet der Kunde eine Anfrage. Das Servlet ruft die Methode service () auf, um auf die Anfrage zu antworten. Es ist durch den Quellcode zu sehen. Die Methode service () entspricht der Anforderungsmethode. Wählen Sie, um DoGet, Dopost und andere Methoden aufzurufen, und geben Sie dann die entsprechende Methode ein, um die methode logische Ebene aufzurufen, um die Antwort auf den Kunden zu realisieren. Es gibt keine Methoden wie DoGet, Dopost usw. in der Servlet -Schnittstelle und GenericServlet. Diese Methoden sind im HTTPServlet definiert, aber alle geben Fehlerinformationen zurück. Daher müssen wir jedes Mal, wenn wir ein Servlet definieren, Methoden wie DoGet oder Dopost implementieren.
Jedes benutzerdefinierte Servlet muss die Servlet -Schnittstelle implementieren. In der Servlet -Schnittstelle werden fünf Methoden definiert, unter denen die drei wichtigen Methoden des Servlets, nämlich die oben erwähnten Methoden init (), service () und destroy () beinhalten. GenericServlet ist ein allgemeines, nicht spezifisch für ein Protokoll, das Servlet, das die Servlet -Schnittstelle implementiert. HttpServlet erbt von GenericServlet, so dass HttpServlet auch die Servlet -Schnittstelle implementiert. Wenn wir also ein Servlet definieren, müssen wir nur das httpServlet erben.
Die Servlet -Schnittstelle und das GenericServlet sind für kein Protokoll spezifisch, während HTTPServlet eine Klasse für das HTTP -Protokoll ist. Die Methode für service () wird im HTTPServlet implementiert, und das angeforderte ServletRequest und die ServletResponse sind gezwungen, die gefragte Servletrequest und servletRequest und servletResponse zu konvertieren und HTTTPREPONSPONSPONSE zu verwandeln.
public void Service (servletRequest req, servletResponse res) löst ServletException aus, IoException {httprequest Anfrage; HttPresponse -Antwort; try {req = (httprequest) Anfrage; res = (httPesponse) Antwort; } catch (classCastException e) {neue servleTexception ("Non-Http Request-Antwort"); } Service (Anfrage, Antwort);}Der Code ruft schließlich die Methode des HTTPServlet -eigenen Dienstes (Anfrage, Antwort) auf und dann die entsprechende DOXXX -Methode gemäß der Anforderung, da die Doxxx -Methode in der HTTPServlet Fehlerinformationen zurückgibt.
Protected void dodget (httpServletRequest Res, httpServletResponse resp) löst ServletException aus, iOException {String protocol = req.getProtocol (); String msg = isstrings.getString ("http.method_get_not_supported"); if (protocol.equals ("1.1")) {resp.sendError (httpServletResponse.sc.method.not.lowed, msg); } esle {resp.sendError (httpServletResponse.sc_bad_request, msg); }}Wir müssen diese Methoden also in einem benutzerdefinierten Servlet überschreiben!
Vor dem Quellcode gibt es kein Geheimnis!
Servlet Antwortanforderungsphase:
Für Benutzeranfragen zum Erreichen des Servlets erstellt der Servlet -Container ein ServletRequest -Objekt und ein ServletResponse -Objekt, das für diese Anforderung spezifisch ist, und rufen dann die Servlet -Service -Methode auf. Die Servicemethode erhält die Kundenanforderungsinformationen aus dem ServletRequest -Objekt, verarbeitet die Anforderung und gibt Antwortinformationen über das ServletResponse -Objekt an den Kunden zurück.
Für Tomcat wird die übergebenen Parameter in einen Hashtable gelegt, und die Definition des Hashtabels lautet:
Die Codekopie lautet wie folgt: Private Hashtable <String String []> paramHashStringArray = new Hashtable <String String []> ();
Dies ist eine Schlüsselwertkarte von String-> String [].
Hashmap -Thread ist nicht sicher, Hashtable -Thread ist sicher.
Servlet -Beendigungsphase:
Wenn die Webanwendung beendet wird oder der Servlet -Container -Laufen endet oder der Servlet -Container eine neue Instanz des Servlets neu lädt, ruft der Servlet -Container zunächst die Methode Destroy () des Servlets auf, die die vom Servlet in der Districle () -Methode besetzten Ressourcen freilegen kann.
Wann wird ein Servlet erstellt:
1. Standardmäßig erstellt der Webcontainer, wenn der Web -Client zum ersten Mal Zugriff auf ein Servlet fordert, eine Instanz des Servlets.
2. Wenn im Element <Servlet> in der Datei web.xml ein <-load-on-startup> untergeordnetes Element angegeben ist, erstellt und initialisiert der Servlet-Container das Servlet-Objekt in der Reihenfolge, wenn Sie den Webserver starten.
Hinweis: In der Datei web.xml haben einige Servlets nur <serlvet> Elemente und haben keine Elemente <Servlet-Mapping>, sodass wir nicht über die URL auf diese Servlets zugreifen können. Dieses Servlet konfiguriert normalerweise ein <Lad-on-Startup> untergeordnetes Element im <servlet> -Element, so dass der Container diese Servlets automatisch lädt und die Init () -Methode aufruft, wenn er gestartet wird, wobei einige globale Initialisierungsarbeiten ausgeführt werden.
Wann wird die Webanwendung gestartet:
1. Wenn der Servlet -Container gestartet wird, werden alle Webanwendungen gestartet.
2. Der Controller startet die Webanwendung
Vergleich zwischen Servlet und JSP:
Es gibt viele Ähnlichkeiten, die dynamische Webseiten generieren können.
Der Vorteil von JSP besteht darin, dass es in der Webseitenproduktion gut ist und es intuitiver ist, dynamische Seiten zu generieren, aber der Nachteil ist, dass es nicht einfach ist, zu verfolgen und zu beheben.
Servlet ist eine reine Java -Sprache und ist gut in der Verarbeitung von Prozessen und Geschäftslogik. Der Nachteil ist, dass es nicht intuitiv ist, dynamische Webseiten zu generieren.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.