it-swarm.com.de

Servlet-Zerstörungsmethode aufrufen

Laut dem Link http://www.xyzws.com/Servletfaq/when-is-destroy-of-servlets-called/20 ist der Grund für das Aufrufen der destroy-Methode, wenn das Servlet hasn hat hat schon lange keine Anfrage .

Ich dachte, es könnte Seiten geben, die nicht lange angerufen werden. Heißt das also, dass zerstören aufgerufen wird und sie nicht mehr verwendet werden?

Eigentlich wurde mir diese Frage im Interview gestellt und er sagte mir, dass die Zerstörungsmethode nur dann aufgerufen wird, wenn der Server heruntergefahren ist.

Ich schätze jede Hilfe dazu.

16
Anand

SO VIEL ICH WEISS,

Im Java-Servlet soll destroy() nicht vom Programmierer aufgerufen werden. Wenn es jedoch aufgerufen wird, wird es ausgeführt. Die implizite Frage ist, wird das Servlet zerstört? Nein es wird nicht. Die destroy()-Methode soll ein Java-Servlet nicht zerstören.

Die Bedeutung von destroy() im Java-Servlet ist, dass der Inhalt unmittelbar vor der Entscheidung ausgeführt wird, wenn der Container das Servlet zerstören möchte. Wenn Sie jedoch die Methode destroy() selbst aufrufen, wird der Inhalt ausgeführt und der entsprechende Prozess wird fortgesetzt. Bei dieser Frage wird die destroy() ausgeführt und die Servlet-Initialisierung abgeschlossen.

Die destroy()-Methode wird zuerst aufgerufen, dann wird Servlet aus dem Container entfernt und schließlich wird Müll aufgesammelt. Die destroy()-Methode enthält im Allgemeinen Code, um Ressourcen wie eine JDBC-Verbindung freizugeben, die nicht als Garbage-Collection erfasst werden.

9
Bhavesh Shah

Paar Fälle:

  1. wenn der Container heruntergefahren wird oder die Anwendung heruntergefahren wird;
  2. wenn der Container entscheidet, dass der Speicher knapp wird;
  3. wenn dieses Servlet seit langem keine Anfrage mehr hat.

Wie in der Dok

Wird vom Servlet-Container aufgerufen, um einem Servlet mitzuteilen, dass das Servlet außer Betrieb genommen wird. Diese Methode wird nur aufgerufen, wenn alle Threads innerhalb der Servicemethode des Servlets beendet wurden oder eine Zeitüberschreitung vergangen ist. Nachdem der Servlet-Container diese Methode aufgerufen hat, ruft er die Servicemethode für dieses Servlet nicht erneut auf.

3
Tony

Aus der Spezifikation (The Servlet Interface -> Servlet Life Cycle -> End of Service):

Wenn die destroy-Methode für eine Servlet-Instanz aufgerufen wird, kann der Container keine anderen Anforderungen an diese Instanz des Servlets weiterleiten. Wenn der Container das Servlet erneut aktivieren muss, muss dies mit einer neuen Instanz der Servlet-Klasse erfolgen.

Die Spezifikation bezieht sich auf eine bestimmte Instanz des Servlets, die zerstört wird.

Heißt das also, dass zerstören aufgerufen wird und sie nicht mehr verwendet werden?

Das bedeutet nicht, dass das Servlet, dessen Instanz zerstört wird, niemals verwendet wird. Nur diese bestimmte Instanz wird nicht verwendet, da Müll gesammelt worden wäre. Wenn eine Anforderung für dieses Servlet eingeht, erstellt der Container eine neue Instanz dieses Servlets und führt alle Lebenszyklusaktionen aus, bis die Anforderung erneut erfüllt wird.

3
Vikdor

Dies ist eines dieser klassischen Dinge im Vergleich zur Implementierung. Servlet-Container wie Tomcat dürfen laut Serverspezifikation einen Pool von Servlet-Objekten verwalten und diese erstellen und zerstören, wenn die Last nach oben oder unten geht. In dieser Art von Setup wird destroy aufgerufen, wenn die bestimmte Instanz nicht mehr benötigt wird. Es ist sogar legal, für jede Anforderung eine neue Instanz zu erstellen, die unmittelbar vor der Verarbeitung der Anforderung aufgerufen wird und unmittelbar danach zerstört wird.

