transfert d'objets entre servlets - Java - Programmation
Marsh Posté le 27-01-2004 à 15:44:14
une servlet ça ne s'instancie pas.
RequestDispatcher -> forward()
Marsh Posté le 27-01-2004 à 23:06:17
Citation : servlet2 s2 = new servlet2(); |
comme le dit --, c'est pas à toi d'instancier les servlets, c'est le moteur de servlet qui fait ca. Toi tu peux passer la main d'une servlet à une autre avec un RequestDispatcher.forward
Ensuite, la prog web c'est du déconnecter : à chaque traitement d'une requête HTTP, tu te trouves dans un nouveau "contexte" => ce que tu as fait lors d'une requête précédente (crér un vecteur, l'attaché à la requête) n'est pas récupérable puisque qu'il s'agit d'une autre requête.
Tu as néanmmoins quelques solutions pour t'en sortir : Tu peux utiliser une session pour stocker des attributs (comme tu le fais avec la request). La session te permet de stocker puis de récupérer des objets pour toute les requêtes d'un même utilisateurs.
Tu peux aussi stocker des objets nécessaires à toute ton application web dans le ServletContext.
Ensuite y a les bidouilles habituelles de la prog web du style champs caché et paramêtres d'url ...
Dans ton cas, c'est les sessions qu'il faut utiliser.
Marsh Posté le 29-01-2004 à 10:36:39
Merci beaucoup pour les réponses ... elles m'ont permis de faire fonctionner enfin pas mal de trucs qui plantaient.
Marsh Posté le 27-01-2004 à 14:59:43
J'ai a programmer plusieurs servlets s'enchainant et a passer des Objets de l'une a l'autre... jusque la, pas trop de problemes...
MAIS, comment passer un Objet (pour les strings et types simples, j'ai juste a mettre des inputs en "hidden" dans le code html) de la methode doPost de ma servlet 1 a la methode doPost de ma servlet 2 ??
voici mon code :
classe servlet1:
... doPost(... request, ... response) ... {
Vector v = monvecteur;
servlet2 s2 = new servlet2();
request.setAttribute("vecteur",v);
s2.doGet(request,response);
}
classe servlet2:
Vector w = new Vector();
... doGet(...request,...response)...{
...
w=(Vector)request.getParameter("vecteur" );
...
out.println("<form action=servlet2 method=POST>" );
...}
// jusque la tout marche ! mais apres ... =(
... doPost(...request,...response)...{
// la, j'ai besoin d'un element du vecteur w ... mais apparament le fait de lancer le doPost reinitialise mon vecteur !
Objet a = (Objet)w.get(1);
request.setAttribute("element",a);
servelt3 s3 = new Servlet3();
s3.doGet(request,response);
}
// j'obtient une erreur de type NullPointerException signifiant que mon vecteur w est VIDE ! ...
Comment faire SVP pour pouvoir recuperer les elements de "monvecteur" dans le doPost de Servlet2 ???
j'ai consulte les API et qqs tutorials mais sans succes ... alors, Merci d'avance.