UrlRewriteFilter - un mod_rewrite per le servlet
Oggi vi voglio parlare di un attrezzo molto utile che ho scoperto di recente: UrlRewriteFilter. Si tratta di un servlet filter il cui scopo è emulare il funzionamento dell'onnipresente mod_rerwrite di Apache.
Il suo compito è di riscrivere, in base a regole che dovremo definire, le URL inviate al nostro servlet engine (Tomcat o chi per esso). I motivi che possono spingere a dover utilizzare una fiunzionalità del genere sono molti, a volte inaspettati; vedremo insieme alcuni esempi degli usi più comuni.
Installazione
Per poter utilizzare il filtro bisogna:
- scaricare la distribuzione di UrlRewriteFilter dal sito ufficiale: http://tuckey.org/urlrewrite/
Al momento della stesura di questo articolo la versione stabile è la 2.6.0; - estrarre l'archivio e copiare il file urlrewrite-2.6.x.jar dentro la directory WEB-INF/lib della propria web application;
- copiare il file urlrewrite.xml dentro WEB-INF
- aggiungere queste righe a WEB-INF/web.xml:
<filter> <filter-name>UrlRewriteFilter</filter-name> <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class> <init-param> <param-name>logLevel</param-name> <param-value>WARN</param-value> </init-param> </filter> <filter-mapping> <filter-name>UrlRewriteFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
ATTENZIONE: nel file web.xml è importante mettere queste voci di configurazione nel posto giusto, altrimenti l'applicazione si rifiuterà di partire!
Ora bisogna configurare il filtro a seconda delle proprie esigenze, vediamo alcuni esempi.
Esempi
Se le URL della nostra applicazione hanno cambiato prefisso o "forma", è facile che i motori di ricerca o più semplicemente i bookmark degli utenti puntino a percorsi inesistenti. Ecco allora che torna utile un sistema per convertire al volo i vecchi path, senza dover presentare brutte pagine di errore e senza dover mettere mano pesantemente alla nostra applicazione.
Esempio 1
Nella prima versione dell'applicazione ai documenti si accedeva con una URL del tipo:
/getdocument.jsp?id=12345
Ora invece si trovano sotto:
/documents/index.jsp?id=12345
Questa situazione può essere gestita con una regola di questo tipo:
<rule> <note>Esempio 1</note> <from>/getdocument\.jsp\?id=(\d+)</from> <to>/documents/index.jsp?id=$1</to> </rule>
Esempio 2
Possiamo anche cambiare il nome del parametro:
URL originale: /getdocument.jsp?id=12345
URL reale: /documents/index.jsp?docid=12345
La regola è:
<rule> <note>Esempio 2</note> <from>/getdocument\.jsp\?id=(\d+)</from> <to>/documents/index.jsp?docid=$1</to> </rule>
Esempio 3
Il filtro di Url rewriting può anche essere usato per far sembrare il nostro database come una directory di file html. Ad esempio, vorremmo poter convertire questo path:
/getdocument.jsp?id=12345
in qualcosa di più pulito come:
/documents/12345.html
La regola che useremo sarà:
<rule> <note>Esempio 3</note> <from>/documents/(\d+).html</from> <to>/getdocuments.jsp?id=$1</to> </rule>
Le cose si fanno decisamente più interessanti quando entrano in gioco le <condition>: è possibile infatti redirezionare a seconda dell'ora, del referrer, del content-type, ... insomma le possibilità sono veramente infinite! Nei prossimi articoli vedremo qualche applicazione pratica del filtro, nel frattempo scaricatevi la web application d'esempio e... sperimentate!
| Allegato | Dimensione |
|---|---|
| UrlRewriteDemo.war | 137.49 KB |
- dimitri's blog
- Aggiungi un commento
- 695 letture

