
guide
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
UrlRewriteFilter: emulare mod_rewrite in Java
UrlRewriteFilter è una libreria nata con l’intento di emulare le funzionalità del modulo mod_rewrite di Apache: è stata utilizzata in molte applicazioni ed integrata anche in framework più complessi, ad esempio Appfuse e Spring.
Ecco alcune delle sue caratteristiche più evidenti:
Il principale punto a suo favore è chiaramente che moltissimi sviluppatori web hanno conoscenze pregresse dell’utilissimo mod_rewrite di Apache, e sanno quindi già “cosa aspettarsi” da UrlRewriteFilter.
Vediamo come utilizzare questa libreria per i nostri progetti.
L’installazione di UrlRewriteFilter è molto semplice:
/WEB-INF/lib
della web application;/WEB-INF/urlrewrite.xml
(vedi sotto).Ecco il codice sorgente di urlrewrite.xml:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite PUBLIC "-//tuckey.org//DTD UrlRewrite 3.2//EN"
"http://tuckey.org/res/dtds/urlrewrite3.2.dtd">
<urlrewrite>
</urlrewrite>
Nei prossimi paragrafi esploreremo alcune regole icolarmente utili per il rewrite definibili all’interno di urlrewrite.xml.
Le clean URLs sono uno stratagemma molto utilizzato nelle web application, soprattutto nei CMS (Content Management Systems), per via della facile fruibilità per gli utenti umani e per i crawler dei motori dei ricerca.
Di fatto si tratta di creare una versione “amichevole” di URL altrimenti anonime, eccone un esempio:
http://www.example.com/show_article.jsp?article_id=42
Per il momento non ci interessa l’implementazione reale della pagina show_article.jsp
, che quindi sarà molto semplice:
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<html>
<head>
<title>show_article.jsp</title>
</head>
<body>
Mostra articolo con ID = <%=request.getParameter("article_id")%>
</body>
</html>
Utilizzare una URL del genere ha diversi problemi, primo fra tutti il fatto che il percorso per arrivare ai contenuti è completamente anonimo, trattandosi di un semplice numero.
Avere una URL più leggibile porta diversi vantaggi:
Ecco gli accorgimenti più utilizzati per rendere le URL più facili da comprendere:
tutorial-impariamo-a-programmare-in-java.html
/2011/07/tutorial-impariamo-a-programmare-in-java.html
Questi elementi della URL vengono chiamati in gergo “slug”, la cui traduzione italiana è “lumacone” (!); in effetti il loro compito è allungare le URL, per guidare l’utente verso i contenuti facendogli seguire una “traccia” facilmente visibile…
Un miglioramento ulteriore può essere costituito dall’eliminazione dei parametri (o almeno dalla loro riduzione): in questo modo i contenuti apparirebbero agli utenti e ai motori di ricerca come un insieme strutturato e ordinato, facilitandone la fruizione e la ricerca.
Vediamo quindi alcuni esempi, di complessità crescente:
http://www.example.com/article/42.html http://www.example.com/article/42/tutorial-impariamo-a-programmare-in-java.html http://www.example.com/2011/07/article/42/tutorial-impariamo-a-programmare-in-java.html
Decisamente meglio, non trovate? Possiamo inserire le regole necessarie nel file di configurazione /WEB-INF/urlrewrite.xml, inserendo queste righe all’interno dell’elemento <urlrewrite>:
<rule>
<from>^/article/(d+).html</from>
<to>/show_article.jsp?article_id=$1</to>
</rule>
<rule>
<from>^/article/(d+)/.*.html</from>
<to>/show_article.jsp?article_id=$1</to>
</rule>
<rule>
<from>^/(d+)/(d+)/article/(d+)/.*.html</from>
<to>/show_article.jsp?article_id=$3</to>
</rule>
Ecco qualche dettaglio sul funzionamento:
<rule>
;<from>
contiene una regular expression
che fa un match sulla URL della richiesta HTTP;<to>
invece è utilizzato per redirigere il flusso su un’altro path. Il simbolo "$1"
è una cosiddetta back reference, ovvero un riferimento (il primo) identificato dalle parentesi nell’espressione utilizzata in <from>
;
Il servlet mapping serve per indicare al container quando richiamare una certa servlet; il meccanismo standard, che viene configurato dall’elemento <servlet-mapping>
nel file web.xml
, è sempre stato piuttosto carente, ed una delle principali lamentele (rimasta purtroppo inascoltata anche nella versione 3.0 delle specifiche) è il fatto che sia impossibile eseguire dei mapping complessi in web.xml; le possibilità infatti sono molto limitate:
/miopath1/*
: tutti i path che iniziano per /miopath1/
/miopath2
: esattamente il /miopath2
.html
, .do
, .pincopallino
e così via.Chiaramente una delle possibili migliorie sarebbe poter utilizzare le regular expression, ed è qui che UrlRewriteFilter ci vene in aiuto; possiamo infatti delegare l’esecuzione di una chiamata HTTP ad un metodo di una classe, che non deve essere per forza una servlet ma basta che il metodo in questione sia pubblico e che abbia i parametri HttpServletRequest e HttpServletResponse:
Nell’esempio che segue vogliamo intercettare tutte le chiamate a pagine con estensione *.html
in un qualsiasi sotto-path di /app/, e di far gestire la richiesta alla classe it.html.examples.MiaServlet
. Ecco la regola da inserire in urlrewrite.xml
:
<rule>
<from>/app/.*.html</from>
<run class="it.html.examples.MiaServlet" method="mioMetodo" />
</rule>
mentre questo è il codice della “servlet” (come viene impropriamente definita sulla documentazione):
package it.html.examples;
import java.io.IOException;
import javax.servlet.http.*;
public class MiaServlet {
public void mioMetodo(HttpServletRequest req, HttpServletResponse resp) throws IOException {
resp.getWriter().println("MiaServlet.mioMetodo() invocato!");
}
}
Ecco alcune URL che vengono correttamente intercettate:
/app/bla.html /app/bla.html?param1=1¶m2=2 /app/sottopath/bla.html /app/sottopath/bla.html /app/bla1.bla2.html?param1=1¶m2=2 /app/bla1.bla2.html?param1=1¶m2=2
Se vuoi aggiornamenti su UrlRewriteFilter: emulare mod_rewrite in Java inserisci la tua email nel box qui sotto:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
La tua iscrizione è andata a buon fine. Se vuoi ricevere informazioni personalizzate compila anche i seguenti campi opzionali:
Compilando il presente form acconsento a ricevere le informazioni relative ai servizi di cui alla presente pagina ai sensi dell'informativa sulla privacy.
Come passare C# a Ruby e vivere felici
Tutti i linguaggi per diventare uno sviluppatore di app per Android.
Come creare applicazioni per il Web con PHP e MySQL per il DBMS.
Tutte le principali tecnologie per diventare uno sviluppatore mobile per iOS.
I fondamentali per lo sviluppo di applicazioni multi piattaforma con Java.
Diventare degli esperti in tema di sicurezza delle applicazioni Java.
Usare Raspberry Pi e Arduino per avvicinarsi al mondo dei Maker e dell’IoT.
Le principali guide di HTML.it per diventare un esperto dei database NoSQL.
Ecco come i professionisti creano applicazioni per il Cloud con PHP.
Lo sviluppo professionale di applicazioni in PHP alla portata di tutti.
Come sviluppare applicazioni Web dinamiche con PHP e JavaScript.
Fare gli e-commerce developer con Magento, Prestashop e WooCommerce.
Realizzare applicazioni per il Web utilizzando i framework PHP.
Creare applicazioni PHP e gestire l’ambiente di sviluppo come un pro.
Percorso base per avvicinarsi al web design con un occhio al mobile.
Realizzare siti Web e Web application con WordPress a livello professionale.
Iniziamo ad utilizzare il framework per web application ZK, creando un semplice “Hello World” in ZK Studio.
Breve panoramica che illustra le principali caratteristiche delle servet 3.0, con esempi
Utilizzo le API di Google per le traduzioni dalle nostre pagine Web
Impariamo a sviluppare applicazioni Java per i sistemi Embedded, piattaforme che a differenza delle tradizionali soluzioni general purpose vengono progettate per svolgere compiti specifici. Nel corso delle guida verranno fornite le nozioni necessarie per installare Oracle Java SE Embedded, scegliere il profilo e la JVM da utilizzare, configurare una JRE personalizzata, creare una prima App ed effettuarne il deploy