[Débutant] Attribut objet null après instanciation
Bonjour,
J'essaie de faire fonctionner une application J2EE basique en reprenant l'exemple d'un livre.
J'aiun problème à l'execution, erreur java.NullPointerException.
Après recherche et plusieurs tests, j'ai identifié la source du problème, par contre je ne le comprends pas, voici le code :
Servlet est mon controlleur dans lemodèle mvc
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
|
public class Servlet extends HttpServlet {
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
AccessBd accessbd = (AccessBd) session.getAttribute("accessbd");
if(accessbd == null) {
System.err.println("accesbd null");
accessbd = new AccessBd(request, response);
session.setAttribute("accessbd", accessbd);
}
else {
System.err.println("accesbd non null");
...
}
String formulaire = request.getParameter("formulaire");
if(formulaire == null) {
if(accessbd == null) {
System.err.println("encore accesbd null");
}
if(accessbd.cnx == null) {
System.err.println("avant appel cnx null");
}
ListePersonne liste = accessbd.getListePersonne(); ---> ligne qui pose problème
...
} |
Elle fait appel à la classe AccessBd qui fait partie du modèle
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52
| ublic class AccessBd {
Connection cnx = null;
HttpServletRequest request = null;
HttpServletResponse response = null;
public AccessBd(HttpServletRequest request, HttpServletResponse response) {
this.request = request;
this.response = response;
try{
Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost/bdtest";
cnx = DriverManager.getConnection(url, "root", "active");
if (cnx == null) {
System.err.println("cnx null instanciation");
}
}
catch(ClassNotFoundException e) {
displayException(e);
}
catch(SQLException e) {
displayException(e);
}
}
public ListePersonne getListePersonne() {
try {
if(cnx != null)
System.err.println("cnx non null");
else
System.err.println("cnx null");
Statement st = cnx.createStatement();
ResultSet rs = st.executeQuery("SELECT * FROM personne");
ListePersonne listePersonne = new ListePersonne();
while(rs.next()) {
...
}
st.close();
rs.close();
return listePersonne;
}
catch (SQLException e) {
displayException(e);
}
return null;
} |
à l'execution dans laconsole :
accesbd null
avant appel cnx null
cnx null
Donc l'instanciation de AccessBd semble être fonctionnelle, j'obtiens bien une connection vers mon SGBD mais, pourtant lors de l'appel de la fonction getListpersonne, ma connection semble être nulle.
Je ne comprends pas trop pourquoi,
Désolé pour le long post