1. Beginnen wir mit dem Servlet Container: dem Servlet -Container, mit dem jeder am besten vertraut ist, Tomcat. Wie verwaltet Servlet Container Servlets?
Schauen wir uns zuerst das Containermodell von Tomcat an:
Aus der obigen Abbildung können wir sehen, dass der Behälter von Tomcat in vier Ebenen unterteilt ist. Der Container, der Servlets wirklich verwaltet, ist der Kontextcontainer, und ein Kontext entspricht einem Webprojekt
In Tomcats Containerebene ist der Kontextbehälter ein Container, der den Wrapper -Class -Wrapper (Standardwrapper) des Servlets im Container direkt verwaltet. Wie der Kontextbehälter ausgeführt wird, wirkt sich also direkt auf die Funktionsweise des Servlets aus.
Hier werde ich die Verpackungsklasse von Servlet erklären: Standardwrapper. Hier gibt es eine Frage, warum Servlet in Standardwrapper eingewickelt werden sollte, anstatt direkt ein Servlet -Objekt zu sein. Da Standardwrapper Teil des Tomcat -Containers ist, hat er die Eigenschaften des Containers, und Servlet ist ein unabhängiger Webentwicklungsstandard und sollte nicht stark in Tomcat gekoppelt werden.
Abgesehen von dem Einwickeln des Servlets in StandardWrapper und zum Hinzufügen in den Kontext als Subcontainer werden alle anderen Web.xml -Eigenschaften in den Kontext analysiert, sodass der Kontextbehälter der Servlet -Container ist, der den Servlet wirklich ausführt. Eine Webanwendung entspricht einem Kontextcontainer. Die Konfigurationseigenschaften des Containers werden in der web.xml der Anwendung angegeben, sodass wir verstehen können, welche Rolle Web.xml spielt.
2. Das folgende beschreibt kurz das Arbeitsprojekt von Servlet:
Wenn ein Webserver mit dem Client interagiert, lautet der Arbeitsprozess von Servlet:
1. Machen Sie eine Anfrage an den Webserver im Client
2. Der Webserver sendet es nach Empfang der Anfrage an den Servlet
3. Der Servlet -Container generiert ein Instanzobjekt dafür und ruft die entsprechende Methode in der Servlet -API auf, um die Client HTTP -Anforderung zu verarbeiten, und gibt das verarbeitete Antwortergebnis dann an den Webserver zurück.
4. Der Webserver sendet die vom Servlet -Instanzobjekt empfangene Antwortstruktur an den Client zurück.
3. Der Lebenszyklus des Servlet:
Wie in der obigen Abbildung gezeigt, kann der Lebenszyklus eines Servlets in vier Stufen unterteilt werden, nämlich die Ladeklasse und die Erstellungsstufe, die Initialisierungsstufe, die Servicestufe und die Instanzzerstörungsstufe. Das Folgende ist eine detaillierte Beschreibung der Programmieraufgaben und Vorsichtsmaßnahmen für jede Phase.
1. Erstellen Sie eine Servlet -Instanz:
Standardmäßig werden Servlet -Instanzen erstellt, wenn die erste Anfrage eintrifft und später wiederverwendet wird. Wenn einige Servlets komplexe Vorgänge erfordern, die beim Laden der Initialisierung abgeschlossen werden müssen, z. B. das Öffnen von Dateien, die Initialisierung von Netzwerkverbindungen usw., können Sie den Server beim Starten einer Instanz des Servlets erstellen. Die spezifische Konfiguration ist wie folgt:
<servlet> <servlet-name> timesservlet </servlet-name> <servlet-classe> com.allanlxf.servlet.basic.timeservlet </servlet-classe> <Load-auf-Startups> 1 </load-on-Startup> </servlet>
Erstellen Sie die relevante Klassenstruktur des Servlet -Objekts:
2. Initialisierung
Sobald die Servlet -Instanz erstellt wurde, ruft der Webserver automatisch die Init -Methode (ServletConfig) -Methode auf, um das Servlet zu initialisieren. Die Methodenparameterkonfiguration enthält die Konfigurationsinformationen des Servlets, z. B. den vom Server erstellten Initialisierungsparameter.
I. Wie konfigurieren Sie die Initialisierungsparameter von Servlet?
Im Definitions -Tag des Servlets in Web.xml, zum Beispiel:
<servlet> <servlet-name> timesservlet </servlet-name> <servlet-classe> com.allanlxf.servlet.basic.timeservlet </servlet-classe> <init-param> <par AM-Name> Benutzer </param-name> <param-value> userername </param-value> </init-param> <init-param . . </param-value> </init-param> </servlet>
Die beiden Initialisierungsparameter des Benutzers und des Blogs sind mit den Werten von Benutzername und http: // konfiguriert. . . Auf diese Weise müssen Sie den Servlet -Code nicht ändern, um den Benutzernamen und die Blog -Adresse in Zukunft zu ändern, sondern auch die Konfigurationsdatei ändern.
Ii. Wie lese ich die Initialisierungsparameter eines Servlets?
ServletConfig definiert die folgende Methode, um die Informationen der Initialisierungsparameter zu lesen:
öffentliche Zeichenfolge GetInitParameter (String -Name)
Parameter: Der Name des Initialisierungsparameters.
Rückgabe: Der Wert des Initialisierungsparameters, falls nicht konfiguriert, gibt NULL zurück.
Anzahl der Ausführungszeiten von III.init (ServletConfig) Methode
Diese Methode wird während des Lebenszyklus eines Servlets einmal ausgeführt.
IV.Init (ServletConfig) Methode und Thread
Diese Methode wird in einer einzelnen Thread -Umgebung ausgeführt, sodass Entwickler nicht die Sicherheitsprobleme von Threads berücksichtigen müssen.
V.Init (ServletConfig) Methode und Ausnahme
Während der Ausführung kann diese Methode eine ServletException veranstalten, um den Webserver darüber zu informieren, dass die Servlet -Instanz nicht initialisiert wurde. Sobald eine ServletException geworfen wurde, überreicht der Webserver die Client -Anforderung nicht an die Servlet -Instanz zur Verarbeitung, sondern meldet die Initialisierungsfehlerausnahmeinformationen an den Client, die aus dem Speicher zerstört werden. Wenn eine neue Anfrage gestellt wird, erstellt der Webserver eine neue Servlet -Instanz und führt den Initialisierungsvorgang der neuen Instanz durch.
3. Service
Sobald die Servlet -Instanz erfolgreich erstellt und initialisiert wurde, kann die Servlet -Instanz vom Server verwendet werden, um die Anfrage des Clients zu erstellen und eine Antwort zu generieren. Während der Servicephase ruft der Webserver die Methode der Service (ServletRequest Request, ServletResponse Response) der Instanz auf. Das Anforderungsobjekt und das Antwortobjekt werden vom Server erstellt und an die Servlet -Instanz übergeben. Das Anforderungsobjekt verkauft die vom Client an den Server gesendeten Informationen, und das Antwortobjekt verkörpert die vom Server an den Client gesendeten Informationen.
I. Verantwortlichkeiten der Service () -Methode
Die methode service () ist die Kernmethode des Servlets. Die Geschäftslogik des Kunden sollte innerhalb dieser Methode ausgeführt werden. Der Entwicklungsprozess einer typischen Servicemethode lautet:
Analysieren Sie die Client-Anfrage-> Geschäftslogik-> Ausgangsantwort auf dem Client aus
II.Service () Methode und Thread
Um die Effizienz zu verbessern, erfordert die Servlet -Spezifikation, dass eine Servlet -Instanz in der Lage sein muss, mehrere Kundenanfragen gleichzeitig zu starten. Das heißt, die Service () -Methode wird in einer Umgebung mit mehreren Threads ausgeführt, und die Servlet-Entwickler müssen die Gewindesicherheit der Methode sicherstellen.
Iii.service () Methode und Ausnahme
Die methode service () kann servletException und ioException während der Ausführung werfen. Unter ihnen kann ServletException während der Verarbeitung von Client -Anfragen, wie z. B. die angeforderte Ressource, nicht verfügbar, die Datenbank nicht verfügbar sind usw. Sobald die Ausnahme ausgeliefert ist, muss der Container das Anforderungsobjekt recyceln und die Ausnahmeinformationen des Kunden melden. IOException zeigt einen Eingangs- und Ausgangsfehler an. Der Programmierer muss sich nicht um die Ausnahme kümmern und meldet sie direkt an den Client vom Container.
Programmiermaßnahmen: Vorsichtsmaßnahmen:
1) Wenn der Server -Thread die Init () -Methode der Servlet -Instanz ausführt, können alle Client -Service -Threads die Methode der service () der Instanz nicht ausführen, und kein Thread kann die Methode der Destroy () der Instanz ausführen. Daher funktioniert die Init () -Methode des Servlets in einer einzelnen Thread -Umgebung, und Entwickler müssen keine Sicherheitsprobleme von Threads berücksichtigen.
2) Wenn der Server mehrere Anfragen vom Client empfängt, wird der Server die DISGEA () -Methode der Servlet -Instanz in einem separaten Client -Service -Thread ausgeführt, um jedem Client zu bedienen. Zu diesem Zeitpunkt führen mehrere Threads gleichzeitig die service () -Methode derselben Servlet -Instanz aus, sodass Probleme mit der Sicherheit von Threads berücksichtigt werden müssen.
3) Bitte beachten Sie, dass die Methode Service (), obwohl in einer Umgebung mit mehreren Threaden ausgeführt wird, die Methode jedoch nicht erforderlich ist. Stattdessen hängt es von der Art der Ressourcen ab, die diese Methode während der Ausführung zugänglich macht und wie sie zugreift. Die Analyse ist wie folgt:
ich. Wenn die Methode Service () nicht auf die Servlet -Mitgliedsvariablen oder globalen Ressourcen wie statische Variablen, Dateien, Datenbankverbindungen usw. zugreift, verwendet sie nur die eigenen Ressourcen des aktuellen Threads, z. B. vorübergehende Variablen, Anforderungen und Antwortobjekte, die nicht auf die globalen Ressourcen verweisen. Diese Methode selbst ist thread-sicher und erfordert keine Synchronisationssteuerung.
ii. Wenn die Dienstleistung () auf die Diener-Mitgliedsvariable zugreift, die Operation in der Variablen ist jedoch eine schreibgeschützte Operation, ist die Methode selbst mit Thread-sicher und benötigt keine Synchronisierungsregelung.
III. Wenn auf die Variable service () zugreift auf die Servlet -Mitgliedsvariable, und der Betrieb der Variablen gelesen und geschrieben wird, ist in der Regel eine Synchronisierungssteuerungsanweisung erforderlich.
iv. Wenn auf die Service () -Methode auf eine globale statische Variable zugreift. Wenn möglicherweise andere Threads im System zugreifen, die gleichzeitig auf die statische Variable zugreifen, ist normalerweise eine Synchronisierungssteuerungsanweisung erforderlich, wenn sowohl Lese- als auch Schreibvorgänge vorhanden sind.
v. Wenn die methodische methode auf globale Ressourcen wie Dateien, Datenbankverbindungen usw. zugreift, müssen in der Regel Synchronisierungssteuerungsanweisungen hinzugefügt werden.
4. Zerstörung
Wenn der Webserver der Ansicht ist, dass die Servlet -Instanz nicht erforderlich ist, z. B. das Nachladen von Anwendungen oder das Herunterfahren des Servers, wurde auf das Servlet lange nicht zugegriffen. Der Server kann die Instanz aus dem Speicher zerstören (auch als Deinstallation genannt). Der Webserver muss sicherstellen, dass die Methode DESTRECT () der Servlet -Instanz vor der Deinstallation der Servlet -Instanz aufgerufen wird, um die vom Servlet angeforderten Ressourcen zu recyceln oder eine andere wichtige Verarbeitung durchzuführen.
Der Webserver muss sicherstellen, dass alle Threads, die in der methode () der Instanz -Ausnahme ausgeführt werden, alle Threads für einen bestimmten Zeitraum auf dem Aufruf von Destroy () -Methoden aufrufen oder auf diese Threads warten. Sobald die Methode für Destroy () ausgeführt wurde, lehnt der Webserver alle neuen Anforderungen für die Servlet -Instanz ab. Die Zerstörungsmethode () -Methode und die Servlet -Instanz können Müll gesammelt werden.
4. Flowdiagramm von Servlet Parsing Client HTTP -Anfrage:
1. Der Web -Client gibt eine HTTP -Anfrage an den Servlet -Container aus.
2. Der Servlet -Container analysiert die Web -HTTP -Anfrage.
3. Der Servlet -Container erstellt ein HTTPREquest -Objekt, das die HTTP -Anforderungsinformationen in diesem Objekt zusammenfasst.
V.
5. Servlet -Container (Wenn das aufgerufene Servlet beim Server -Start nicht erstellt wird, erstellen Sie zuerst eine Servlet -Instanz und rufen Sie die Init () -Methode auf, um das Objekt zu initialisieren) Rufen Sie die methode () () des httpServlets auf und übergeben die Parameter des HTTPRequest- und HTTPesponse -Objekts als Service -Methoden an das HTTPServlet -Objekt.
6. HttpServlet ruft die relevanten Methoden von httprequest auf, um HTTP -Anforderungsinformationen zu erhalten.
7. HttpServlet ruft die relevanten Methoden von HttPresponse auf, um Antwortdaten zu generieren.
8. Der Servlet -Container übergibt das HTTPServlet -Antwortergebnis an den Web -Client.
Der obige Artikel basiert auf dem Ausführungsprinzip und dem Lebenszyklus von Servlet (umfassende Analyse) ist der gesamte Inhalt, den ich mit Ihnen teile. Ich hoffe, es kann Ihnen eine Referenz geben und ich hoffe, Sie können Wulin.com mehr unterstützen.