Tomcat-Java-Servlet - Klasse Initialisieren beim starten der Anwendung
Habe ich eine Klasse, die braucht ein wenig Zeit, um zu starten (macht einige JNI-Aufrufe und was nicht), so ist es nicht möglich zu initialisieren dieser Klasse jedes mal wenn eine Seite geladen wird. Ist es möglich, initialisieren Sie diese Klasse beim starten der Anwendung, dann auf seine Methoden-Seiten werden serviert?
Beispiel:
Ich habe MyClass. Wenn die Anwendung (tomcat) gestartet wird, würde ich es gerne initialze meine calss wie folgt:
MyClass myClassInstance = new MyClass("arg1", "arg2");
Dann, wenn eine Seite aufgerufen wird, sagen /Testseite, ich möchte telefonieren myClassInstance:
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 das möglich?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Haben Sie zwei Möglichkeiten:
Initialisieren Sie Ihre Klasse in servlet ist
init()
Methode. Sie können<load-on-startup>
- Attribut, um sicherzustellen, dass Ihr servlet wird beim Start der Anwendung erstellt und nicht auf die erste zugreifen.Hinzufügen
ServletContextListener
und verwendencontextInitialized()
callback-Methode. VerwendenServletContext#setAttribute
zu speichern erstellte Objekt für die zukünftige Verwendung.Wenn Sie wollen, dass es passiert, sobald für die ganze app und geschehen, bevor ein servlet ausgeführt wird, zu implementieren
ServletContextListener
und stellen Ihre startup-code incontextInitialized()
. Dann richten Sie Ihreweb.xml
angeben, Ihre Klasse als listener.Sonst, Sie können tun, was die andere Antwort sagt, und steckte es in die
init()
- Methode des Servlets.Können Sie die Initialisierung der Klasse innerhalb des servlet ' s
init
- Methode.init()
Methode wird aufgerufen, wenn das servlet-Instanz geladen wird, so ist es ein guter Ort für teure Operationen.