Java Tomcat Servlet - Initialiser la Classe de Démarrage de l'Application
J'ai une classe qui prend un peu de temps à démarrer (en fait JNI appels et ce n'est pas), de sorte qu'il n'est pas réalisable pour initialiser cette classe à chaque fois qu'une page se charge. Est-il possible d'initialiser cette classe de démarrage de l'application, puis d'accéder à ses méthodes que les pages sont servies?
Par Exemple:
J'ai MyClass. Lorsque l'application (tomcat) démarre, j'aimerais qu'il initialze mon calss comme suit:
MyClass myClassInstance = new MyClass("arg1", "arg2");
Puis, quand une page est appelée, dire /testpage, je voudrais faire des appels à 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>");
}
}
Est-ce possible?
Connexes: stackoverflow.com/questions/3468150/using-init-servlet, stackoverflow.com/questions/3153739/..., stackoverflow.com/questions/5951294/..., etc
OriginalL'auteur Petey B | 2011-06-01
Vous devez vous connecter pour publier un commentaire.
Vous avez deux choix:
Initialiser votre classe du servlet
init()
méthode. Vous pouvez ajouter<load-on-startup>
attribut assurez-vous que votre servlet est créé au démarrage de l'application et non pas lors du premier accès.Ajouter
ServletContextListener
et l'utilisationcontextInitialized()
méthode de rappel. UtilisationServletContext#setAttribute
pour stocker des objets créés pour une utilisation future.Plus d'informations sur "load-on-startup": docs.oracle.com/cd/E13222_01/wls/docs81/webapp/...
OriginalL'auteur Tomasz Nurkiewicz
Si vous voulez qu'il se produise une fois pour l'ensemble de l'application, et de se produire avant qu'une servlet est exécuter, mettre en œuvre
ServletContextListener
et de mettre votre code de démarrage danscontextInitialized()
. Alors vosweb.xml
de préciser votre classe en tant qu'auditeur.Sinon, vous pouvez faire ce que les autres réponse dit et le mettre dans le
init()
méthode de la servlet.OriginalL'auteur QuantumMechanic
Vous pouvez faire l'initialisation de la classe à l'intérieur de la servlet
init
méthode.init()
méthode est appelée lorsque la servlet instance est chargée de sorte qu'il est un bon endroit pour des opérations coûteuses.OriginalL'auteur Cratylus