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()
?
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.
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:
Suchen Sie einen ServletContextListener?
Wie führe ich eine Methode vor der erneuten Veröffentlichung an? JBoss?
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.
Tags und Links java initialization servlets