Come fare in modo che il motore servlet incorporato istanzia i servlet con entusiasmo?

StackOverflow https://stackoverflow.com/questions/75379

  •  09-06-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top