I Java Servlet sono programmi che vengono eseguiti su un server Web o di applicazioni e fungono da livello intermedio tra una richiesta proveniente da un browser Web o altro client HTTP e database o applicazioni sul server HTTP.

I servlet offrono diversi vantaggi rispetto al CGI.

  • Le prestazioni sono notevolmente migliori.

  • I servlet vengono eseguiti nello spazio degli indirizzi di un server Web. Non è necessario creare un processo separato per gestire ogni richiesta del client.

  • I servlet sono indipendenti dalla piattaforma perché sono scritti in Java.

  • Java Security Manager sul server applica una serie di restrizioni per proteggere le risorse su una macchina server. Quindi i servlet sono affidabili.

  • La piena funzionalità delle librerie di classi Java è disponibile per un servlet. Può comunicare con applet, database o altri software tramite i socket ei meccanismi RMI che hai già visto.

I servlet svolgono le seguenti attività principali:

  • Leggere i dati espliciti inviati dai client (browser). Ciò include un modulo HTML su una pagina Web o potrebbe anche provenire da un'applet o da un programma client HTTP personalizzato.

  • Leggere i dati della richiesta HTTP implicita inviati dai client (browser). Ciò include cookie, tipi di media e schemi di compressione che il browser comprende e così via.

  • Elaborare i dati e generare i risultati. Questo processo può richiedere la comunicazione con un database, l'esecuzione di una chiamata RMI o CORBA, il richiamo di un servizio Web o l'elaborazione diretta della risposta.

  • Invia i dati espliciti (ovvero il documento) ai client (browser). Questo documento può essere inviato in una varietà di formati, inclusi testo (HTML o XML), binario (immagini GIF), Excel, ecc.

  • Invia la risposta HTTP implicita ai client (browser). Ciò include dire ai browser o ad altri client quale tipo di documento viene restituito (ad esempio, HTML), impostare cookie e parametri di memorizzazione nella cache e altre attività simili.

Un ciclo di vita di un servlet può essere definito come l'intero processo dalla sua creazione fino alla distruzione. I seguenti sono i percorsi seguiti da un servlet.

  • Il servlet viene inizializzato chiamando il metodo init ().

  • Il servlet chiama il metodo service () per elaborare la richiesta di un client.

  • Il servlet viene terminato chiamando il metodo destroy ().

  • Infine, servlet è garbage raccolto dal garbage collector della JVM.

Il metodo init è progettato per essere chiamato una sola volta. Viene chiamato quando il servlet viene creato per la prima volta e non viene richiamato di nuovo per ogni richiesta dell'utente. Quindi, viene utilizzato per inizializzazioni una tantum, proprio come con il metodo init degli applet.

Ogni volta che il server riceve una richiesta per un servlet, il server genera un nuovo thread e chiama il servizio. Il metodo service () controlla il tipo di richiesta HTTP (GET, POST, PUT, DELETE, ecc.) E chiama i metodi doGet, doPost, doPut, doDelete, ecc. Come appropriato.

Una richiesta GET risulta da una normale richiesta di un URL o da un modulo HTML che non ha un METODO specificato e dovrebbe essere gestita dal metodo doGet ().

Una richiesta POST risulta da un modulo HTML che elenca specificamente POST come METHOD e dovrebbe essere gestita dal metodo doPost ().

Il metodo destroy () viene chiamato solo una volta alla fine del ciclo di vita di un servlet.

Il metodo init () crea o carica semplicemente alcuni dati che verranno utilizzati per tutta la vita del servlet.

Questo metodo offre al servlet la possibilità di chiudere le connessioni al database, arrestare i thread in background, scrivere elenchi di cookie o conteggi di visite su disco ed eseguire altre attività di pulizia simili.

Questo metodo dovrebbe essere utilizzato per ottenere dati dal server.

Questo metodo dovrebbe essere utilizzato per elaborare i dati sul server.

Il metodo service () è il metodo principale per eseguire l'attività effettiva. Il contenitore servlet (cioè il server web) chiama il metodo service () per gestire le richieste provenienti dal client (browser) e per riscrivere la risposta formattata al client.

Ogni volta che il server riceve una richiesta per un servlet, il server genera un nuovo thread e chiama il servizio. Il metodo service () controlla il tipo di richiesta HTTP (GET, POST, PUT, DELETE, ecc.) E chiama i metodi doGet, doPost, doPut, doDelete, ecc. Come appropriato.

Ecco la firma di questo metodo:

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

Il metodo service () viene chiamato dal container e il metodo service richiama i metodi doGe, doPost, doPut, doDelete, ecc. Come appropriato. Quindi non hai nulla a che fare con il metodo service () ma sovrascrivi doGet () o doPost () a seconda del tipo di richiesta che ricevi dal client.