In der Praxis enthält jedoch praktisch jeder Servlet-Container genau eine Instanz jedes Servlets. Da Servlets fadensicher sein müssen, ist dies auch völlig in Ordnung. In diesem Szenario wird destroy nur aufgerufen, wenn der Kontext heruntergefahren wird.

Ich kann mir nicht viele Fälle vorstellen, in denen Sie die Servlets zusammenfassen möchten, aber dies ist in der Spezifikation zulässig.

0
EdC

Die Zerstörungsmethode von Servlet ist ein Rückruf. Dies sind die Funktionen, die vom Container aufgerufen werden, wenn ein bestimmtes Ereignis eintrifft (in diesem Fall wird das Servlet zerstört). Daher besteht der ganze Zweck darin, wenn Sie etwas tun möchten (z. B.: Bereinigen der Ressource), können Sie dies unter diesem Rückruf tun.

0
Sudip Bhandari

Servlet.destroy () Javadoc sagt: "Vom Servlet-Container aufgerufen, um einem Servlet mitzuteilen, dass das Servlet außer Betrieb genommen wird". Es gibt nicht an, in welchen Situationen ein Servlet "außer Betrieb genommen" werden würde, es ist einfach ein Ereignis, auf das Sie bei Bedarf reagieren können. Beispielsweise möchten Sie möglicherweise einige Ressourcen, die Sie geöffnet haben, schließen oder einen bestimmten Status für den Speicher beibehalten.

Der offensichtlichste Grund dafür ist, dass der Servlet-Container heruntergefahren wird. Ein Container könnte jedoch ebenso gut entscheiden, dass es an der Zeit ist, ein Servlet zu entladen, da es nicht in einem Monat verwendet wurde und nur Ressourcen verbraucht. Dieses Verhalten hängt von der Implementierung ab, und Sie sollten sich (als Servlet-Designer) nicht darum kümmern.

0
Stik

Das hängt ganz von der Implementierung des verwendeten Servlet-Containers ab. Wenn Ihr Servlet-Container sehr sparsam ist, um Ressourcen zu sparen, kann er das Servlet zerstören, das längere Zeit nicht in Betrieb ist.

Auf Seite 22 der Servlet-Spezifikation 2.5 finden Sie Folgendes: "Wenn der Servlet-Container feststellt, dass ein Servlet aus dem Service entfernt werden soll, ruft er die destroy-Methode der Servlet-Schnittstelle auf, damit das Servlet alle verwendeten Ressourcen freigeben und speichern kann Jeder permanente Status. Beispielsweise kann der Container dies tun, wenn er Speicherressourcen sparen möchte oder wenn er heruntergefahren wird. "

0

Aus der Servlet-Spezifikation: -

die destroy () -Methode wird vom Servlet-Container aufgerufen, um einem Servlet mitzuteilen, dass das Servlet außer Betrieb genommen wird. Diese Methode wird nur aufgerufen, wenn alle Threads innerhalb der Servicemethode des Servlets beendet wurden oder eine Zeitüberschreitung vergangen ist. Nachdem der Servlet-Container die destroy () -Methode aufgerufen hat, ruft er die Service-Methode nicht erneut bei "THIS SERVLET" auf.

Der Servlet-Container ist nicht erforderlich, um ein Servlet für einen bestimmten Zeitraum geladen zu halten. Eine Servlet-Instanz kann für einen Zeitraum von Millisekunden, für die Lebensdauer des Servlet-Containers (dies kann eine Anzahl von Tagen, Monaten oder Jahren sein) oder eine beliebige Zeitspanne dazwischen in einem Servlet-Container aktiv gehalten werden.

Wenn der Servlet-Container feststellt, dass ein Servlet aus dem Dienst entfernt werden soll, ruft er die destroy-Methode der Servlet-Schnittstelle auf, damit das Servlet alle von ihm verwendeten Ressourcen freigeben und den permanenten Status speichern kann. Beispielsweise kann der Container dies tun, wenn er Speicherressourcen sparen möchte oder wenn er heruntergefahren wird.

Bevor der Servlet-Container die destroy-Methode aufruft, muss er zulassen, dass Threads, die derzeit in der Servicemethode des Servlets ausgeführt werden, die Ausführung abschließen oder ein durch den Server definiertes Zeitlimit überschreiten.

Wenn die destroy-Methode für eine Servlet-Instanz aufgerufen wird, kann der Container keine anderen Anforderungen an diese Instanz des Servlets weiterleiten.

Wenn der Container das Servlet erneut aktivieren muss, muss dies mit einer neuen Instanz der Servlet-Klasse geschehen.