La creazione di applicazioni web based, in ambiente Java, deve il suo grande successo grazie ad una tecnologia introdotta per fornire agli sviluppatori un linguaggio lato server facile da usare e compatibile con la tecnologia Java.
Cosa sono le servlet
Le servlet sono degli oggetti Java residenti sul server che vengono utilizzate per costruire logiche applicative più o meno complesse in accordo al principio di programmazione multilivello. Questi oggetti sono caricati ed utilizzati dal web server che mette loro a disposizione un particolare ambiente di lavoro, detto container, che si occuperà di tutti i loro aspetti, gestendone l'intero ciclo di vita.
Una servlet ha la possibilità di accedere a tutte le risorse del sistema su cui risiede, permettendo in fase di programmazione di implementare le diverse funzioni sfruttando tutte le caratteristiche del sistema, nonché la potenza espressiva di un linguaggio ad oggetti come Java. La loro gestione, operata da un ambiente di lavoro volto ad ottimizzare tutti gli aspetti inerenti alle risorse di sistema, consentirà una efficiente gestione delle stesse con conseguente miglioramento nelle prestazioni delle applicazioni web based: vedremo come in avanti.
Esistono diverse tipologie di servlet, che ereditano da un supertipo presente nel package javax.servlet
. La loro estensione dipende dal protocollo di comunicazione utilizzato. Nel nostro caso puntualizzeremo il discorso sulle HttpServlet
presenti nel package javax.servlet.http
. Estendendo quest'ultima classe sarà possibile creare servlet in grado di comunicare con i client e rispondere dinamicamente in base alle loro richieste.
Analizziamo il funzionamento delle servlet da un punto di vista delle performance. Il container ha l'obiettivo di mantenere efficienti le risorse del sistema ottimizzando la vita delle servlet che sono attive. L'idea è quella di condividere un unico oggetto con tutti i clienti che ne richiedono i servizi. In tal modo vengono evitate le operazioni di creazione dell'oggetto, la creazione di connessioni verso sorgenti dati e l'eliminazione delle stesse connessioni e dell'oggetto alla fine del servizio. Questo modello porta ad un notevole aumento di performance dovuto alla drastica diminuzione delle risorse di sistema, ora condivise da tutti coloro che vorranno utilizzare il servizio. Il modo di operare summenzionato, però, apre tanti problemi quanti ne risolve.
Figura 1. Ambiente di esecuzione
Tipicamente l'arrivo di richieste di un servizio su un web server si traduce nella creazione di processi leggeri (i thread indicati in figura) che concorrono all'utilizzo della stessa risorsa. Una gestione multithreading inefficiente porterebbe ad un possibile accesso inconsistente ai dati con un evidente errore dell'applicazione che presenta all'utente dati non corretti.
Il modo di funzionare ricalca il paradigma client / server, dove a seguito di una richiesta di servizio, c'è una risposta opportuna. La simulazione di queste due funzioni è garantita dagli oggetti HttpServletRequest
e HttpServletResponse
, contenuti nel package javax.servlet.http
.
La prima classe rappresenta la richiesta effettuata dal cliente al servizio, quindi alla servlet. Tutte le informazioni necessarie al servizio sono esplicitate dalla presenza di opportuni metodi. In particolare, la lettura dei parametri inseriti dall'utente nella form della pagina HTML che ha richiamato il servizio. La servlet può recuperare tutti questi parametri utilizzando i metodi dell'oggetto HttpServletRequest
, che, mediante il protocollo HTTP li trasporta verso il web server e quindi verso la servlet.
JSP - Java Server Page
Il livello di presentazione nella tecnologia J2EE è composto dalle JSP, che non aggiungono quasi nulla di nuovo a quanto finora detto. Si tratta di semplici file testuali, che accanto al codice HTML, presentano codice in linguaggio Java, permettendo un utilizzo dinamico del servizio web e demarcando in maniera netta i compiti di disegno dell'interfaccia e di progettazione delle funzioni.
Compito del disegnatore sarà quello di elaborare un'interfaccia grafica non curando l'aspetto dei contenuti che sono di competenza del programmatore. L'utilizzo di specifici tag di demarcazione indica l'inizio e la fine del codice Java, ossia il contenuto dinamico, quello che cambierà di volta in volta in base ai parametri di input inseriti dall'utente.
Per maggiori dettagli sulla sintassi delle pagine JSP rimandiamo alla guida apposita.