java - logo - Máscara de URL en JSP
hbase (4)
Relacionado con esta pregunta: reemplazo de caracteres de URL en JSP con UrlRewrite
Quiero tener URL enmascaradas en este proyecto web JSP Java EE. Por ejemplo, si tuviera esto:
http://mysite.com/products.jsp?id=42&name=Programming_Book
Me gustaría convertir esa URL en algo más amigable para el usuario / Google como:
http://mysite.com/product-Programming-Book
He estado peleando con UrlRewrite, reenvío y RequestDispatcher para lograr lo que quiero, pero estoy perdido. Probablemente debería tener un filtro para todas las solicitudes http, volver a formatearlas y reenviar la página.
¿Alguien puede dar algunas indicaciones? ¿Consejos?
Muchas gracias.
ACTUALIZACIÓN: Servlets lo hizo. Gracias Yuval por su orientación. He estado usando UrlRewrite, como puede ver en la primera oración de la pregunta, también hice una pregunta al respecto. Pero no pude lograr que UrlRewrite funcionara como quería. Servlets hizo el trabajo.
En general, estás al frente de tu aplicación con Apache. Si es así, busca usar mod_rewrite de Apache. http://httpd.apache.org/docs/1.3/mod/mod_rewrite.html
Ha pasado un tiempo desde que me metí con JSP, pero si me sirve la memoria puedes agregar patrones de URL a tu web.xml (o uno de esos archivos de configuración XML) y hacer que el motor de servlet automáticamente envíe la solicitud a una URL válida con tu elección de paramters. Puedo buscar los detalles si lo desea.
En tu caso, asigna http://mysite.com/product-Programming-Book
a la URL http://mysite.com/products.jsp?id=42&name=Programming_Book
y el usuario ya no ve la URL real. Además, puede usar esta URL más fácil de usar dentro de su aplicación, como un nombre lógico para esa página.
Yuval = 8-)
Podría usar un URLRewrite filter
. Es como cómo mod_rewrite es para el servidor web HTTP de Apache.
"Redirigir una URL
<rule>
<from>^/some/old/page/.html$</from>
<to type="redirect">/very/new/page.html</to>
</rule>
Tiny / Freindly url
<rule>
<from>^/zebra$</from>
<to type="redirect">/big/ugly/url/1,23,56,23132.html</to>
</rule>
"
Para empezar, te recomiendo que trates esto dentro de tu aplicación, y no confíes en reescrituras externas, digamos a través de mod_rewrite de Apache (a menos que hayas determinado que esta es la forma más rápida de hacerlo).
Pero algunas cosas primero:
No convertiría esto:
http://mysite.com/products.jsp?id=42&name=Programming_Book
Dentro de esto:
http://mysite.com/product-Programming-Book
Mira, si voy solo por el ejemplo de tu libro, no veo qué está mal con la antigua URL. Después, todo funciona para Amazon. Y no existen las URL amigables de Google (solo amigables para el usuario). Debe considerar por qué desea hacer ese tipo de reescritura y cómo. Por ejemplo, en su opción de reescritura, ¿dónde está la identificación?
Es decir, debe definir una regla lógica que defina
las páginas únicas que desea mostrar y la combinación única de parámetros que pueden identificar cada página.
Por ejemplo, usando su libreta de libros. Digamos que puedes identificar cualquier libro usando las siguientes reglas:
- por ISBN
- por nombre del autor, título y, si corresponde, versión (si falta la versión, asuma la última)
- si se incluye el ISBN con Nombre del autor, Título y / o edición, ignore todos excepto el ISBN. Es decir, trátelo como el anterior (o más precisamente, ignore todos los demás parámetros de identificación del libro cuando el ISBN esté presente).
Con un esquema de URL parametrizado, entonces tendría las siguientes posibilidades:
http://yoursite/products?isbn=123465
http://yoursite/products?author=johndoe&title="the cookbook" << this assumes the latest edition, or 1 if first.
http://yoursite/products?author=johndoe&title="the cookbook"&edition=3
http://yoursite/products?title="the cookbook"&author=johndoe
http://yoursite/products?edition=3&title="the cookbook"&author=johndoe
....
y así sucesivamente para todas las combinaciones. Entonces, antes de buscar una implementación técnica, debe pensar cuidadosamente cómo lo hará. Debería crear una sintaxis y una jerarquía de parámetros (por ejemplo, el autor siempre aparecerá antes del título, y el título siempre aparecerá antes de la edición).
Así que terminarás con lo siguiente (usando el mismo ejemplo que John Doe, el autor, con su libro en la 3ª edición):
http://yoursite/product/isbn/12345
http://yoursite/product/author/johndoe/the%20cookbook << see the %20 for encoding spaces (not a good idea, but something to take into account)
http://yoursite/product/author/johndoe/the%20cookbook/3
Cualquier otra combinación debe generar un error o resolver inteligentemente cómo reescribir las versiones de "cañón" y enviar un HTTP 3xx al cliente con el destino de URL apropiado.
Una vez que haya planchado esos detalles, puede preguntarse si el esfuerzo vale la pena o es necesario.
Por lo tanto, si se encuentra con que lo necesita, entonces la forma más fácil y barata de hacerlo es escribir un filtro que analiza la URL, rompe los parámetros, crea una cadena de URL parametrizada para una página JSP, obtiene su RequestDispatcher y lo reenvía.
No desea hacer reescrituras de URL porque estas incurren en el HTTP 303/307 hacia adelante y hacia atrás entre su servidor y su cliente. O al menos quieres mantener eso al mínimo.