I servlet gestiscono automaticamente l'analisi dei dati dei moduli utilizzando i seguenti metodi a seconda della situazione:

  • getParameter(): Chiami il metodo request.getParameter () per ottenere il valore di un parametro del form.

  • getParameterValues(): Chiama questo metodo se il parametro appare più di una volta e restituisce più valori, ad esempio la casella di controllo.

  • getParameterNames(): Chiama questo metodo se desideri un elenco completo di tutti i parametri nella richiesta corrente.

Il metodo getParameterNames () di HttpServletRequest restituisce l'elenco completo di tutti i parametri nella richiesta corrente. Questo metodo restituisce un'enumerazione che contiene i nomi dei parametri in un ordine non specificato.

Una volta ottenuta un'enumerazione, è possibile eseguire il ciclo dell'enumerazione in modo standard, utilizzando il metodo hasMoreElements () per determinare quando fermarsi e utilizzando il metodo nextElement () per ottenere il nome di ciascun parametro.

Possiamo usare il metodo getHeaderNames () di HttpServletRequest per leggere le informazioni sull'intestazione HTTP. Questo metodo restituisce un'enumerazione che contiene le informazioni di intestazione associate alla richiesta HTTP corrente.

Una volta ottenuta un'enumerazione, è possibile eseguire il ciclo dell'enumerazione in modo standard, utilizzando il metodo hasMoreElements () per determinare quando fermarsi e utilizzando il metodo nextElement () per ottenere il nome di ciascun parametro.

Quando un browser richiede una pagina Web, invia molte informazioni al server Web che non possono essere lette direttamente perché queste informazioni viaggiano come parte dell'intestazione della richiesta HTTP. HTTPServletRequest rappresenta questa richiesta HTTP.

quando un server Web risponde a una richiesta HTTP al browser, la risposta consiste in genere in una riga di stato, alcune intestazioni di risposta, una riga vuota e il documento. HTTPServletResponse rappresenta questa risposta HTTP.

Ottieni l'oggetto di PrintWriter usando request.

PrintWriter out = response.getWriter();

Ora stampa html.

out.println("Hello World");

Possiamo usare il metodo setStatus (statuscode) di HttpServletResponse per inviare un errore di autenticazione.

// Set error code and reason.
response.sendError(407, "Need authentication!!!" );

Il reindirizzamento della pagina viene generalmente utilizzato quando un documento si sposta in una nuova posizione e abbiamo bisogno di inviare il client a questa nuova posizione o può essere a causa del bilanciamento del carico o per semplice randomizzazione. Il modo più semplice per reindirizzare una richiesta a un'altra pagina è utilizzare il metodo sendRedirect () dell'oggetto risposta.

Questo metodo genera una risposta 302 insieme a un'intestazione Location che fornisce l'URL del nuovo documento.

Questo metodo invia un codice di stato (solitamente 404) insieme a un breve messaggio che viene automaticamente formattato all'interno di un documento HTML e inviato al client.

I filtri servlet sono classi Java che possono essere utilizzate nella programmazione servlet per i seguenti scopi:

  • Per intercettare le richieste di un client prima che acceda a una risorsa nel back-end.

  • Per manipolare le risposte dal server prima che vengano rispedite al client.

Esistono vari tipi di filtri suggeriti dalle specifiche:

  • Filtri di autenticazione.

  • Filtri di compressione dati.

  • Filtri di crittografia.

  • Filtri che attivano eventi di accesso alle risorse.

  • Filtri di conversione delle immagini.

  • Filtri di registrazione e controllo.

  • Filtri catena TIPO MIME.

  • Filtri di tokenizzazione.

  • Filtri XSL / T che trasformano il contenuto XML.

I filtri vengono distribuiti nel file descrittore di distribuzione web.xml e quindi mappati ai nomi servlet o ai pattern URL nel descrittore di distribuzione dell'applicazione.

Questo metodo viene chiamato dal contenitore Web per indicare a un filtro che viene messo in servizio.

Questo metodo viene chiamato dal contenitore ogni volta che una coppia richiesta / risposta viene passata attraverso la catena a causa di una richiesta del client per una risorsa alla fine della catena.

Questo metodo viene chiamato dal contenitore Web per indicare a un filtro che è stato messo fuori servizio.

Sì.

Sì. L'ordine degli elementi di mappatura del filtro in web.xml determina l'ordine in cui il contenitore web applica il filtro al servlet. Per invertire l'ordine del filtro, è sufficiente invertire gli elementi di mappatura del filtro nel file web.xml.

Utilizzare l'elemento della pagina di errore in web.xml per specificare il richiamo dei servlet in risposta a determinate eccezioni o codici di stato HTTP.

Se si desidera avere un gestore degli errori generico per tutte le eccezioni, è necessario definire la seguente pagina di errore invece di definire elementi di pagina di errore separati per ogni eccezione:

<error-page>
   <exception-type>java.lang.Throwable</exception-type >
   <location>/ErrorHandler</location>
</error-page>

I cookie sono file di testo memorizzati sul computer client e vengono conservati per vari scopi di tracciamento delle informazioni. I Java Servlet supportano in modo trasparente i cookie HTTP.

L'impostazione dei cookie con servlet prevede tre passaggi:

(1) Creazione di un oggetto Cookie: si chiama il costruttore Cookie con un nome di cookie e un valore di cookie, entrambi stringhe.

Cookie cookie = new Cookie("key","value");

Tieni presente che né il nome né il valore devono contenere spazi bianchi o uno dei seguenti caratteri: [] () =, "/? @:;

(2) Impostazione dell'età massima: utilizzare setMaxAge per specificare per quanto tempo (in secondi) il cookie deve essere valido. Di seguito viene impostato un cookie per 24 ore.

cookie.setMaxAge(60*60*24);

(3) Invio del cookie nelle intestazioni della risposta HTTP: utilizzare response.addCookie per aggiungere i cookie nell'intestazione della risposta HTTP come segue:

response.addCookie(cookie);

Per leggere i cookie, è necessario creare un array di oggetti javax.servlet.http.Cookie chiamando il metodo getCookies () di HttpServletRequest. Quindi scorrere l'array e utilizzare i metodi getName () e getValue () per accedere a ciascun cookie e al valore associato.

Eliminare i cookie è molto semplice. Se desideri eliminare un cookie, devi semplicemente seguire i tre passaggi seguenti:

  • Leggere un cookie già esistente e salvarlo nell'oggetto Cookie.

  • Imposta la durata del cookie su zero utilizzando il metodo setMaxAge () per eliminare un cookie esistente.

  • Aggiungi di nuovo questo cookie nell'intestazione della risposta.

La sessione fornisce un modo per identificare un utente attraverso più di una richiesta di pagina o visita a un sito Web e per memorizzare le informazioni su quell'utente. La sessione persiste per un periodo di tempo specificato, attraverso più di una connessione o richiesta di pagina da parte dell'utente.

È possibile aggiungere alcuni dati aggiuntivi alla fine di ogni URL che identifica la sessione e il server può associare quell'identificatore di sessione ai dati che ha memorizzato su quella sessione. Ad esempio, con http://tutorialspoint.com/file.htm;sessionid=12345, l'identificativo di sessione è allegato come sessionid = 12345 a cui è possibile accedere dal server web per identificare il client.

Si otterrebbe l'oggetto HttpSession chiamando il metodo pubblico getSession () di HttpServletRequest, come di seguito:

// Create a session object if it is already not  created.
HttpSession session = request.getSession();

Quando hai finito con i dati della sessione di un utente, hai diverse opzioni:

  • Remove a particular attribute: È possibile chiamare il metodo public void removeAttribute (String name) per eliminare il valore associato a una particolare chiave.

  • Delete the whole session:Puoi chiamare il metodo public void invalidate () per scartare un'intera sessione. Impostazione del timeout della sessione: è possibile chiamare il metodo public void setMaxInactiveInterval (int interval) per impostare il timeout per una sessione individualmente.

  • Log the user out: I server che supportano i servlet 2.4, è possibile chiamare logout per disconnettere il client dal server Web e invalidare tutte le sessioni appartenenti a tutti gli utenti.

setAttribute (nome stringa, valore oggetto) dell'oggetto HTTPSession associa un oggetto a questa sessione, utilizzando il nome specificato e può essere utilizzato per aggiornare un attributo nella sessione.

setMaxInactiveInterval (int interval) dell'oggetto HTTPSession specifica il tempo, in secondi, tra le richieste del client prima che il contenitore servlet invalidi questa sessione.

Il modo più semplice per aggiornare una pagina Web è utilizzare il metodo setIntHeader () dell'oggetto risposta.

Ciò significa consentire a un sito web di fornire diverse versioni di contenuti tradotti nella lingua o nazionalità del visitatore.

Ciò significa aggiungere risorse a un sito web per adattarlo a una particolare regione geografica o culturale, ad esempio la traduzione in hindi a un sito web.

Questa è una particolare regione culturale o geografica. Di solito viene indicato come un simbolo della lingua seguito da un simbolo del paese che è separato da un trattino basso. Ad esempio "en_US" rappresenta la lingua inglese per gli Stati Uniti.

Di seguito è riportato il metodo dell'oggetto richiesta che restituisce l'oggetto Locale.

java.util.Locale request.getLocale()

Il seguente metodo restituisce un nome per il paese della locale che è appropriato per la visualizzazione all'utente.

String getDisplayCountry()

Cosa c'è dopo?

Inoltre, puoi svolgere i compiti passati che hai svolto con l'argomento e assicurarti di essere in grado di parlarne con sicurezza. Se sei più fresco, l'intervistatore non si aspetta che tu risponda a domande molto complesse, piuttosto devi rendere i tuoi concetti di base molto forti.

Secondo, non importa davvero molto se non puoi rispondere a poche domande, ma importa che qualunque cosa tu abbia risposto, devi aver risposto con sicurezza. Quindi sentiti sicuro durante il tuo colloquio. Noi di tutorialspoint ti auguriamo buona fortuna per avere un buon intervistatore e tutto il meglio per il tuo futuro impegno. Saluti :-)