Come fare in modo che il motore servlet incorporato istanzia i servlet con entusiasmo?
Domanda
Il problema è semplice, ma sto già lottando un po'.
Server server = new Server(8080);
Context context = new Context(server, "/", Context.NO_SESSIONS);
context.addServlet(MainPageView.class, "/");
context.addServlet(UserView.class, "/signup");
server.start();
Questo è un pezzo di codice piuttosto standard che puoi trovare ovunque nel mondo di Jetty.Ho un'applicazione che incorpora Jetty come motore servlet e dispone di alcuni servlet.
L'istanziazione di alcuni di questi servlet richiede un lavoro intenso all'avvio.Ad esempio: lettura di file di configurazione aggiuntivi, connessione al database, ecc.Come posso fare in modo che il motore servlet istanzia con entusiasmo tutti i servlet, in modo da poter svolgere tutto il duro lavoro in anticipo e non alla prima richiesta dell'utente?
Soluzione
Non sono sicuro del motivo per cui l'utilizzo dell'opzione di Justin per Guice non funzioni per te.Cosa viene iniettato esattamente?Non sono sicuro che questo possa aiutarti perché è molto simile a quello che Justin ha scritto sopra, ma se lo fai in questo modo, Jetty farà effettivamente l'istanziazione.
Context context = new Context(server, "/", Context.NO_SESSIONS);
ServletHolder mainPageViewHolder = new ServletHolder(MainPageView.class);
// Do this to force Jetty to instantiate the servlet
mainPageViewHolder.getServlet();
context.addServlet(mainPageViewHolder, "/");
Altri suggerimenti
Usa il Context.addServlet
sovraccarico che richiede a ServletHolder
. ServletHolder
è una classe che accetta un'istanza Class o Servlet.
Servlet myServlet = new MyServlet();
ServletHolder holder = new ServletHolder(myServlet);
context.addServlet(holder, "/");
Ciò presuppone il molo 6.Penso che funzionerà anche per Jetty 7.