4Trabes Historias de una empresa en 100 metros cuadrados

El blog de Trabe Soluciones

Pretty URLs mediante reescritura en aplicaciones JEE (J2EE) sin depender de Apache

| | Comentarios

Este es uno de esos artículos “de propósito específico”. Supongo que los que trabajen en entornos “con mucha burocracia” entenderán mejor por qué no siempre es posible tocar el apache. La idea de este post es ver como podemos tener una funcionalidad decente de reescritura de URLs directamente en el contenedor de aplicaciones.

La pieza clave para conseguir nuestro objetivo es UrlRewriteFilter, que como sus propios autores proclaman “Es un filtro basado en mod_rewrite válido para cualquier contenedor estándar de aplicaciones JEE que permite reescribir URLs antes de que lleguen a nuestro código”. Y además funciona.

El filtro es muy sencillo de instalar, tan solo son necesarios unos pocos pasos muy sencillos:

  • Guardar el jar en el lib de nuestra aplicación.
  • Modificar el web.xml para que haga uso del filtro:

1
2
3
4
5
6
7
8
9
10
11
12
13
<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>

  • Incorporar en el WEB-INF de nuestra aplicación un fichero urlrewrite.xml, que contendrá las reglas para las reescrituras

Una vez realizados estos pasos solo nos queda escribir las reglas que consideremos necesarias en nuestro caso. El fichero urlrewrite.xml de ejemplo incluye nociones básicas al respecto. A modo de ilustración, para convertir una URL como /searchPage.do?term=casco&locale=es&make=honda en algo como /es/honda/que-contengan/casco, necesitaríamos una regla como la siguiente:

1
2
3
4
<rule>
  <from>/([a-z]+)/([a-zA-Z0-9]+)/que-contengan/(.*)</from>
  <to>/searchPage.do?term=$3&amp;locale=$1&amp;make=$2</to>
</rule>

Con estos sencillos pasos ya tenemos un soporte decente para construir URLs bonitas en aplicaciones Java, sin tener que hacerlo todo “a mano” ni depender del Apache.

Lo sentimos, pero los comentarios están cerrados

Falta añadir que si tienes algún FrameWork como Struts2 (por ejemplo), no te funcionará sino agregas las reglas FORWARD en dicho filtro.

Un POST perfecto, muy bien explicado.

01/Nov/2011 Athlit