Come si è visto negli articoli precedenti una Servlet è una componente applicativa server-side in grado di rispondere direttamente alle request HTTP producendo le adeguate response anche in funzione di parametri che possano essere passati alla Servlet utilizzando i metodi HTTP Get e Post.
Per capire come sia possibile un’operazione di questo genere è necessario comprendere quale sia il life-time di una generica Servlet ed in particolare quale sia il comportamento del Servlet Engine quando i suoi servizi vengano richiesti dall’Application Server in caso di request HTTP diretta esplicitamente ad una Servlet.
In particolare si hanno tre casi distinti:
- prima request: il Servlet Engine carica in memoria la Servlet e ne richiama il metodo init()
- request successive: il Servlet Engine chiama il metodo service() della Servlet
- richiesta di eliminazione: il Servlet Engone chiama il metodo destroy() della Servlet
Nel caso in cui, quindi, si intendano passare parametri di configurazione ad una Servlet è ovvio che questi debbano essere scritti da qualche parte e letti allo startup del servizio, cioè nel metodo init() della Servlet stessa.
L’oggetto ideale per contenere i parametri per una Servlet è senza dubbio il file di configurazione della Web Application che contiene la Servlet stessa, cioè il file web.xml.
Vediamo a proposito un frammento del file web.xml dell’applicazione sviluppata in precedenza contenente la colorServlet.
color
com.apogeo.colorServlet/
color
/colorServlet/
Questo frammento di XML descrive all’Application Server che esiste una Servlet cui assegniamo un alias-name color ed è implementata attraverso la classe com.apogeo.colorServlet
A questa Servlet inoltre assegniamo un percorso HTTP rimappato in modo che questa possa essere chiamata attraverso un url del tipo: http://hostname:port/app-name/colorServletAppare chiaro dunque come sia proprio questo il posto giusto per contenere le informazioni di configurazione ed inizializzazione per una componente applicativa come una Servlet, vediamo come questo potrebbe essere fatto.
Supponiamo di voler sviluppare, utilizzando una Servlet, un convertitore di valuta che trasformi il dato in ingresso e lo converta, ad esempio, dalla Lira all’Euro. Un parametro come il fattore di conversione, il famoso 1 Euro = 1936,27 Lire, potrebbe essere direttamente cablato nel codice poiché esiste una ragionevole certezza che non muti con il passare del tempo. In ogni caso sappiamo che non è bene inserire valori grezzi direttamente all’interno del codice, pertanto lo inseriremo tra i parametri di configurazione contenuti all’interno del file web.xml
euroconverter
com.apogeo.euroServletconversion 1936,27 /
euroconverter
/euroServlet/
Chiaramente ha senso inserire dei parametri di configurazione per una componente soltanto se siamo in grado di leggerne questi valori, questo si ottiene riscrivendo il metodo init() della Servlet, ecco come:
public class euroServlet extends HttpServlet
{
private Double conversionValue;public void init(ServletConfig conf) trows ServletException
{
super.init(conf);
conversionValue = conf.getInitParameter(“conversion”);
}public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
…
}
}/
Come vediamo riscrivendo il metodo init() è possibile recuperare i parametri di configurazione che avevamo in precedenza impostato all’interno del file web.xml e, a questo punto, inserirli ad esempio all’interno di una sessione applicativa per gestirli all’interno della stessa Servlet oppure da pagine JSP.