# Java > Dveloppement Web en Java > Servlets/JSP >  JSP->servlet->redirection

## zulot

Bonjour,

Voila j'ai une page JSP avec un formulaire.

Ce que je voudrais c'est envoyer le formulaire a une servlets qui redirige directement soit vers le formulaire si erreur soit vers une autre page.

Le hic c'est que je sais pas trop comment m'y prendre.
Quand je redirige depuis la servlet ca change pas l'url et j'ai des problemes apres.

Alors si quelqu'un pouvait me donner une piste ou un tutoriel bien expliqu merci.

----------


## Fench

Salut

Dans ta JSP
method="post" action="taServlet"

Dans ta Servlet, 


```

```

----------


## OButterlin

Il serait prfrable de passer par un RequestDispatcher dans la servlet, comme ceci 


```

```

Pour la page, tu rfrences la servlet dans la balise <form> attribut "action"


```

```

et le lien dans le web.xml


```

```

A+

----------


## zulot

Donc en fait si je resume ( ma facon je dirais)


Dans ma servlet je fais tout les traitements que je veux, puis au moment de la redirection je fais ca :



```

```

Mais est-ce que ca propage le formulaire? (Je ne pense pas mais je prefere demander)

Ma servlet ne contiendra alors aucun code html.
Et si je vois bien l'effet l'url apparaitra pendant un laps de temps tres tres ... court avant de rediriger vers la page voulu.

----------


## OButterlin

Tu propages les donnes du formulaire puisqu'il s'agit du mme request.
Par contre, si tu veux faire une redirection, il ne faut pas utiliser le RequestDispatcher mais 


```

```

----------


## zulot

Autre question.

Et si je veux passer une variable lors de ma redirection, quels sont les meilleurs options? Et comment faire?

----------


## aurelientp

Salut

Pour envoyer une variable : 



```
request.setAttribute("nomvariable",variable);
```

et tu la rcupres dans ta jsp avec



```
request.getAttribute("nomvariable");
```

@+

----------


## OButterlin

Tu as galement la possibilit de rajouter des paramtres directement comme ceci


```

```

ou mthode aurelientp...
Tout dpend un peu du traitement que tu veux faire des paramtres et surtout la taille des donnes attaches (une URL est limite en taille)

A+

----------


## itmak

Bonjour,


Pour le Servlet vers JSP: 
1- la classe suivante est une servlet qui envoie un objet (ArrayList ou String) vers une jsp (qui se trouve dans WEB-INF qui est la racine dans Tomcat comme WWW pour WAMP: easyPHP)
2- la mthode this.getServletContext().getRequestDispatcher  permet de rediriger vers la jsp. 




```

```



Pour JSP vers Servlet: Je vous propose une astuce pour envoyer des objets.. toujours avec les superbes mthode setAttribute() et getAttribute() ...pas mal non?
1- Le principe est de prendre un ArrayList de le transformer en Chaine de caractre en concatnant les mots spars par des '-' par exemple.
2- L'envoie est simple :Utiser le paramtre de l'URL du formulaire.

Allez voici le code


```
..............
```

Olala... dsol mais le code est en cours de construction.. Je vous pries de bien vouloir patienter...Merci

Bon courage...Cordialement

----------


## zulot

Merci de toutes ces reponses je vais pouvoir travailler tranquilement.

Par contre que pensez vous de la mise en session de variable?

----------


## aurelientp

La mise en session d'objet est une bonne pratique si cela peut viter des accs en base de donnes.
Par contre, il faut faire attention  ne pas stocker trop d'objets dans la session car si le nombre d'utilisateurs augmente beaucoup, la taille mmoire utilise par la session de chaque utilisateur va galement augmenter! ce qui peut dclencher des OutOfMemory!

Et attention aux rfrences vers d'autres objets, listes d'objets, etc quand tu met en session un objet. Cela peut faire exploser la taille mmoire ncessaire

----------


## itmak

Merci aurelientp,

En effet a peut vite faire "dborder la mmoire"!

Vaut mieux utiliser l'envoi de paramtres au lieu des sessions qui sont plutot bien pour scuriser les accs et personnaliser par exemple, notamment les objets, avec la mthode que j'ai cit plus haut!

