Come è strutturato e funziona il ciclo di vita di una Servlet

Come è strutturato e funziona il ciclo di vita di una Servlet

Ciclo di vita di una Servlet

Il ciclo vitale dei Servlet permette ai servlet container di affrontare i problemi di prestazioni e di risorse posti dai vecchi CGI e le preoccupazioni relative alla sicurezza della programmazione di API del server a basso livello.

Esso è molto flessibile. L’unica regola inderogabile è che un servlet container dev’essere conforme al seguente contratto di ciclo vitale:

  1. Creare e inizializzare il servlet.
  2. Gestire zero o più chiamate a servizi da parte del client.
  3. Distruggere il servlet e poi eseguire un’operazione di garbage collection su quel che ne rimane.

Analizzando nel dettaglio quanto prima esposto, è possibile suddividere il life cycle di un Servlet in tre fasi principali, ciascuna individuata dalla chiamata al relativo metodo definito nell’interfaccia.

Come è strutturato e funziona il ciclo di vita di una Servlet

La fase di inizializzazione

Tra tutte le fasi di cui si compone il ciclo di vita di un Servlet questa è di sicuro la più ostica.
Essa si scompone in altre tre sotto-fasi:

Prima fase, creazione e inizializzazione. Il servlet engine localizza la classe da attivare all’interno del classpath e la carica in memoria della JVM; in altri termini possiamo dire che la classe viene manipolata tramite il class-loader:

Class c = Class.forName(“HelloWorld”);

Seconda fase, il servlet container crea un’istanza della classe servlet; possiamo ipotizzare che il processo si svolga come segue:

Servlet s = (Servlet) c.newInstance();

Terza fase, il servlet engine attiva il servlet:

s.init(sc);

dove sc è un ipotetico ServletContext creato in precedenza.

Una volta inizializzato, il servlet è in grado di rispondere alle chiamate provenienti dal browser e di soddisfarne le richieste.

La fase di esercizio

Tutte le volte che il browser Web ricerca l’URL corrispondente al servlet, il servlet container invoca il metodo service:

public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
.. .. ..
}

L’oggetto di tipo ServletRequest funziona come canale per il flusso di dati in ingresso, dal browser verso il servlet; l’istanza di ServletResponse fornisce invece il canale di uscita, dal servlet verso il browser.

La fase relativa alla distruzione

I servlet engine attualmente presenti sul mercato sono abbastanza evoluti. Essi sono in grado di rilasciare i servlet attivati una volta terminato il loro compito e, ancora, possono decidere a propria discrezione di liberare le risorse allocate allo scadere di un dato tempo di inattività.

In tal caso il servlet engine deve invocare il metodo

public void destroy();

per notificare al servlet la decisione presa.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *