miércoles, octubre 16, 2013

Simplificando las URL en aplicaciones Java desarrolladas con GeneXus

Tomado de: Simplificando las URL en aplicaciones Java desarrolladas con GeneXus

En una aplicación GeneXus Java tradicional tenemos nuestras URL de la forma:
http://localhost:8080/<MiAppJavaEnvironment>/servlet/home
o
www.url.com/<MiAppJavaEnvironment>/servlet/home

Si lo llevamos a producción es deseable que la URL en el Servidor en producción quede de la forma:
www.url.com/home



Para esto tenemos varios detalles para hacer:
a) Quitar el nombre de la WebApp
Para esto podemos poner la aplicación en el ROOT del Tomcat (borrar o renombrar el ROOT y poner nuestra webapp allí). Esta es la manera mas sencilla, pero tiene como contra que el Server quedaría solo una aplicación central aunque generalmente los usamos de forma dedicada (por lo que es válido y optimo para la mayoría de los casos).
b) Quitar el “/servlet” de nuestro sitio.
Para esto utilizamos alguna herramienta de URL rewrite como por ejemplo Tuckey (recomendado)
c) Quitar el puerto (:8080) para utilizar el default de HTTP (el puerto 80)
Generalmente en producción tenemos un servidor Apache de proxy para que las peticiones al puerto 80 vayan a nuestro Tomcat en el 8080.

 Instalación de Tuckey
1) Bajar el Jar de http://tuckey.org/urlrewrite/
2) Incluirlo en el lib de la webapp, una forma sencilla de hacer esto y de paso que quede todo el conocimiento y dependencias del proyecto en la KB es subirlo como un objeto File a la KB.
3) Modificar el web.xml agregando esto arriba del servlet mappings

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>UrlRewriteFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

 4) Crear y agregar el archivo urlrewrite.xml en el WEB-INF
5) Agregar las reglas pertinentes en dicho archivo, la que he usado yo:

<urlrewrite>
    <rule>
        <from>^/([a-z]+)$</from>
        <to>/servlet/$1</to>
    </rule>
</urlrewrite>

Con esto nos permite tener URL más fáciles de recordar, más entendibles y una aplicación que es fácilmente migrable a otra plataforma (.NET por ejemplo) dado que la URL no contiene rastros del lenguaje utilizado.