Java, J2ee, jsp, tomcat et header location 301

16 septembre 2009 par: Benoit Bonneville

Vous 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.

Filed under: Développement

Répondre