Domanda

Sto diventando un po 'confuso qui. Nella nostra applicazione abbiamo definito alcuni servlet. Ecco un estratto dal web.xml per uno dei servlet:

<servlet>
    <servlet-name>AxisServlet</servlet-name>
    <display-name>Apache-Axis Servlet</display-name>
    <servlet-class>com.foo.framework.axis2.http.FrameworkServlet</servlet-class>
    <load-on-startup>0</load-on-startup>
</servlet> 

Secondo la mia comprensione, il valore per < load-on-startup > deve essere un numero intero positivo affinché venga caricato automaticamente. Ho cercato su Google, ma le risposte che ho riscontrato sono state solo aggiunte alla mia confusione.

È stato utile?

Soluzione

Resin 3.0 documenta questo comportamento:

  

load-on-startup può specificare un valore intero (facoltativo). Se il valore è 0 o maggiore,   indica un ordine per il caricamento dei servlet, i servlet con numeri più alti ottengono   caricato dopo servlet con numeri inferiori.

La Specifiche JSP 3.1 (JSR 340) dice questo a pagina 14-160 :

  

L'elemento load-on-startup indica che questo servlet deve essere caricato (istanziato   e avere il suo   init () chiamato) all'avvio dell'applicazione Web. L'elemento contenuto di questo   L'elemento deve essere un numero intero che indica l'ordine in cui dovrebbe essere il servlet   caricato. Se il valore è un numero intero negativo o l'elemento non è presente, il   il contenitore è libero di caricare il servlet ogni volta che lo desidera. Se il valore è positivo   intero o 0, il contenitore deve caricare e inizializzare il servlet come è l'applicazione   distribuito. Il contenitore deve garantire che i servlet contrassegnati con numeri interi inferiori   vengono caricati prima dei servlet contrassegnati con numeri interi più alti. Il contenitore può scegliere   l'ordine di caricamento dei servlet con lo stesso valore load-on-startup .

Probabilmente vuoi controllare non solo JSR, ma anche la documentazione per il tuo contenitore web. Potrebbero esserci delle differenze

Altri suggerimenti

Risposta breve : valore > = 0 indica che il servlet viene caricato quando viene distribuita l'app Web o all'avvio del server. valore < 0: servlet viene caricato ogni volta che il contenitore sembra.

Risposta lunga (dalle specifiche):

  

L'elemento load-on-startup indica questo   il servlet deve essere caricato (istanziato e avere   il suo init () chiamato) all'avvio del web   applicazione. I contenuti opzionali di questi   L'elemento deve essere un numero intero che indica l'ordine in   quale deve essere caricato il servlet. Se il valore   è un numero intero negativo o l'elemento no   presente, il contenitore è libero di caricare il servlet   ogni volta che lo desidera. Se il valore è positivo   128   intero o 0, il contenitore deve caricare e   inizializza il servlet così come è l'applicazione   distribuito. Il contenitore deve garantirlo   i servlet contrassegnati con numeri interi inferiori vengono caricati   prima dei servlet contrassegnati con numeri interi più alti. Il   il contenitore può scegliere l'ordine di caricamento di   servlet con lo stesso valore di caricamento all'avvio.

Indica che il servlet non verrà avviato fino a quando una richiesta non tenta di accedervi.

Se il load-on-startup è maggiore o uguale a zero, allora quando il container si avvia, quel servlet avvierà in ordine crescente del carico sul valore di startup che ci hai messo (cioè 0, 1 quindi 2 quindi 5 poi 10 e 10 e così via).

Ciclo di vita servlet

  

Il ciclo di vita di un servlet è controllato dal contenitore in cui è stato distribuito il servlet. Quando una richiesta viene mappata su un servlet, il contenitore esegue i seguenti passaggi.

     
      
  1. Se non esiste un'istanza del servlet, il contenitore Web:

         

    a. Carica la classe servlet

         

    b. Crea un'istanza della classe servlet

         

    c. inizializza l'istanza servlet chiamando il metodo init (l'inizializzazione è descritta in Creazione e inizializzazione di un servlet )

  2.   
  3. Il contenitore richiama il metodo di servizio, passando oggetti richiesta e risposta. I metodi di servizio sono discussi in Metodi di servizio di scrittura .

  4.   

Un valore 0 su load-on-startup indica che il punto 1 viene eseguito quando una richiesta arriva a quel servlet. Altri valori indicano che il punto 1 viene eseguito all'avvio del contenitore.

Come indicato su un'altra risposta e questo carica -un-startup article zero è accettabile e in assenza di qualsiasi altro servlet questo avrà la priorità sul caricamento e sul caricamento durante la distribuzione. Il miglior uso dello statup del caricamento è caricare servlet che impiegano più tempo a inizializzarsi molto prima che la prima richiesta arrivi come servlet che crea pool di connessioni o effettua chiamate di rete o trattiene risorse ingombranti, ciò ridurrà significativamente i tempi di risposta per le prime richieste.

  1. Se il valore è lo stesso per due servlet, allora verranno caricati in un ordine in cui sono dichiarati nel file web.xml.
  2. se è 0 o numero intero negativo rispetto a Servlet verrà caricato quando Container sente di caricarli.
  3. garantisce il caricamento, l'inizializzazione e il metodo calllet init () del servlet dal container web.
  4. Se non ci sono elementi per nessun servlet di quanti saranno caricati quando il contenitore web decide di caricarli.

sì, può avere lo stesso valore .... il motivo per cui si danno i numeri al caricamento all'avvio è definire una sequenza affinché il server carichi tutto il servlet. il servlet con valore di caricamento all'avvio 0 verrà caricato per primo e il servlet con valore 1 verrà caricato successivamente.

se due servlet avranno lo stesso valore per il caricamento all'avvio di quanto verrà caricato come sono dichiarati nel web.xml dall'alto verso il basso. il servlet che viene prima in web.xml verrà caricato per primo e l'altro verrà caricato successivamente.

- > Tag (assenza di caricamento all'avvio) Prima di tutto quando un servlet viene distribuito nel server, è responsabilità del server creare l'oggetto servlet.    Ad esempio: supponiamo che il servlet sia distribuito nel server, (l'oggetto servlet non è disponibile nel server) il client invia la richiesta al servlet per la prima volta, quindi il server crea l'oggetto servlet con l'aiuto del costruttore predefinito e chiama immediatamente init (). Da quel momento in cui il client invia la richiesta verrà eseguito solo il metodo di servizio poiché l'oggetto è già disponibile

Se nel descrittore di distribuzione viene utilizzato il tag di caricamento all'avvio:    Al momento della distribuzione stessa, il server crea l'oggetto servlet per i servlet in base al valore positivo fornito tra i tag. La creazione di oggetti per le classi servlet seguirà da 0-128  Il servlet numero 0 verrà creato per primo e seguito da altri numeri.

Se forniamo lo stesso valore per due servlet in web.xml, la creazione di oggetti verrà effettuata in base alla posizione delle classi in web.xml, inoltre varia da server a server.

Se forniamo un valore negativo tra il tag load on start up, il server non creerà l'oggetto servlet.

Altri scenari in cui il server crea l'oggetto per servlet.

Se non utilizziamo load on start up tag in web.xml, il progetto viene distribuito ogni volta che il client invia la richiesta per la prima volta il server crea l'oggetto e il server è responsabile della chiamata dei suoi metodi del ciclo di vita. Quindi se un server .class è stato modificato nel server (tomcat). il client invia nuovamente la richiesta per servlet modificato ma in caso di Tomcat non verrà creato un nuovo oggetto e il server utilizzerà l'oggetto esistente a meno che non avvenga il riavvio del server. Ma nella classe della logica web ogni volta che il file .class viene modificato nel server senza riavviare il server se riceve una richiesta, il server chiama il metodoestro sul servlet esistente e crea un nuovo oggetto servlet e chiama init () per la sua inizializzazione .

Se il valore è < 0, il serlet viene istanziato quando arriva la richiesta, altrimenti > = 0 il contenitore verrà caricato nell'ordine crescente dei valori. se 2 o più servlet hanno lo stesso valore, quindi l'ordine dei servlet dichiarati nel web.xml.

Il contenitore servlet carica il servlet durante l'avvio o quando viene effettuata la prima richiesta. Il caricamento del servlet dipende dall'attributo "load-on-startup" in "web.xml" file. Se l'attributo ha un numero intero positivo (da 0 a 128), il servlet viene caricato con il caricamento del contenitore, altrimenti viene caricato quando arriva la prima richiesta per il servizio.

Quando il servlet viene caricato una volta ricevuto la richiesta, viene chiamato " Caricamento lento " ;.

È semplice come non ti aspetti nemmeno.

Se il valore è positivo, viene caricato all'avvio del contenitore

Se il valore non è positivo rispetto al caricamento del servelet al momento della richiesta.

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