Ich möchte eine Methode verwenden, die nach der Bereitstellung auf Server nur einmal aufgerufen wird [duplizieren]

7

Ich bin neu bei Servlets. Ich möchte eine Methode verwenden, die nach der Bereitstellung auf dem Server nur einmal aufgerufen wird. Ich schaute auf HttpServlet#init() . Aber ich habe herausgefunden, dass es bei jeder Anfrage aufgerufen wird. Habe ich das falsch verstanden? Was sind die Alternativen zu init() ?

    
mebada 02.03.2010, 15:44
quelle

3 Antworten

20

Nein, es wird nicht bei jeder Anfrage aufgerufen. Es wird nur während der Initialisierung des Servlets aufgerufen, was normalerweise nur ein einziges Mal während der Lebensdauer von webapp passiert. Siehe auch diese Antwort Für ein bisschen mehr Details, wie Servlets erstellt und ausgeführt werden.

Wenn Sie tatsächlich eine globale / anwendungsweite Initialisierung durchführen möchten (die also nicht per se nur an das jeweilige Servlet gebunden ist), würden Sie normalerweise die ServletContextListener dafür. Sie können die Initialisierung in der Methode contextInitialized() durchführen.

%Vor%

Wenn Sie noch nicht auf Servlet 3.0 sind und kein Upgrade durchführen können und daher @WebListener annotation nicht verwenden können, müssen Sie es manuell in /WEB-INF/web.xml wie folgt registrieren:

%Vor%     
BalusC 02.03.2010, 15:50
quelle
2
Matt Ball 02.03.2010 15:47
quelle
1

init() wird nur bei der Erstellung des Servlets aufgerufen. Dies kann mehrmals während der Lebensdauer des Servers geschehen. Sie verwenden es zum Initialisieren von Variablen oder Logik, die für die regelmäßige Verwendung des Servlets erforderlich sind.

Bearbeiten: Nach dem erneuten Lesen Ihres Posts wird dieser technisch nicht bei jeder Anfrage aufgerufen, da der Server für jede Anfrage eine neue Instanz des Servlets erstellt. Überprüfen Sie Ihre Servereinstellungen, ob es ein neues Servlet erhält, ein einzelnes Servlet für die Lebensdauer des Servers zu behalten.

    
Poindexter 02.03.2010 15:47
quelle

Tags und Links