CodeGym /Corsi /All lectures for IT purposes /Introduzione ai Servlet

Introduzione ai Servlet

All lectures for IT purposes
Livello 1 , Lezione 379
Disponibile

Interfaccia 1.1 Servlet

Oggi iniziamo un nuovo e interessante argomento: i servlet . È stata l'aggiunta di servlet a Java che ha portato Java a diventare lo standard de facto per le applicazioni server di grandi dimensioni. L'80% di tutto il software aziendale nel mondo è scritto in Java. E in Cina, tutto è al 100%. Quindi cosa sono i servlet?

Un servlet è esattamente ciò che trasforma un programma Java in un servizio Web e gli consente di elaborare le richieste dei client. Ed è stato così...

Negli anni '90, subito dopo l'avvento del World Wide Web, sono comparsi web client (browser) e web server. I server Web di solito distribuivano semplicemente il file che avevano memorizzato su Internet: pagine html, script, immagini, ecc.

Ad un certo punto, tutti sono giunti alla conclusione che sarebbe stato necessario rendere entrambe le parti più intelligenti. JavaScript è stato aggiunto alle pagine HTML e ai server sono stati aggiunti plug-in, script speciali che sono stati chiamati in risposta a determinate richieste e hanno reso il comportamento del server più flessibile e intelligente.

Quindi un servlet è un tale plug-in Java che è stato integrato Java web-servere gli ha permesso di eseguire codice Java quando richiesto per determinate pagine. E già questo codice Java, rappresentato da una classe ereditata dalla classe Servlet, ha fatto ciò che intendevano i suoi sviluppatori.

E come già sai, il server web Java più popolare è Tomcat . Chiamato, tra l'altro, in onore del gatto Tom del cartone animato "Tom e Jerry".

In che modo Tomcat interagisce con i servlet? In effetti, questo processo è standardizzato ed è chiamato ciclo di vita del servlet . In esso, un servlet è un oggetto caricabile e un server Web è un contenitore servlet .

Se il servlet non è stato ancora caricato , allora:

  1. La classe servlet viene caricata dal contenitore.
  2. Il contenitore crea un'istanza della classe (oggetto) del servlet.
  3. Il contenitore chiama un metodo init()sull'oggetto servlet. Il metodo viene chiamato solo una volta.

Ciclo di lavoro standard - evasione di una richiesta del cliente :

  • Ogni richiesta viene elaborata in un thread separato.
  • Il contenitore chiama un metodo service()sul servlet e vi passa gli oggetti ServletRequest e ServletResponse.
  • Per terminare il servlet, viene chiamato un metodo destroy()sull'oggetto servlet. Si chiama una sola volta.

Ci possono essere molte ragioni per cui un servlet termina:

  • Il programmatore riavvia il server Web, è necessario chiudere con garbo tutti i servlet.
  • Il programmatore carica una nuova versione della servlet, quella vecchia deve essere scaricata correttamente.
  • E così via.

Ricorda la cosa principale: il server Web e i suoi servlet dovrebbero funzionare senza errori e riavvii per mesi, servendo migliaia di richieste al minuto. Pertanto, il codice sia per il caricamento che per il funzionamento e lo scaricamento di un servlet dovrebbe essere sempre scritto di altissima qualità.

1.2 Classe HttpServlet

La classe Servlet esiste per standardizzare il funzionamento di un servlet e di un contenitore. I programmatori non lavorano direttamente con questa classe. Beh, raramente funzionano. La classe più comunemente usata HttpServletè ereditata da Servlet.

Questa classe ha diversi metodi che ci saranno utili. Li userai spesso:

Metodo Descrizione
1 init() Chiamato una volta quando il servlet viene caricato
2 destroy() Chiamato una volta quando il servlet viene scaricato
3 service(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta al servlet
4 doGet(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta GET al servlet
5 doPost(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta POST al servlet
6 doHead(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta HEAD al servlet
7 doDelete(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta DELETE al servlet
8 doPut(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta PUT al servlet

I metodi init()e destroy()sono ereditati dalla classe Servlet. Pertanto, se decidi di sovrascriverli nel tuo servlet, dovrai anche chiamare la loro implementazione dalla classe base. Il comando è usato per questo super.method name().

Esempio di servlet:


public class FirstHttpServlet extends HttpServlet {
  
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
        // Getting the parameter “secret” from request
        String secret = request.getParameter("secret");
 
        // Put parameter “secret” into Http-session
        HttpSession session = request.getSession(true);
        session.setAttribute("secret", secret);
 
        // Print HTML as response for browser
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Header</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet example "+ secret +"</h1>");
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }
}

1.3 metodo di servizio (HttpServletRequest, HttpServletResponse)

Se guardi l'elaborazione di una richiesta client dal punto di vista di un servlet, allora le cose stanno così.

Per ogni richiesta client, il contenitore (server Web) crea HttpServletRequeste oggetti HttpServletResponsee quindi chiama un metodo service(HttpServletRequest request, HttpServletResponse response)sul servlet corrispondente. Questi oggetti gli vengono passati in modo che il metodo possa prendere i dati necessari requeste inserire il risultato del lavoro in response.

Il metodo service()ha un'implementazione predefinita. Se non viene ridefinito, verrà eseguito. Questo è quello che fa.

Il metodo service()determina il tipo di metodo HTTP dalla richiesta (GET, POST, ...) e chiama il metodo corrispondente alla richiesta.

Metodo Descrizione
1 service(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta al servlet
2 doGet(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta GET al servlet
3 doPost(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta POST al servlet
4 doHead(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta HEAD al servlet
5 doDelete(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta DELETE al servlet
6 doPut(HttpRequest, HttpResponse) Chiamato per ogni nuova richiesta PUT al servlet

Nella tua classe, puoi ridefinire un metodo service()o lasciarlo da solo, ma poi ridefinire i metodi doGet(), doPost(), ... secondo necessità.

Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION