Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


Riassunto Servlet Java, Appunti di Informatica

Riassunto Servlet Java Cosa sono le servlet? Il ciclo vita di una servlet, Oggetti impliciti

Tipologia: Appunti

2017/2018

Caricato il 19/05/2018

deiv1907
deiv1907 🇮🇹

4.2

(10)

6 documenti

1 / 3

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
LE SERVLET
Tramite pagine HTML e mediante un semplice pulsante submit l’utente compila i campi presenti in una form
e li invia a un server che li elabora e gli risponde inviandogli l’esito della computazione. Una prima tecnica
per realizzare questa modalità operativa è quella di invocare procedure remote indicando cioè l’indirizzo di
un programma Common Gateway Interface (CGI) che viene eseguito sul server e al quale vengono passati i
dati letti nella form. In questa situazione il Web server ha il solo compito di invocare il programma CGI
corretto che esegue tutte le elaborazioni utilizzando gli stream standard per input e output. Per comunicare
con l’utente il programma CGI produce una pagina HTML, la passa al Web server che la invia all’utente in
modo che possa essere visualizzata dal suo browser. Un’alternativa alle CGI può essere fatta utilizzando il
linguaggio Java e realizzando le servlet, che sono delle classi particolari con molte affinità alle applet. La
principale differenza fra servlet e CGI e che gli script CGI vengono eseguiti dal sistema operativo e quindi
sono potenzialmente meno portabili delle servlet che, essendo scritte in Java, vengono eseguite dalla JVM
integrata nel Web server: tutti i moderni Web server hanno integrata la JVM e, quindi, le servlet sono di fatto
portatili su tutte le macchine. Una seconda differenza è legata all’effi cienza: gli script CGI vengono caricati
ed eseguiti una volta per ogni richiesta, quindi richiedendo sempre un notevole tempo di latenza, mentre le
servlet vengono caricate solo una volta e viene creato un Thread per ogni richiesta. A vantaggio degli script
CGI c’è la possibilità di utilizzare pressocché qualsiasi linguaggio e quindi il programmatore può scegliere
volta per volta il linguaggio più adatto alla particolare applicazione o compito che deve realizzare mentre le
servlet sono classi Java e quindi devono essere scritte in Java
Una servlet è un componente software scritto in Java, gestito da un “container”, che produce
contenuto web dinamico.
Ogni istanza di una servlet è un oggetto Java che viene caricato ed eseguito dal Web server all’interno del
processo di richiesta/risposta di servizi. Il suo controllo viene effettuato da un’altra applicazione Java, il
container, che regola il ciclo di vita della servlet stessa. In realtà è il Web server stesso che svolge la funzione
di container occupandosi della gestione del ciclo di vita delle servlet, passandogli i dati del client e
restituendo ai client i dati prodotti dall’esecuzione delle servlet. Dato che la servlet viene caricata in memoria
alla sua prima richiesta di esecuzione, ne comporta che le inizializzazioni necessarie vengono eseguite una
volta sola e consentono una più semplice condivisione dei dati fra le istanze di una servlet.
Il container gestisce completamente la servlet durante tutto il suo ciclo di vita svincolando il programmatore
dalla loro gestione: gestisce la comunicazione con i client, la sicurezza, il multithreading.
Descriviamo sinteticamente il flusso di esecuzione:
1 un client invia una richiesta (request) per una servlet a un Web application server;
2 se si tratta di una prima richiesta allora il server istanzia e carica la servlet;
3 si attiva un thread che gestisce la comunicazione tra il client e la servlet stessa;
4 il server invia alla servlet la richiesta pervenutagli dal client;
5 la servlet costruisce e imposta la risposta (response) e la inoltra al server;
6 il server invia la risposta al client.
Un esempio di servlet container open-source è Tomcat, del “gruppo” Apache.
le servlet usate nel Web sono estensioni della classe javax.servlet.http.HttpServlet.
Il package javax.servlet è la base per le API Servlet e contiene la definizione dell’interfaccia servlet e le
classi utili alla comunicazione fra client e server, a partire dai prototipi di tutti i metodi necessari alla
gestione del ciclo di vita di una servlet e alla esecuzione delle operazione implementate dalla servlet.
La classe HTTPServlet
La classe HTTPServlet implementa service() e invoca un insieme di metodi, tra i quali quelli necessari per
servire le richieste dal Web.
I due metodi principali sono:
pf3

Anteprima parziale del testo

Scarica Riassunto Servlet Java e più Appunti in PDF di Informatica solo su Docsity!

LE SERVLET

Tramite pagine HTML e mediante un semplice pulsante submit l’utente compila i campi presenti in una form e li invia a un server che li elabora e gli risponde inviandogli l’esito della computazione. Una prima tecnica per realizzare questa modalità operativa è quella di invocare procedure remote indicando cioè l’indirizzo di un programma Common Gateway Interface (CGI) che viene eseguito sul server e al quale vengono passati i dati letti nella form. In questa situazione il Web server ha il solo compito di invocare il programma CGI corretto che esegue tutte le elaborazioni utilizzando gli stream standard per input e output. Per comunicare con l’utente il programma CGI produce una pagina HTML, la passa al Web server che la invia all’utente in modo che possa essere visualizzata dal suo browser. Un’alternativa alle CGI può essere fatta utilizzando il linguaggio Java e realizzando le servlet, che sono delle classi particolari con molte affinità alle applet. La principale differenza fra servlet e CGI e che gli script CGI vengono eseguiti dal sistema operativo e quindi sono potenzialmente meno portabili delle servlet che, essendo scritte in Java, vengono eseguite dalla JVM integrata nel Web server: tutti i moderni Web server hanno integrata la JVM e, quindi, le servlet sono di fatto portatili su tutte le macchine. Una seconda differenza è legata all’effi cienza: gli script CGI vengono caricati ed eseguiti una volta per ogni richiesta, quindi richiedendo sempre un notevole tempo di latenza, mentre le servlet vengono caricate solo una volta e viene creato un Thread per ogni richiesta. A vantaggio degli script CGI c’è la possibilità di utilizzare pressocché qualsiasi linguaggio e quindi il programmatore può scegliere volta per volta il linguaggio più adatto alla particolare applicazione o compito che deve realizzare mentre le servlet sono classi Java e quindi devono essere scritte in Java

Una servlet è un componente software scritto in Java, gestito da un “container”, che produce contenuto web dinamico.

Ogni istanza di una servlet è un oggetto Java che viene caricato ed eseguito dal Web server all’interno del processo di richiesta/risposta di servizi. Il suo controllo viene effettuato da un’altra applicazione Java, il container, che regola il ciclo di vita della servlet stessa. In realtà è il Web server stesso che svolge la funzione di container occupandosi della gestione del ciclo di vita delle servlet, passandogli i dati del client e restituendo ai client i dati prodotti dall’esecuzione delle servlet. Dato che la servlet viene caricata in memoria alla sua prima richiesta di esecuzione, ne comporta che le inizializzazioni necessarie vengono eseguite una volta sola e consentono una più semplice condivisione dei dati fra le istanze di una servlet.

Il container gestisce completamente la servlet durante tutto il suo ciclo di vita svincolando il programmatore dalla loro gestione: gestisce la comunicazione con i client, la sicurezza, il multithreading.

Descriviamo sinteticamente il flusso di esecuzione:

1 un client invia una richiesta (request) per una servlet a un Web application server; 2 se si tratta di una prima richiesta allora il server istanzia e carica la servlet; 3 si attiva un thread che gestisce la comunicazione tra il client e la servlet stessa; 4 il server invia alla servlet la richiesta pervenutagli dal client; 5 la servlet costruisce e imposta la risposta (response) e la inoltra al server; 6 il server invia la risposta al client. Un esempio di servlet container open-source è Tomcat, del “gruppo” Apache.

