Java, J2ee, jsp, tomcat et header location 301
16 septembre 2009 par: Benoit BonnevilleVous voulez faire une redirection 301 Moved Permanently dans les entêtes HTTP.
Votre application est en Java J2EE avec Tomcat, du JSP et éventuellement Struts.
c’est très simple
Redirection HTTP
Vous voulez faire une redirection entre 2 pages internet de votre site web, sans que la page se charge dans le navigateurs en utilisant les entêtes HTTP (HTTP Headers).
Il existe un code HTTP : 301 Moved Permanantly
Le navigateur changera alors l’URL courante pour une nouvelle page, spécifiée dans une autre entête : « location : ma nouvelle url ».
La solution en J2EE
En J2EE, technologie web de Java, vous avez un dans votre Action un object appelé response de la classe HttpServletResponse.
Cette Objet possède la méthode
sendRedirect(url);
Qui est la méthode qui permet de renvoyer la redirection.
Attention 1
Vous ne devez pas écrire dans la sortie standard avant d’appelé cette méthode.
C’est à dire ne pas utiliser « response.getOutputStream(); »
Attention 2
Tout le code après cette méthode sera bien exécuté mais ne sera pas affiché dans le navigateur.
En général il vaux mieux faire suivre par ceci pour arrêter l’exécution:
return null;
La solution Struts
Struts est un framework J2EE qui respecte le pattern MVC.
Rajouter le mapping suivant dans struts-config.xml :
<action
path="/monAction"
type="com.monprojet.action.MonAction">
<forward name="REDIRECT" path="/monActionApresRedirection.do" redirect="true" />
</action>
Puis dans votre action MonAction
Dans la méthode execute
Vous n’avez qu’a appeler :
return mapping.findForward("REDIRECT");
Informations complémentaires
En language PhP
La solution équivalente en php est le célèbre header location :
header("Location : mon_url");
exit();
Avec Hibernate
Si vous utilisez Hibernate, n’oubliez pas de commit() la session avant de faire un return.