English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Servlet 生命周期

La vita utile del Servlet può essere definita come il processo completo dalla creazione alla distruzione. Ecco il processo che il Servlet segue:

  • Chiamato dopo l'inizializzazione del Servlet init () Metodo

  • Servlet chiamato Chiamata Servlet Metodo per gestire le richieste del client.

  • Metodo chiamato prima della distruzione del Servlet  destroy() Metodo

  • Infine, il Servlet viene raccolto come spazzatura dal raccoglitore della spazzatura JVM.

Ora discutiamo in dettaglio i metodi della vita utile.

Metodo init()

Il metodo init è progettato per essere chiamato solo una volta. Viene chiamato la prima volta quando viene creato il Servlet e non viene chiamato in seguito per ogni richiesta dell'utente. Pertanto, è utilizzato per l'inizializzazione una tantum, come il metodo init di Applet.

Servlet viene creato quando l'utente chiama per la prima volta l'URL corrispondente al Servlet, ma puoi anche specificare che il Servlet venga caricato dalla prima volta che il server viene avviato.

Quando l'utente chiama un Servlet, viene creato un esempio di Servlet, ogni richiesta utente genera un nuovo thread e viene delegato al metodo doGet() o doPost() in momenti appropriati. Il metodo init() crea o carica alcuni dati, che verranno utilizzati per tutto il ciclo di vita del Servlet.

La definizione del metodo init() è la seguente:

public void init() throws ServletException {
  // Codice di inizializzazione...
}

Metodo service()

Il metodo service() è il metodo principale per eseguire il compito. Il container Servlet (cioè il server Web) chiama il metodo service() per gestire le richieste provenienti dal client (browser) e scrivere la risposta formattata al client.

Ogni volta che il server riceve una richiesta Servlet, viene creato un nuovo thread e viene chiamato il servizio. Il metodo service() verifica il tipo di richiesta HTTP (GET, POST, PUT, DELETE, ecc.) e chiama doGet(), doPost(), doPut(), doDelete() e altri metodi in momenti appropriati.

Di seguito sono riportate le caratteristiche del metodo:

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

Il metodo service() viene chiamato dal container, il metodo service chiama doGet(), doPost(), doPut(), doDelete() e altri metodi in momenti appropriati. Quindi, non è necessario fare nulla per il metodo service(), è sufficiente sovrascrivere doGet() o doPost() in base al tipo di richiesta proveniente dal client.

I metodi doGet() e doPost() sono i metodi più utilizzati in ogni richiesta di servizio. Di seguito sono riportate le caratteristiche di questi metodi.

Metodo doGet()

La richiesta GET proviene da una richiesta normale di URL o da un modulo HTML non specificato con METHOD, che viene gestito dal metodo doGet().

public void doGet(HttpServletRequest request,
                  HttpServletResponse response)
    throws ServletException, IOException {
    // Codice Servlet
}

Metodo doGet()

La richiesta POST proviene da un modulo HTML specificato con METHOD POST, che viene gestito dal metodo doPost().

public void doPost(HttpServletRequest request,
                   HttpServletResponse response)
    throws ServletException, IOException {
    // Codice Servlet
}

Metodo destroy()

Il metodo destroy() viene chiamato una volta sola, alla fine del ciclo di vita del Servlet. Il metodo destroy() può permettere al tuo Servlet di chiudere connessioni database, fermare thread in background, scrivere la lista di Cookie o il contatore di click sul disco, e eseguire altre attività di pulizia simili.

Dopo la chiamata al metodo destroy(), l'oggetto servlet viene marcato per la raccolta dei rifiuti. La definizione del metodo destroy() è come segue:

  public void destroy() {
    // Codice di terminazione...
  }

Diagramma architetturale

La seguente figura mostra uno schema tipico della vita del Servlet.

  • La prima richiesta HTTP到达服务器被 delegata al container Servlet.

  • Il container Servlet carica il Servlet prima di chiamare il metodo service().

  • Poiiché il container Servlet gestisce più richieste generate da più thread, ogni thread esegue un singolo esempio di metodo service() del Servlet.