Partage d'un Vecteur entre plusieurs Servlets et JSP

Résolu/Fermé
fizzpass Messages postés 24 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 12 avril 2015 - 26 févr. 2015 à 13:28
fizzpass Messages postés 24 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 12 avril 2015 - 28 févr. 2015 à 03:57
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.
A voir également:

1 réponse

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
26 févr. 2015 à 20:20
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
fizzpass Messages postés 24 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 12 avril 2015
27 févr. 2015 à 00:11
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 =)
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
27 févr. 2015 à 00:27
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);
}
// ...
0
fizzpass Messages postés 24 Date d'inscription jeudi 1 août 2013 Statut Membre Dernière intervention 12 avril 2015
28 févr. 2015 à 03:57
Merci mon sauveur =D
0