pseudo-archive Java 
Réalisation

pb RequestDispatcher
Bonjour à tous,

Voici mon probleme:

J'ai une servlet (appelons la sA) qui execute un forward sur un jsp
(jspA). jspA appele une servlet sB. Normalement à la sortie de sB, c'est
sA qui reprend la main (si j'ai bien compris le fonctionnement de
RequestDispatcher). Or, après le forward vers jspA, ma servlet sA execute
un nouveau forward vers une servlet sC.

Sauf que là mon applic. plante avec l'erreur suivante:
forward() not allowed after buffer has commited.
Et une IllegalStateException.

D'ou ma question, peut-on faire deux forwards à la suite dans une servlet,
comme ceci:

RequestDispatcher rd =
this.getServletContext().getRequestDispatcher("/jspA");
rd.forward(req, res);

rd = this.getServletContext().getRequestDispatcher("/servlet/sC");
req.setAttribute("nomObject", objet);
rd.forward(req, res);

Merci d'avance,

--
Jean Michel





Salut !

A priori, c'est normal, les specs Servlet disent : 

"If the response has been committed, an IllegalStateException 
must be thrown."

et 

"Before the forward method of the RequestDispatcher interface 
returns, the response must be committed and closed by the servlet 
container."

Donc, pas trop de possibilité de ce côté là.

Je pense qu'il vaut mieux que tu regardes du côté
de la méthode include.

Olivier

> -----Message d'origine-----
> De : Jean Michel Flambard [mailto:flambard.jean-michel@wanadoo.fr]
> Envoyé : lundi 3 juin 2002 17:57
> À : java@u-strasbg.fr
> Objet : pb RequestDispatcher
> 
> 
> Bonjour à tous,
> 
> Voici mon probleme:
> 
> J'ai une servlet (appelons la sA) qui execute un forward sur 
> un jsp (jspA).
> jspA appele une servlet sB.
> Normalement à la sortie de sB, c'est sA qui reprend la main 
> (si j'ai bien
> compris le fonctionnement
> de RequestDispatcher).
> Or, après le forward vers jspA, ma servlet sA execute un 
> nouveau forward
> vers une servlet sC.
> 
> Sauf que là mon applic. plante avec l'erreur suivante:
> forward() not allowed after buffer has commited.
> Et une IllegalStateException.
> 
> D'ou ma question, peut-on faire deux forwards à la suite dans 
> une servlet,
> comme ceci:
> 
> RequestDispatcher rd =
> this.getServletContext().getRequestDispatcher("/jspA");
> rd.forward(req, res);
> 
> rd = this.getServletContext().getRequestDispatcher("/servlet/sC");
> req.setAttribute("nomObject", objet);
> rd.forward(req, res);
> 
> Merci d'avance,
> 
> --
> Jean Michel
> 
> 
> 
> 



non, tu ne peux faire un forward que si tu n'as rien envoyé au client
auparavant. Remplace ton second forward() par un include() et ça devrait
aller. Attention, la ressource (servlet/jsp) incluse ne doit pas modifier
les en-têtes HTTP (donc pas de positionnement de content-type, etc...).

Enfin, tout ça c'est dans la spec :-)

-----Original Message-----
From: "Jean Michel Flambard" <flambard.jean-michel@wanadoo.fr>
To: <java@u-strasbg.fr>
Date: Mon, 3 Jun 2002 17:57:25 +0200
Subject: pb RequestDispatcher

Bonjour à tous,

Voici mon probleme:

J'ai une servlet (appelons la sA) qui execute un forward sur un jsp
(jspA). jspA appele une servlet sB. Normalement à la sortie de sB, c'est
sA qui reprend la main (si j'ai bien compris le fonctionnement de
RequestDispatcher). Or, après le forward vers jspA, ma servlet sA execute
un nouveau forward vers une servlet sC.

Sauf que là mon applic. plante avec l'erreur suivante:
forward() not allowed after buffer has commited.
Et une IllegalStateException.

D'ou ma question, peut-on faire deux forwards à la suite dans une servlet,
comme ceci:

RequestDispatcher rd =
this.getServletContext().getRequestDispatcher("/jspA");
rd.forward(req, res);

rd = this.getServletContext().getRequestDispatcher("/servlet/sC");
req.setAttribute("nomObject", objet);
rd.forward(req, res);

Merci d'avance,

--
Jean Michel






-- Use Opera, the most user-friendly web browser on Earth --


RE: pb RequestDispatcherMerci à Olivier et à Patrice,

je me suis débroullié autrement. Maintenant c'est ma servlet sB
et non sA qui appele la servlet sC.
En fait il y a "plusieurs sA" qui envoient des parametres differents
à sC (dans mon ancienne version).
Maintenant ces paramètres sont mis dans la session pour être
transmis à sB (une seule servlet) qui redirige la requète avec ces
paramètres vers sC.
Je ne souhaitais pas mettre trop d'objets dans la session (je sais
pas pourquoi) c'est pour cela que je voulais que chaque servlet sA
redirige la requète vers sC.
Ouf...

merci encore.

Jan Michel
  ----- Original Message ----- 
  From: OLIVIER CAYRON 
  To: 'java@u-strasbg.fr' 
  Sent: Monday, June 03, 2002 6:24 PM
  Subject: RE: pb RequestDispatcher


  Salut ! 

  A priori, c'est normal, les specs Servlet disent : 

  "If the response has been committed, an IllegalStateException 
  must be thrown." 

  et 

  "Before the forward method of the RequestDispatcher interface 
  returns, the response must be committed and closed by the servlet 
  container." 

  Donc, pas trop de possibilité de ce côté là. 

  Je pense qu'il vaut mieux que tu regardes du côté 
  de la méthode include. 

  Olivier 

  > -----Message d'origine----- 
  > De : Jean Michel Flambard [mailto:flambard.jean-michel@wanadoo.fr] >
  Envoyé : lundi 3 juin 2002 17:57 > À : java@u-strasbg.fr > Objet : pb
  RequestDispatcher > > > Bonjour à tous, > > Voici mon probleme: > > J'ai
  une servlet (appelons la sA) qui execute un forward sur > un jsp (jspA).
  > jspA appele une servlet sB. > Normalement à la sortie de sB, c'est sA
  qui reprend la main > (si j'ai bien > compris le fonctionnement > de
  RequestDispatcher). > Or, après le forward vers jspA, ma servlet sA
  execute un > nouveau forward > vers une servlet sC. > > Sauf que là mon
  applic. plante avec l'erreur suivante: > forward() not allowed after
  buffer has commited. > Et une IllegalStateException. > > D'ou ma
  question, peut-on faire deux forwards à la suite dans > une servlet, >
  comme ceci: > > RequestDispatcher rd = >
  this.getServletContext().getRequestDispatcher("/jspA"); >
  rd.forward(req, res); > > rd =
  this.getServletContext().getRequestDispatcher("/servlet/sC"); >
  req.setAttribute("nomObject", objet); > rd.forward(req, res); > > Merci
  d'avance, > > -- > Jean Michel > > > > 



Une solution pour ne pas mettre trop d'objets dans la session.
Il suffit de créer un seul objet qui encapsule tous les paramètres que
l'on met à jour au cours du parcours des jsp et des servlets.

Laurent.

----- Original Message -----
From: "Jean Michel Flambard" <flambard.jean-michel@wanadoo.fr>
To: <java@u-strasbg.fr>
Sent: Tuesday, June 04, 2002 7:37 PM
Subject: Re: pb RequestDispatcher


RE: pb RequestDispatcherMerci à Olivier et à Patrice,

je me suis débroullié autrement. Maintenant c'est ma servlet sB
et non sA qui appele la servlet sC.
En fait il y a "plusieurs sA" qui envoient des parametres differents
à sC (dans mon ancienne version).
Maintenant ces paramètres sont mis dans la session pour être
transmis à sB (une seule servlet) qui redirige la requète avec ces
paramètres vers sC.
Je ne souhaitais pas mettre trop d'objets dans la session (je sais
pas pourquoi) c'est pour cela que je voulais que chaque servlet sA
redirige la requète vers sC.
Ouf...

merci encore.

Jan Michel
  ----- Original Message -----
  From: OLIVIER CAYRON
  To: 'java@u-strasbg.fr'
  Sent: Monday, June 03, 2002 6:24 PM
  Subject: RE: pb RequestDispatcher


  Salut !

  A priori, c'est normal, les specs Servlet disent :

  "If the response has been committed, an IllegalStateException
  must be thrown."

  et

  "Before the forward method of the RequestDispatcher interface
  returns, the response must be committed and closed by the servlet
  container."

  Donc, pas trop de possibilité de ce côté là.

  Je pense qu'il vaut mieux que tu regardes du côté
  de la méthode include.

  Olivier

  > -----Message d'origine-----
  > De : Jean Michel Flambard [mailto:flambard.jean-michel@wanadoo.fr] >
  Envoyé : lundi 3 juin 2002 17:57 > À : java@u-strasbg.fr > Objet : pb
  RequestDispatcher > > > Bonjour à tous, > > Voici mon probleme: > > J'ai
  une servlet (appelons la sA) qui execute un forward sur > un jsp (jspA).
  > jspA appele une servlet sB. > Normalement à la sortie de sB, c'est sA
  qui reprend la main > (si j'ai bien > compris le fonctionnement > de
  RequestDispatcher). > Or, après le forward vers jspA, ma servlet sA
  execute un > nouveau forward > vers une servlet sC. > > Sauf que là mon
  applic. plante avec l'erreur suivante: > forward() not allowed after
  buffer has commited. > Et une IllegalStateException. > > D'ou ma
  question, peut-on faire deux forwards à la suite dans > une servlet, >
  comme ceci: > > RequestDispatcher rd = >
  this.getServletContext().getRequestDispatcher("/jspA"); >
  rd.forward(req, res); > > rd =
  this.getServletContext().getRequestDispatcher("/servlet/sC"); >
  req.setAttribute("nomObject", objet); > rd.forward(req, res); > > Merci
  d'avance, > > -- > Jean Michel > > > >




Bonjour,

oui j'avais pensé à cette solution. Mais est-ce très génant de mettre
beaucoup d'objets dans la session ? Mettre un gros objet en contenant
plusieurs plus petits n'a de sens, à mon avis, que pour une gestion de la
session plus facile (setAttribute et removeAttribute). Ou alors il y a une
autre raison, que je ne connais pas (place mémoire,... je sais pas) ? Mais
c'est vrai que ça me gene d'avoir un tas d'objets qui trainent dans la
session.

Jean Michel

----- Original Message -----
From: "Laurent Forêt" <l.foret@clipack.com>

> Une solution pour ne pas mettre trop d'objets dans la session.
> Il suffit de créer un seul objet qui encapsule tous les paramètres que
l'on
> met à jour au cours du parcours des jsp et des servlets.
>
> Laurent.





----- Original Message -----
From: "Jean Michel Flambard" <flambard.jean-michel@wanadoo.fr>
To: "Laurent Forêt" <l.foret@clipack.com>; <java@u-strasbg.fr>
Sent: Wednesday, June 05, 2002 11:54 AM
Subject: Re: pb RequestDispatcher


> Bonjour,
>
> oui j'avais pensé à cette solution. Mais est-ce très génant de mettre
> beaucoup d'objets dans la session ?
Non, c'est juste pour la lisibilté.
Et, c'est peut être un gain de place, car on sauvegarde qu'une seule
référence dans la session, mais on perd en perf de vitesse car il faut
faire appel au getter et setter. >Mettre un gros objet en contenant 
plusieurs > plus petits n'a de sens, à mon avis, que pour une gestion de
la session plus > facile (setAttribute et removeAttribute). Oui tout à
fait.

> Ou alors il y a une autre raison, que je ne connais pas (place
> mémoire,... je sais pas) ?
Moi non plus.
> Mais c'est vrai que ça me gene d'avoir un tas d'objets qui trainent dans
la
> session.
Tant que l'on est pas à court d'idée pour leur donner des noms, ça va.

Laurent.
>
> Jean Michel
>
> ----- Original Message -----
> From: "Laurent Forêt" <l.foret@clipack.com>
>
> > Une solution pour ne pas mettre trop d'objets dans la session.
> > Il suffit de créer un seul objet qui encapsule tous les paramètres que
> l'on
> > met à jour au cours du parcours des jsp et des servlets.
> >
> > Laurent.
>
>
>
>


Personnellement le seul conseil que l'on m'a donné c'est de mettre le
moins de choses possibles dans la session. En effet, si l'on veut faire du
load balancing, le serveur copie le contenu de la session entre les
différents pc et si la session est très chargée cela joue beaucoup sur les
perfs.

Seb

Le Mercredi 5 Juin 2002 09:54, vous avez écrit :
> Bonjour,
>
> oui j'avais pensé à cette solution. Mais est-ce très génant de mettre
> beaucoup d'objets dans la session ? Mettre un gros objet en contenant
> plusieurs plus petits n'a de sens, à mon avis, que pour une gestion de
> la session plus facile (setAttribute et removeAttribute). Ou alors il y
> a une autre raison, que je ne connais pas (place mémoire,... je sais
> pas) ? Mais c'est vrai que ça me gene d'avoir un tas d'objets qui
> trainent dans la session.
>
> Jean Michel
>
> ----- Original Message -----
> From: "Laurent Forêt" <l.foret@clipack.com>
>
> > Une solution pour ne pas mettre trop d'objets dans la session.
> > Il suffit de créer un seul objet qui encapsule tous les paramètres que
>
> l'on
>
> > met à jour au cours du parcours des jsp et des servlets.
> >
> > Laurent.

__________________________________________________________________________
____ ifrance.com, l'email gratuit le plus complet de l'Internet ! vos
emails depuis un navigateur, en POP3, sur Minitel, sur le WAP...
http://www.ifrance.com/_reloc/email.emailif