Home

De Franciscis Dimitri

Homepage & Laboratorio Creativo

Primary links

  • Homepage
  • Curriculum Vitae
  • Servizi
  • Libri e guide
  • Immagini
  • Contattami
Home Blog dimitri's blog

UrlRewriteFilter - un mod_rewrite per le servlet

Submitted by dimitri on Ven, 14/11/2008 - 13:01
  • Informatica
  • apache
  • j2ee
  • java
  • servlet
  • tomcat

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:

  1. 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;
  2. estrarre l'archivio e copiare il file urlrewrite-2.6.x.jar dentro la directory WEB-INF/lib della propria web application;
  3. copiare il file urlrewrite.xml dentro WEB-INF
  4. 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!

AllegatoDimensione
UrlRewriteDemo.war137.49 KB
  • dimitri's blog
  • Aggiungi un commento
  • 695 letture

Navigazione

  • Contenuti recenti
  • Cerca
  • Tags
  • Articoli più letti

Secondary links

  • Note legali
  • Pubblicità su www.megadix.it

Copyright 2007 De Franciscis Dimitri - p.iva 05327790969

website monitoring service
RoopleTheme