Escribir plantillas JSP para la reescritura de URL

Si desea utilizar la reescritura de URL para mantener el estado de una sesión, no incluya enlaces a partes de la aplicación Web en archivos HTML planos. Esta restricción es necesaria porque la codificación de URL no puede utilizarse en archivos HTML planos. Para mantener el estado de una sesión mediante la reescritura de URL, cada página que el usuario solicite durante la sesión debe contener código que el intérprete Java pueda entender. Si tiene estos archivos HTML planos en su aplicación Web y en zonas del sitio a las que el usuario podría acceder durante la sesión, convierta esos archivos en archivos JSP. Esto afectará al transcriptor de aplicaciones porque, a diferencia del mantenimiento de sesiones mediante cookies, el mantenimiento de sesiones mediante la reescritura de URL requiere que cada plantilla JSP de la aplicación utilice codificación URL para todos los atributos HREF en los identificadores <A>. La sesión se interrumpirá si una o más plantillas JSP de una aplicación no llaman a los métodos encodeURL(String url) o encodeRedirectURL(String url).

Escribir enlaces

Si se utiliza la reescritura de URL, todos los enlaces que devuelve al navegador o redirecciona deben incluir el ID de sesión. Por ejemplo, este enlace de una página Web:

<a href="store/catalog">

se reescribe como:

<a href="store/catalog;$jsessionid$DA32242SSGE2">

Cuando el usuario pulsa este enlace, el formato reescrito del URL se envía al servidor como parte de la petición del cliente. El Motor de servlets identifica ;$jsessionid$DA32242SSGE2 como el ID de sesión y lo guarda para obtener el objeto HttpSession adecuado para este usuario.

El ejemplo siguiente muestra cómo puede incluirse código Java en un archivo JSP:

<%
response.encodeURL ("/store/catalog");
%>

Para reescribir los URL que devuelve al navegador, llame al método encodeURL() de la plantilla JSP antes de enviar el URL a la corriente de salida. Por ejemplo, si una plantilla JSP que no utiliza la reescritura de URL contiene:

out.println("<a href=\"/store/catalog\">catalog</a>")"

sustitúyalo por:

out.println("<a href=\"");
out.println(response.encodeURL ("/store/catalog"));
out.println("\">catalog</a>");

Para reescribir los URL que redirecciona, llame al método encodeRedirctURL(). Por ejemplo, si la plantilla JSP contiene:

response.sendRedirect (response.encodeRedirectURL ("http://myhost/store/catalog"));

Los métodos encodeURL() y encodeRedirectURL() forman parte del objeto HttpServletResponse. En ambos casos, estas llamadas comprueban si se ha configurado la reescritura de URL antes de codificarlo. Si no se ha configurado, devuelven el URL original.

Escribir formularios

Para escribir formularios a fin de someterlos, llame al método response.encodeURL("Logon"); en el identificador ACTION de la plantilla de formularios. Por ejemplo,

String strLoginPost = response.encodeURL("Logon");

<FORM NAME="Logon" METHOD="post" ACTION= <%= strLoginPost %> >

...


</FORM>

Escribir la primera página

La página de entrada, que generalmente es la página de presentación, no puede contener marcos. Si desea utilizar marcos en su tienda, puede hacer que una página sin marcos con un enlace a la tienda actúe como la página de entrada de la tienda. Sin embargo, si la tienda sí utiliza marcos y un cliente intenta acceder a esas páginas con marcos sin pasar primero por la página de entrada, puede perder la sesión. Los clientes también pueden perder su sesión si utilizan el botón Atrás (sólo con marcos) para volver a la página de entrada y renovarla. Al renovar la página de entrada se les da un nuevo ID de sesión. Es necesario un enlace a la página de entrada como alternativa al botón Atrás, para evitar este tipo de pérdidas de sesión.

Conceptos relacionados (1.275 bytes)

Tareas relacionadas (1201 bytes)

Copyright de IBM