GeneXus - URL Inicial Amigable
INTRODUCCIÓN
Siempre que trabajamos con una aplicación web, queremos que el ingreso a nuestra aplicación sea lo más agradable para los usuarios finales, sin que tengan que escribir URLs tan largas.
Para los que desarrollamos en GeneXus y en particular generamos con Java, recordemos que la forma de trabajar de GeneXus con este generador, es desplegando nuestra aplicación basada en servlets (https://goo.gl/x9ypu2) y en las últimas versiones de GeneXus donde se implementan Módulos, nos damos cuenta que las URL van siendo cada vez más extensas, lo que hace que para el usuario ingresar la URL inicial sea cada vez más complejo.
Existen varias formas de hacer un tuning a este tema, y así hacer las URLs más amigables para los usuarios, tal vez las más conocidas que se pueden encontrar después de una buena búsqueda son: -Redirección -Encapsulamiento -Modificar el Mapeo de Servlets.
Voy a tratar de explicarte cada una de las tres formas que menciono anteriormente y finalizaré por recomendar una desde mi punto de vista.
REDIRECCIÓN
Esta es la primera forma de las que mencioné y básicamente consiste en que tu sitio web contenga en la raíz un archivo de inicio para aplicaciones web más conocido como index, este puede ser codificado de tres formas, una es HTML, otra con JavaScript (necesitamos HTML), y otra es el Lenguaje de Servidor que estés manejando, para este caso Java (JSP).
HTML
Miremos primero la versión de HTML, para realizarla, debemos basarnos en las etiquetas del encabezado de la página en concreto <head></head> en está etiqueta es posible definir los meta datos de la página <meta>, vamos a usar un meta dato para que nuestra página index se refresque después de XX segundos pero dirigiéndose a otra página, la cual será la página inicial de nuestra aplicación GeneXus.
En un editor de texto, ejemplo el bloc de notas, creamos un nuevo archivo, el cual guardaremos con nombre index.html y en él ingresamos el siguiente código:
<html>
<head>
<meta http-equiv="Refresh" content="0;url=servlet/com.testing.login">
</head>
</html>
Analicemos los valores que están en negrita:
- 0 (cero): Es el tiempo que quieres que se visualice la página antes de redireccionar, en este caso 0 sería para hacer una redirección inmediata, colocar un valor más alto (a gusto) puede ser útil cuando quieres colocar un mensaje de bienvenida o de cargando a tu página, algo así como "Entrando en la web de .....".
- url=: Es la página a donde queremos que se redireccione, acá colocas la ruta final del servlet principal ejemplo tu login.
JavaScript
Ahora miremos la versión de redireccionamiento que he mencionado usando JavaScript, para nuestro script funcione, también debemos usar HTML pero en este caso vamos a hacer referencia a la etiqueta del cuerpo de la página en concreto <body></body>, dentro de ella vamos a codificar nuestro script, en HTML para agregar script hacemos precisamente referencia a las etiquetas script donde haremos que al cargar nuestra página iniciar, redireccione inmediatamente a nuestra página destino.
En un editor de texto, ejemplo el bloc de notas, creamos un nuevo archivo, el cual guardaremos con nombre index.html y en él ingresamos el siguiente código:
<html>
<body>
<script type="text/javascript">
window.location="servlet/com.testing.login";
</script>
</body>
</html>
Analicemos los valores que están en negrita:
- servlet/com.testing.login: Es la página a donde queremos que se redireccione, acá colocas la ruta final del servlet principal ejemplo tu login.
Debes tener en cuenta que al usar JavaScript puede resultar un inconveniente si el navegador del usuario final está configurado para que no acepte esta clase de scripts.
Java (JSP)
Esta versión de redireccionamiento es básicamente hablar el mismo idioma del servidor de los servlets, pero es igualmente funcional a las anteriores.
Para esto en nuestro index vamos a utilizar lenguaje Java para hacer el redireccionamiento a nuestro servlet principal.
En un editor de texto, ejemplo el bloc de notas, creamos un nuevo archivo, el cual guardaremos con nombre index.jsp y en él ingresamos el siguiente código:
<%
response.sendRedirect("servlet/com.testing.login");
%>
Analicemos los valores que están en negrita:
- servlet/com.testing.login: Es la página a donde queremos que se redireccione, acá colocas la ruta final del servlet principal ejemplo tu login.
ENCAPSULAMIENTO
Esta es la segunda forma que mencioné, básicamente consiste en tener al igual que en el primer método un archivo principal en HTML que a través de un contenedor <iframe> que ocupe el 100% de ancho y de alto visualice en su interior la aplicación web generada.
De está forma el usuario final, solo vería la URL principal del sistema web y no cada página que se llame, esto para muchos es de agrado, pero se genera un problema al momento en que los usuarios usan los botones de navegación entre página (adelante y atrás) pues puede salirse de la aplicación cuando no está queriendo hacer eso.
Adicionalmente algunos navegadores no la van muy bien con los iframes, así como el html5, lo que puede causar que la aplicación web, no tenga el comportamiento que desees.
En un editor de texto, ejemplo el bloc de notas, creamos un nuevo archivo, el cual guardaremos con nombre index.html y en él ingresamos el siguiente código:
<html>
<head>
<style type="text/css">
html, body, div, iframe { margin:0; padding:0; height:100%; }
iframe { display:block; width:100%; border:none;}
</style>
</head>
<body>
<center><iframe src="servlet/com.testing.login"></iframe></center>
</body>
</html>
Analicemos los valores que están en negrita:
- servlet/com.testing.login: Es la página a donde queremos que se redireccione, acá colocas la ruta final del servlet principal ejemplo tu login.
MAPEO DE SERVLETS
Esta es la tercera forma que menciono, esta forma no refiere crear un archivo principal sino hacer las URLs más cortas, para esto es necesario modificar el archivo donde se mapean los servlet del aplicativo web, este archivo lo conocemos como web.xml y normalmente lo encontraremos en el directorio <webapp>/WEB-INF, si abrimos el archivo que ya se encuentra generado, encontraremos algunos servlet mapeados por GeneXus, debemos agregar el siguiente código en este archivo para cada uno de los servlets que deseemos mapear para reducir la url que el usuario final deba escribir.
Esta forma refiere algunos detalles y es que si tienes una aplicación web que está en desarrollo y actualizaciones constantes, recuerda que GeneXus es cada especificación reescribe algunos archivo y este es uno de ellos.
<servlet>
<servlet-name>login</servlet-name>
<servlet-class>com.testing.login</servlet-class>
</servlet>
Analicemos los valores que están en negrita:
- login: Es el nombre corto que deseas colocarle a tu servlet, ejemplo login.
- servlet/com.testing.login: Es la url real y completa del servlet principal ejemplo tu login.
Con esto te dejo tres alternativas para hacer más agradable el ingreso de los usuarios finales a tu aplicación.
Si quieres mi recomendación, me gusta más el método de redireccionamiento y personalmente uso el lenguaje de servidor en mi caso también JSP.
Espero este articulo les sea de utilidad, y si es así lo compartan.
--
Hugao.
Si te ha gustado este post, y quisieras colaborar con la causa para que todo el contenido sea gratuito y los UC o EO igualmente, puedes donar lo que consideres, usando el botón de la izquierda.
excelente analisis de los casos , muy claro !
ResponderEliminarExcelente
ResponderEliminarMuy bien explicado. Gracias Hugo
ResponderEliminarHola, tengo una web hecha en java con gx9 y la redirección con jsp funcionando sin problemas. Pero al querer usar lo mismo en una web hecha en java con gx x evo3 da un error que no encuentra unas librerías, lo cual resulta extraño ya que con la url completa funciona bien, alguna idea que puede estar fallando?
ResponderEliminarEste es el msj de error:
javax.servlet.ServletException: java.lang.NoClassDefFoundError: org/w3c/dom/ElementTraversal
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:268)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
com.genexus.filters.ExpiresFilter.doFilter(Unknown Source)