Tabella 1
|
java.servlet.Servlet
|
Interfaccia che specifica l'API delle servlet
|
|
javax.servlet.ServletConfig
|
Interfaccia per passare informazioni di configurazione alle
servlet.
|
|
javax.servlet.ServletRequest
|
Interfaccia che rappresenta le richieste di servizio poste ad
una servlet
|
|
javax.servlet.ServletResponse
|
Interfaccia che rappresenta la risposta ad una richiesta
generata da una servlet
|
|
javax.servlet.GenericServlet
|
Classe base che implementa l'interfaccia Servlet
|
|
javax.servlet.http.HttpServlet
|
Classe base derivata da GenericServlet per le servlet http
|
|
javax.servlet.http.HttpServletRequest
|
Interfaccia per le richieste che vengono fatte ad una servlet
http
|
|
javax.servlet.http.HttpServletResponse
|
Interfaccia per la risposte che genera una servlet http
|
In Tabella 1 sono elencate le principali
classi per la gestione delle servlet. I package delle servlet
forniti con il JSDK 1.0 sono quattro: javax.servlet,
javax.servlet.http, sun.servlet e
sun.servlet.http. I primi due hanno prefisso javax,e
non java, ad indicare che non si tratta della “Core
API”, ovvero delle API che devono essere ufficialmente
supportate in qualunque implementazione che desideri fregiarsi del
logo “Java”. Si tratta comunque di una Standard
Extension, ovvero di estensioni progettate per essere uno standard,
definite da JavaSoft per scopi speciali. La API delle servlet vera
e propria è definita dai primi due, mentre i secondi,
sun.*, sono particolari implementazioni fornite da JavaSoft,
sostituibili con implementazioni di altri produttori. Notare che
invece i package javax.* non possono essere modificati se si
vuole aderire allo standard.
Il package javax.servlet definisce il
framework generale delle servlet. Le servlet infatti non sono
pensate specificamente per estendere server http, ma sono
progettate più in generale per dei server. Può trattarsi
infatti di un Web Server come di un Mail Server, un Ftp Server o
altro. Questo framework infatti rispecchia il paradigma comune nei
server Internet, che in sostanza sono degli esecutori di comandi.
Per esempio, consideriamo un server di posta (tanto per non
insistere troppo sui server HTTP). Quando un client si collega ad
un server di posta, il primo interagisce col secondo inviando una
serie di richieste: per esempio "invia una mail ad un utente
x", oppure "elenca i messaggi in attesa per l’utente
y". Per estendere il mail server e offrire nuovi servizi,
dovremmo implementare nuovi comandi. Per esempio, supponiamo di
voler aggiungere un servizio di mailing list: una servlet potrebbe
implementare questa funzione. Questa ipotetica servlet dovrebbe
anche interpretare speciali indirizzi di posta e gestirli come
invii multipli agli utenti di una lista di distribuzione. Il
paradigma delle servlet è infatti proprio basato sui servizi:
l'interfaccia javax.servlet.Servlet è una interfaccia
che ha il suo perno nel metodo void service(ServletRequest,
ServletResponse). Le classi ServletRequest e
ServletResponse rappresentano delle generiche richieste e
una generica risposta. Sono previste anche delle fasi di
inizializzazione e di finalizzazione, ma quando una servlet è
in attività non fa altro che fornire un servizio, generando
delle risposte a delle richieste. Se Servlet è una
interfaccia, GenericServlet è invece una classe che
implementa questa interfaccia, e che è l'ideale per essere
estesa quando si deve implementare una servlet. Il package
javax.servlet.http invece fornisce i servizi per la gestione
di servlet specifiche per l'HTTP. Quando si programmano servlet
http, nella maggior parte dei casi si estende HttpServlet,
derivata da GenericServlet. Le richieste e le risposte
specifiche per l'HTTP sono rappresentate da
HttpServletRequest e HttpServletResponse.
|