a permet:
   de sparer les traitements de l'interface.
   rajouter facilement des classes java
   Modification facile de l'interface
   non saturation de la mmoire
   rutilisation du code

Vive l'objet!!!

A+

----------


## zulot

Oui mais lors d'une redirection simple je peux pas reellement passer dobjet en post?

Et pour les objets faut juste qu'il soit serializable?

Et comment faire pour tester sur une page que je fais un post de cette manire. Car sur la meme page je peux ou pas l'avooir. d'ou diffrent traitement.

----------


## itmak

j'ai pas bien saisi ce que tu veux dire?
dsol

----------


## zulot

Je vais essayer d'etre plus claire.

Pour rsumer le dbut
1- j'ai ma JSP qui envoie un formulaire  une servlet pour traitement.
Jusque la pas de soucis.

2- Ma servlet fais le traitement et y a deux cas "reussite" et "echec"

3- Maintenant ma servlet redirige (vers la page de jsp qui a envoy le formulaire ou un autre c'est pas important)

Donc comme je veux pas propager le formulaire j'ai opt pour :


```

```

Je ne veux pas utiliser le passage de variable par url.
Mais je voudrais pouvoir rediriger en envoyant un objet.

Donc la deux choix Session ou post d'apres ce que j'ai compris.

Dans le cas de la session, Comment faire pour tester si une variable de session existe? (Et oui ma page JSP peut ne pas recevoir la dite variable dans certain cas et ca me fais une erreure)

Dans le cas du post, comment avec la simple redirection envoy mon objet?

Ensuite question juste de verification pour envoyer un objet il faut que la classe soit serializable ou il faut autre chose?

----------


## itmak

Merci pour ces claircissements,

Alors pour l'envoie d'un objet en effet il faut qu'il soit srialisable ou du moins qu'il hrite d'un objet srialisable!

Pour la redirection, pour le moment je n'ai test que la redirection d'objets avec le code suivant 


```

```

Et a marche!

Pour la redirection avec 


```

```

Je n'ai pas essay, dsol.

Pour l'utilisation de la variable session,il faut que tu me montre le code ou tu cre ta session aisin que celui ou tu dois tester l'existance de la variable session!
En effet si tu cre ta variable de session  et tu l'initialise avec 



```
maSession.putValue()
```

en principe tu peut la rcuprer avec l'instruction.



```
maSession.getValue()
```

Du code please, ::cry:: 
Bon courage... ::D:

----------


## zulot

Pour la session c'est pas tant la mise en session qui pose probleme mais la recuperation.

Je m'explique.
Dans ma JSP on peut y acceder par plusieur page mais toute ne renvoie pas l'objet session erreur.
Du coup quand j'essaye de le recuperer parfois il existe pas, et j'ai une erreur.
Je voudrais juste tester l'existence de cette objet.

Comment je le met en sessions dans ma servlet :


```

```

----------


## OButterlin

Dans la JSP, tu peux tester comme ceci


```

```

ou si tu dois insrer du code html


```

```

L j'ai utilis un objet String mais tu peux faire la mme chose avec ton objet Erreur

----------


## zulot

Donc en fait en java tu peux essayer d'appeler la valeur mais ca retournera null si ca existe pas dans le tableau de session?

EDIT: Bon j'ai test merci pour toutes ces informations ca m'a t trs trs utile.

Parfois les choses les plus simlpes sont les plus compliqu a comprendre (enfin pour moi lol)

Du coup maintenant aprs de multiple test je vais peut-tre opter pour la propagation du formulaire en lui ajoutant une variable peut--tre objet.

----------


## itmak

Oui zulot... ::yaisse2:: 
une fois l'objet pass comme paramtre t'es tranquil, plus de session  "trimbaler" dans la mmoire!
 ::mouarf::

----------


## zulot

Merci  tous.

Peut on imprimer une conversation?

----------


## itmak

Dans la barre en haut  gauche du lien "rechercher" 
"outils de la discussion"
En fait c'est une version imprimable.
a+

----------


## zulot

Merci mais j'ai un proleme avec l'impression c'est franchement trop gros.
Genre 12 pages pour le sujet c'est un peu trop y a pas moyen de reduire la taille des caracteres?

----------