le servlet usate nel Web sono estensioni della classe javax.servlet.http.HttpServlet.

Il package javax.servlet è la base per le API Servlet e contiene la definizione dell’interfaccia servlet e le classi utili alla comunicazione fra client e server, a partire dai prototipi di tutti i metodi necessari alla gestione del ciclo di vita di una servlet e alla esecuzione delle operazione implementate dalla servlet.

La classe HTTPServlet

La classe HTTPServlet implementa service() e invoca un insieme di metodi, tra i quali quelli necessari per servire le richieste dal Web. I due metodi principali sono:

■◗ doGet(): processa le richieste di tipo GET effettuate dalla pagina HTML; ■◗ doPost(): processa le richieste di tipo POST effettuate dalla pagina HTML.

Un oggetto HttpServletRequest estende ServletRequest, viene passato da service() e contiene la richiesta del client: permette di ottenere i parametri inviati dal client, il riferimento alla sessione utente e il flusso dei dati inviati dal client oltre che riconoscere l’utente autenticato. I metodi più utilizzati su questi oggetti sono: ■◗ getRequestURI() restituisce l’URI richiesto; ■◗ getMethod() fornisce il metodo HTTP utilizzato pe ri-inoltrare la richiesta; ■◗ il metodo getParameter(String) consente di accedere per nome ai parametri contenuti nella query string del client; ■◗ getInputStream() e getReader() permettono di creare gli stream di input e la possibilità quindi di ricevere i dati della richiesta HTTP.

Un oggetto HttpServletResponse estende ServletResponse, viene passato da service() e contiene la risposta per il client: permette di inviare dati al client in formato HTML oppure come flusso binario, Le servlet Lezione 2 179 di inviare codici di errore e codici di controllo nell’intestazione della response HTTP per controllare il comportamento del browser. I metodi per creare gli stream di output e la possibilità quindi di inviare i dati della risposta sono: ■◗ getOutputStream() per l’invio di dati in forma binaria; ■◗ getWriter() per l’invio attraverso il canale System.out

Prima di procedere con il codice della servlet è necessario analizzare il ciclo di vita di una servlet stessa, che può essere riassunto in tre fasi: init() => service() => destroy().

1 - Al momento del caricamento della servlet in memoria il container delle servlet invoca il metodo init() che provvede all’inizializzazione della servlet e al settaggio delle sue variabili globali in modo da renderla disponibile per rispondere alla prima richiesta. Il metodo init() riceve come parametro un oggetto di tipo ServletConfig che contiene la configurazione iniziale di una servlet e per salvare la configurazione richiama il metodo super.init.

2 - service() Le funzionalità della servlet, come ricevere e rispondere alle richieste dei client, sono effettuate dal metodo service() (o da i suoi sostituiti nel protocollo HTTP doGet() e doPost()), che gestiscono le richieste mediante i due oggetti ServletRequest e ServletResponse prima descritti.

3 - destroy() La terminazione di una servlet avviene tipicamente solo quando termina l’esecuzione del Web server, che si occupa anche di rilasciare le risorse occupate: questa operazione avviene tramite la chiamata al metodo destroy().

Il Context XML descriptor o Deployment descriptor

Il file web.xml, chiamato anche deployment descriptor, serve per configurare l’applicazione Web in modo che Tomcat possa gestire le richieste da parte dei client: contiene l’elenco dei servlet e per ogni servlet permette di definire una serie di parametri come coppie nome-valore che costituiscono la descrizione del Context associato a una Web application.

Al momento dell’invocazione di una servlet, Apache Tomcat esegue diverse operazioni:

■◗ legge il file web.xml; ■◗ trova un’entry da cui capisce che una servlet deve essere eseguita in risposta all’URL richiesto; ■◗ trova un’entry che indica il nome della classe Java; ■◗ controlla se esiste in memoria il file .class corrispondente o se deve essere ricaricato; ■◗ viene creato un thread e mandato in esecuzione.

Ci sono due possibilità per passare dei parametri di inizializzazione a una servlet: