Partage d'un Vecteur entre plusieurs Servlets et JSP

[Résolu/Fermé]
Signaler
Messages postés
24
Date d'inscription
jeudi 1 août 2013
Statut
Membre
Dernière intervention
12 avril 2015
-
Messages postés
24
Date d'inscription
jeudi 1 août 2013
Statut
Membre
Dernière intervention
12 avril 2015
-
Bonjour,

Mon projet serait similaire à la gestion d'une bibliothèque :
- une page pour ajouter un nouvel étudiant,
- une autre pour un nouveau livre,
- et une pour gérer l'emprunt de livres par les étudiants
(c'est un tout petit devoir, donc il n'y aura pas de listes immenses de livres et d'étudiants)

Je travaille selon le patron MVC (modèle-vue-contrôleur), c'est-à-dire Java Beans, JSP, Servlet.

Ce que j'ai déjà : le MVC pour ajouter un étudiant, et celui pour ajouter un livre.
Et cela crée deux Vecteurs avec tous les étudiants/livres.

J'aimerais utiliser ces 2 Vecteurs dans le MVC Emprunt (pour, entre autres, afficher les étudiants et les livres dans la vue de l'emprunt)

Alors voici une partie du code :

vueEtudiant.jsp
<%@page import="org.apache.jasper.tagplugins.jstl.core.ForEach"%>
<%@page import="model.Etudiant"%>
<%@page import="java.util.Vector"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Etudiant jsp !</title>
</head>
<body>

<% Vector<Etudiant> etuVector = (Vector<Etudiant>) request.getAttribute("etudiants"); %>

<form method="get" action="EtudiantServlet">

<table>
<tr>
<td>Nom</td>
<td><input type="text" name="nom"></td>
</tr>
<tr>
<td>Prenom</td>
<td><input type="text" name="prenom"></td>
</tr>
<tr>
<td>Année</td>
<td><input type="text" name="annee"></td>
</tr>

<tr>
<td></td>
<td><input type="submit" value="Ajouter"></td>
</tr>
</table>

</form>


<table border="1px" align="left">
<tr bgcolor="yellow">
<th>Nom</th>
<th>Prenom</th>
<th>Année</th>
</tr>

<%

if(etuVector!=null)
for(int i=0;i<etuVector.size();i++){

out.print("<tr>");

out.print("<td>"+ etuVector.get(i).getNom() +"</td>");
out.print("<td>"+ etuVector.get(i).getPrenom() +"</td>");
out.print("<td>"+ etuVector.get(i).getAnnee() +"</td>");
out.print("</tr>");

}
%>

</table>

<br><br>
<br>


<a href="accueil.jsp"> Accueil </a>


</body>
</html>


EtudiantServlet.java
package controleur;

import java.io.IOException;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import model.Etudiant;
import model.EtudiantOperationImpl;


@WebServlet("/EtudiantServlet")
public class EtudiantServlet extends HttpServlet {
private static final long serialVersionUID = 1L;

private EtudiantOperationImpl model;


public void init(ServletConfig config) throws ServletException {
model=new EtudiantOperationImpl();
}


protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

if(request.getParameter("nom")!=null){
String nom = request.getParameter("nom");
String prenom = request.getParameter("prenom");
String annee = request.getParameter("annee");
Etudiant etu = new Etudiant(nom, prenom, annee);
model.ajouterEtudiant(etu);
}

request.setAttribute("etudiants", model.getAllEtudiants());
request.getRequestDispatcher("vue.jsp").forward(request, response);



}



protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {



}

}

Et les mêmes fichiers pour le MVC des Livres.
Et ce que j'aimerais faire c'est manipuler etuVector et livreVector dans la JSP et la Servlet de l'emprunt

Merci d'avance pour votre aide =)
Je suis débutant en développement web. Dites-le moi si je n'ai pas été assez clair.

1 réponse

Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 880
Bonjour,

Tu devrais faire appel au scopes de sessions dans ta servlet.

HttpServletRequest request;
HttpSession session = request.getSession();

Tu peux utiliser la session avec des setAttribute/getAttribute pour persister des données d'une requête à une autre pour le même utilisateur (la même session).
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 42674 internautes nous ont dit merci ce mois-ci

Messages postés
24
Date d'inscription
jeudi 1 août 2013
Statut
Membre
Dernière intervention
12 avril 2015

Merci pour ta réponse (exactement la même qu'on m'a donnée sur un autre forum :) ) mais pourrais-tu me donner plus de détails stp ?

Je suis désolé de te demander autant d'aide, je suis vraiment un débutant.
J'ai reçu trop peu de cours, presque tout ce que j'ai appris c'était en tâtonnant.
Mais là ça fait presque 3 jours que je coince sur ce problème (qui bloque tout mon projet) sans obtenir aucun résultat.
  • Dans EtudiantServlet.java, est-ce que je dois seulement remplacer ça
    request.setAttribute("etudiants", model.getAllEtudiants());request.getRequestDispatcher("vueEtudiant.jsp").forward(request, response);
    par ça ?
    session.setAttribute("etudiants", model.getAllEtudiants());session.getRequestDispatcher("vueEtudiant.jsp").forward(session, response);
  • Et est-ce que tu pourrais juste me dire ce que je devrais écrire dans vueEmprunt.jsp et dans EmpruntServlet.java ? (bien sûr juste la partie pour récupérer le vecteur) (tu peux te baser sur la syntaxe des 2 autres fichiers)

Encore une fois merci, ça me sortirait d'une galère énorme =)
Messages postés
16400
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
21 septembre 2021
2 880
A priori ça c'est faux :
session.getRequestDispatcher("vueEtudiant.jsp").forward(session, response);
. La réponse que l'on envoie c'est par rapport à la requête.

Ça c'est bon :
session.setAttribute("etudiants", model.getAllEtudiants());
. Cela permet de faire un cache côté serveur, la liste des étudiants sera donc conservée telle quelle pendant toute la durée de la session, et ne sera accessible que par l'utilisateur lié à cette session (un autre utilisateur aura une autre session, la liste sera différente).

Puis à l'utilisation tu as peux faire un
session.getAttribute("etudiants");

Il faudra juste vérifier que la liste existe bien, car si c'est la première requête effectuée, la session viendra d'être créée et la liste n'existera pas encore.

HttpSession session = request.getSession();
Vector<Etudiants> all = (Vector<Etudiant>) session.getAttribute("etudiants");
if (all==null) {
    all = model.getAllEtudiants();
    session.setAttribute("etudiants", all);
}
// ...
Messages postés
24
Date d'inscription
jeudi 1 août 2013
Statut
Membre
Dernière intervention
12 avril 2015

Merci mon sauveur =D