Laden Auf Start-Up mit Annotation in JAVA
Habe ich diesen code,
@WebServlet(value="/initializeResources", loadOnStartup=1)
public class InitializeResources extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
System.out.println("HEREEEE");
}
}
Aber das servlet startet nicht, wenn die web-Anwendung gestartet wird.
Wie laden beim Start des Servlet-Anmerkung?
Mein Servlet API 3.0 und ich nutze Tomcat 7
- Welche version des Servlet-API ist dein Behälter? Wie ist Ihre Anwendung installiert in den container? (Die Anmerkung korrekt aussieht, so liegt das problem wahrscheinlich mit Ihrem container-Konfiguration.)
- Danke für Sie Unterstützung. Meine Servlet-API-version ist 3.0 und ich nutze tomcat 7. Ich die Bereitstellung der Anwendung auf IntelliJ IDEA 12.1.4, Krieg explodierte.
- Können Sie Ihre web.xml?
- Meine web.xml ist leer. Ich glaube nicht, denn alle Anmerkungen.
- Diese Anmerkung mein problem lösen: @WebServlet(name="InitializeResources", urlPatterns="/initializeResources", loadOnStartup=1) ich weiß nicht warum, aber es funktionierte.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mit dem Sie den aktuellen code, müssen Sie eine GET-Anforderung für die Ausgabe
HEREEEE
.Wenn Sie wollen, etwas zu tun, auf den Start des servlet (d.h. das element
loadOnStartup
mit Wert größer oder gleich null ist,0
), müssen Sie den code in einer init-Methode oder im Konstruktor des Servlets:Kann es günstiger sein, verwenden Sie einen listener starten Sie eine Ressource in der Anwendungsbereich (in der
ServletContext
).Für ein Beispiel, siehe meine Antwort für die Frage Teilen Variablen zwischen JAX-RS Anfragen.
urlPatterns werden, um sicherzustellen, dass die web-conatainer findet die servlet-Pfad.
Wenn
loadOnStartup
ist angegeben für einen Servlet-Container, der container wäre nur load und pre-instanziieren eine Instanz der Servlet bereit, um die Verarbeitung von GET/POST-Anfragen kommen kann. Dies allein nicht dazu führen würdedoGet()
oderdoPost()
gefeuert, weil eine tatsächliche client-Anfrage noch nicht reif für die Verarbeitung noch. Also, was ist dessen nutzen?Gut,
loadOnStartup
ist typisch für Servlets, die schwere der Initialisierung code, die sagen, Sie machen vielleicht eine JNDI-Aufruf auf eine Ressource oder einen Datenbank Aufruf zum Auffüllen einer lokalen Datenstruktur mit einigen backend-Werte. In der Abwesenheit vonloadOnStartup
die erste client-Anforderung könnte quälend langsam, da alle diese zusätzliche Initialisierung Zeug und damit pre-Instanziierung Sinn macht es.Nun, Ihre benutzerdefinierten Initialisierungscode (JNDI, JDBC) würde in einem übersteuerten
GenericServlet#init()
Methode, die aufgerufen wird, durch den servlet-container zu geben, um ein servlet, dass es platziert wird in Dienst gestellt.