|
|
Caricare Le Risorse Nelle Web Application J2 E E
di FabrizioGianneschi, Settembre 2003
pubblicato su http://www.programmazione.it Un problema frequente nello sviluppo di applicazioni Web J2EE risulta essere il caricamento di risorse (file di testo, immagini, etc.) da parte delle Servlet, JSP o dei loro componenti. Un errore diffuso è quello di riferirsi ad esse attraverso percorsi assoluti oppure facendo assunzioni sulla struttura delle cartelle di deploy del Web container. E' un metodo sbagliato, poiché crea un forte accoppiamento tra l'applicazione ed il sistema. Ad esempio, è sbagliato accedere ad una risorsa nel modo seguente:
In realtà, ove possibile, è molto meglio che l'applicazione acceda esclusivamente a risorse ad essa esclusive, attraverso percorsi relativi. Non solo: l'indipendenza del codice dal sistema rende l'applicazione maggiormente portabile e sicura, nel caso l'applicazione stessa debba essere utilizzata in container o sistemi differenti. Supponendo di aver a che fare con una Servlet, un metodo corretto per caricare delle risorse è il seguente: 1) nel web.xml fornire come parametro della servlet il path relativo della risorsa che si vuole caricare. Quest'operazione non è necessaria, ma fortemente consigliata per disaccoppiare ulteriormente le risorse dal codice senza essere costretti ad inserire percorsi hard-coded. Ad esempio: Listato 1 – Specifica del percorso della risorsa nel file web.xml
Notare l'attributo <param-value>: non vanno messi assolutamente path che ripercorrano percorsi che escano fuori dalla Web application, ma solo relativi all'interno di essa. Infatti, il "/" prima di WEB-INF è la root della vostra Web application (Context Root). E' vietatissimo citare: - il nome della Web application, perché potrebbe cambiare al momento del deploy; - la cartella di deploy, perché non è detto che l'applicazione venga posizionata al suo interno ed inoltre il suo nome potrebbe cambiare a seconda del container (in Tomcat denominata webapps). 2) All'interno della servlet caricare il parametro (ad esempio nell'init): Listato 2 – Caricamento del percorso della risorsa dal metodo init() di una Servlet
3) Utilizzare il path per ottenere la risorsa dal ServletContext (il quale delega al Servlet Container). Potete farvi restituire un oggetto java.net.URL oppure un java.io.InputStream da cui leggere. Si forniscono due esempi pratici: Listato 3 – Esempio di caricamento di Properties
Listato 4 – Esempio di caricamento di un file XML in un DOM
|