Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

qqun pour m'expliquer le fonctionnement du RequestDispatcher dans le cas présent svp ?

4 réponses
Avatar
Gabriel
InfoSession infoSession = (InfoSession) session
.getAttribute("infoSession");


if (infoSession == null) {
outils.Utilitaires.messageDebug("Session expirée");
// La session a expiré

String url = "/controller?event=ERROR_EVENT&erreur=" +
"sessionExpire";

outils.Utilitaires.messageDebug("Dispatch de l'erreur
vers : " + url);
RequestDispatcher rd = req.getRequestDispatcher(url);
outils.Utilitaires.messageDebug("rd : " + rd.toString());

try {
outils.Utilitaires.messageDebug("rd : " + rd.toString());
// on va vers erreur.jsp par l'intermédiaire du controleur
rd.forward(req, res);

}
// Là, tout est perdu !!
catch (ServletException e) {
e.printStackTrace();
}
catch (IOException e) {

e.printStackTrace();
}
}
// ne devrait pas s'exécuter normalement.

String bundleName = "MessagesBundle_" +
infoSession.getLangue(); // il arrive à cette ligne et me dit null
pointer exception alors qu'il a fait le bloc if (infoSession == null)
et le rd.forward. (il repart en fait vers une jsp d'erreur).

Ce que je ne comprends pas c'est prq il continue à parser après le
forward ??

Je pourrai enfermer le reste du code dans un grand if-else mais j'aime
bien comprendre :)

Merci d'avance !

4 réponses

Avatar
Cédric Chabanois
Gabriel wrote:
InfoSession infoSession = (InfoSession) session
.getAttribute("infoSession");


if (infoSession == null) {
outils.Utilitaires.messageDebug("Session expirée");
// La session a expiré

String url = "/controller?event=ERROR_EVENT&erreur=" +
"sessionExpire";

outils.Utilitaires.messageDebug("Dispatch de l'erreur vers
: " + url);
RequestDispatcher rd = req.getRequestDispatcher(url);
outils.Utilitaires.messageDebug("rd : " + rd.toString());

try {
outils.Utilitaires.messageDebug("rd : " + rd.toString());
// on va vers erreur.jsp par l'intermédiaire du controleur
rd.forward(req, res);

}
// Là, tout est perdu !!
catch (ServletException e) {
e.printStackTrace();
}
catch (IOException e) {

e.printStackTrace();
}
}
// ne devrait pas s'exécuter normalement.

String bundleName = "MessagesBundle_" + infoSession.getLangue();
// il arrive à cette ligne et me dit null pointer exception alors qu'il
a fait le bloc if (infoSession == null) et le rd.forward. (il repart en
fait vers une jsp d'erreur).

Ce que je ne comprends pas c'est prq il continue à parser après le
forward ??

Je pourrai enfermer le reste du code dans un grand if-else mais j'aime
bien comprendre :)


rd.forward est un appel de méthode comme une autre. Et après un appel de
méthode, on en revient ...

Cédric

Avatar
JScoobyCed
Gabriel wrote:

Merci !


rd.forward est un appel de méthode comme une autre. Et après un appel
de méthode, on en revient ...

Cédric


Hmm, c'est pas une gestion de "flux" comme je le pensais : c'est un
appel de méthode : PHP m'a traumatisé :)
puis-je traiter l'erreur dans ma servlet autrement qu'avec un if-else ?


Umm... peut-etre un 'return' apres l'appel a forward()

Si vous n'aimez pas les "grands" if-else et que vous n'etes pas dans un
methode statique:
<code>
public void serviceRequest(...) {
...
if(session==null)
forwardError(...);
else
processRequest(...);
}

public void forward(...) {
}

public void processRequest(...) {
}
</code>

--
JScoobyCed
What about a JScooby snack Shaggy ? ... Shaggy ?!


Avatar
Gabriel
Merci !

rd.forward est un appel de méthode comme une autre. Et après un appel de
méthode, on en revient ...

Cédric
Hmm, c'est pas une gestion de "flux" comme je le pensais : c'est un

appel de méthode : PHP m'a traumatisé :)
puis-je traiter l'erreur dans ma servlet autrement qu'avec un if-else ?

Avatar
Gabriel
JScoobyCed wrote:
Gabriel wrote:

Merci !


rd.forward est un appel de méthode comme une autre. Et après un appel
de méthode, on en revient ...

Cédric



Hmm, c'est pas une gestion de "flux" comme je le pensais : c'est un
appel de méthode : PHP m'a traumatisé :)
puis-je traiter l'erreur dans ma servlet autrement qu'avec un if-else ?



Umm... peut-etre un 'return' apres l'appel a forward()

Si vous n'aimez pas les "grands" if-else et que vous n'etes pas dans un
methode statique:
<code>
public void serviceRequest(...) {
...
if(session==null)
forwardError(...);
else
processRequest(...);
}

public void forward(...) {
}

public void processRequest(...) {
}
</code>

ah oui, c'est pas bête ca, je vais implémenter ca dans mes doGet et doPost.


Merci bcp !