10 Stimmen

Tomcat Java Servlet - Klasse beim Start der Anwendung initialisieren

Ich habe eine Klasse, die ein bisschen Zeit zum Starten (macht einige JNI-Aufrufe und was nicht), so dass es nicht machbar ist, diese Klasse jedes Mal eine Seite lädt zu initialisieren. Ist es möglich, diese Klasse beim Starten der Anwendung zu initialisieren und dann auf ihre Methoden zuzugreifen, wenn die Seiten geladen werden?

Zum Beispiel:

Ich habe MyClass. Wenn die Anwendung (Tomcat) startet, möchte ich es zu initialisieren meine calss wie folgt:

MyClass myClassInstance = new MyClass("arg1", "arg2");

Wenn dann eine Seite aufgerufen wird, sagen wir /testpage, möchte ich Aufrufe an myClassInstance machen:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import MyClass;

public class TestPage extends HttpServlet {

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
    {
        String myResult = myClassInstance.getResult("whatever");

        response.setContentType("text/html");
        PrintWriter out = response.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Test</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>" +myResult +"</h1>");
        out.println("</body>");
        out.println("</html>");
    }
}

Ist dies möglich?

21voto

Tomasz Nurkiewicz Punkte 322861

Sie haben zwei Möglichkeiten:

  1. Initialisieren Sie Ihre Klasse in der Servlet's init() Methode. Sie können hinzufügen <load-on-startup> Attribut, um sicherzustellen, dass Ihr Servlet beim Start der Anwendung und nicht beim ersten Zugriff erstellt wird.

  2. 追加 ServletContextListener und verwenden contextInitialized() Callback-Methode. Verwenden Sie ServletContext#setAttribute um das erstellte Objekt zur späteren Verwendung zu speichern.

8voto

QuantumMechanic Punkte 13657

Wenn Sie möchten, dass dies einmal für die gesamte Anwendung geschieht, und zwar bevor ein Servlet ausgeführt wird, implementieren Sie ServletContextListener und fügen Sie Ihren Startup-Code in contextInitialized() . Richten Sie dann Ihr web.xml um Ihre Klasse als Hörer anzugeben.

Andernfalls können Sie tun, was die andere Antwort sagt, und es in die init() Methode des Servlets.

3voto

Cratylus Punkte 51546

Sie können die Initialisierung der Klasse innerhalb des Servlet's init méthode.
init() Methode wird beim Laden der Servlet-Instanz aufgerufen und ist daher ein guter Ort für teure Operationen.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X