Mittwoch, Januar 22, 2020

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.
InformationsquelleAutor Diego Alves | 2013-09-15

3 Kommentare

  1. 13

    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:

    @Override
    public void init() throws ServletException {
        System.out.println("HEREEEE");
    }

    Kann es günstiger sein, verwenden Sie einen listener starten Sie eine Ressource in der Anwendungsbereich (in der ServletContext).

    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.annotation.WebListener;
    
    @WebListener
    public class InitializeListener implements ServletContextListener {
    
        @Override
        public void contextInitialized(ServletContextEvent sce) {
            System.out.println("On start web app");
        }
    
        @Override
        public void contextDestroyed(ServletContextEvent sce) {
            System.out.println("On shutdown web app");
        }
    
    }

    Für ein Beispiel, siehe meine Antwort für die Frage Teilen Variablen zwischen JAX-RS Anfragen.

  2. 5
    @WebServlet(name="InitializeResources", urlPatterns="/initializeResources", loadOnStartup=1)

    urlPatterns werden, um sicherzustellen, dass die web-conatainer findet die servlet-Pfad.

    • danke, mir tut es nicht ohne das urlPatterns. Warum urlPatterns notwendig ist?
  3. 1

    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ürde doGet() oder doPost() 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 von loadOnStartup 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.

Kostenlose Online-Tests