Utilisation de pages JSP pour la réécriture d'URL
Action recommandée : Utilisez la gestion de sessions à base de cookies.
Si vous voulez utiliser la réécriture d'URL pour conserver l'état des sessions, n'incluez pas de liens à des parties de votre application Web dans des fichiers HTML simples. Cette restriction est nécessaire car l'encodage des URL ne peut être utilisé dans les fichiers HTML simples. Pour que l'état des sessions puisse être conservé au moyen de la réécriture d'URL, chaque page que l'utilisateur demande au cours de sa session doit contenir du code compréhensible par l'interpréteur Java. Si votre application Web et des parties de votre site auxquelles l'utilisateur est susceptible d'accéder au cours de se session contiennent de tels fichiers HTML simples, convertissez-les en fichiers JSP.
Pourquoi et quand exécuter cette tâche
Cette exigence doit être connue du programme d'écriture de l'application car, contrairement à la conservation des sessions à l'aide de cookies, la conservation des sessions à l'aide de la réécriture d'URL nécessite que chaque page JSP de l'application utilise la réécriture d'URL pour chaque attribut HREF des balises <A>. Les sessions seront perdues si une ou plusieurs pages JSP d'une application n'appellent pas la méthode encodeURL(String url) ou encodeRedirectURL(String url).
Ecriture de liens
Avec la réécriture d'URL, les liens que vous renvoyez au navigateur ou que vous redirigez doivent être suivis de l'ID de session. Par exemple, ce lien d'une page Web :
<a href="store/catalog">
est récrit de la manière suivante :
<a href="store/catalog;$jsessionid$DA32242SSGE2">
Lorsque l'utilisateur clique sur ce lien, la forme récrite de l'URL est transmise au serveur en même temps que la demande du client. Le moteur de servlet reconnaît ;$jsessionid$DA32242SSGE2 comme étant l'ID de session et l'enregistre afin d'obtenir l'objet HttpSession approprié pour l'utilisateur.
L'exemple suivant montre comment du code Java peut être incorporé dans un fichier JSP :
<%
response.encodeURL ("/store/catalog");
%>
Pour réécrire les URL que vous renvoyez au navigateur, appelez la méthode encodeURL() dans votre page JSP avant d'envoyer l'URL au flot de sortie. Par exemple, si une page JSP qui n'utilise pas la réécriture d'URL contient :
out.println("<a href=\"/store/catalog\">catalog</a>")"
remplacez cette instruction par :
out.println("<a href=\"");
out.println(response.encodeURL ("/store/catalog"));
out.println("\">catalog</a>");
Pour récrire les URL que vous redirigez, appelez la méthode encodeRedirectURL(). Par exemple :
response.sendRedirect (response.encodeRedirectURL ("http://myhost/store/catalog"));
Les méthodes encodeURL() et encodeRedirectURL() font partie de l'objet HttpServletResponse. Dans les deux cas, ces appels vérifient si la réécriture d'URL est configurée avant d'encoder l'URL. Si elle ne l'est pas, les méthodes renvoient l'URL originale.
Ecriture de formulaires
Pour écrire des formulaires destinés à être soumis, appelez la méthode response.encodeURL("Logon"); dans la balise ACTION du modèle de formulaire. Par exemple :
<FORM NAME="Logon" METHOD="post" ACTION= <%= response.encodeURL ("Logon") %> >
...
</FORM>
Ecriture de la première page
La page d'entrée, qui est généralement la page d'accueil, ne peut contenir de cadres. Si vous voulez utiliser des cadres dans votre magasin, vous pouvez créer une page d'entrée sans cadre, contenant un lien vers votre magasin. Toutefois, si votre magasin utilise des cadres et qu'un client tente d'accéder directement à l'une des pages du magasin comportant des cadres sans passer par la page d'entrée, sa session risque d'être perdue. La session d'un client peut également être perdue s'il utilise le bouton Page précédente (uniquement lorsque des cadres sont utilisés) pour revenir à la page d'entrée et la regénérer. En effet, si le client régénère la page d'entrée, un nouvel ID de session lui est attribué. Pour essayer d'éviter ce type de perte de session, incluez un lien permettant de revenir à la page d'entrée et informez l'utilisateur qu'il ne doit pas cliquer sur le bouton Page précédente.