Bonjour,
Je suis toujours sur mon projet de plateforme éducative et j'ai un nouveau un problème que je ne m'explique pas.
Donc voici le code:
Servlet
JSP
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91 import java.io.IOException; import java.io.PrintWriter; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import javax.servlet.RequestDispatcher; 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 databean.Exercise; import databean.Lesson; import databean.Summary; /** * Servlet implementation class controlsumary */ @WebServlet("/controlsumary") public class controlsumary extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse response) */ protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub PrintWriter out = response.getWriter(); response.setContentType("text/html"); Connection con=null; Statement stmt; try{ //driver Class.forName("com.mysql.jdbc.Driver"); }catch(ClassNotFoundException e){ out.print("erreur au driver "+e.getMessage()); } String url = "jdbc:mysql://localhost/test"; //connection à base de données String nom = "root"; String mdp = ""; try{ con = DriverManager.getConnection(url,nom,mdp); stmt = con.createStatement(); //query String query ="select distinct lesson.ID_LESSON, titre, abstract, exercise_number from exercise ,lesson where exercise.id_lesson=lesson.id_lesson "; ResultSet rs = stmt.executeQuery(query); Summary sum=new Summary(); Lesson beanlesson=new Lesson(); int idtmp=-1; Exercise tmp=new Exercise(); beanlesson.setListexercise(new ArrayList<Exercise>()); while(rs.next()){ if(idtmp==-1 || beanlesson.getId_lesson()!=idtmp ){ //on regarde si c'est la premiére lesson ou si on est tourjours dans la même if(idtmp!=-1){ //si changement de lesson on ajoute le bean à l'arraylist sum.getListlesson().add(beanlesson); } beanlesson.setId_lesson(rs.getInt(1)); //if we begin a new lesson we change the value of bean beanlesson.setTitle(rs.getString(2)); // id_lesson, title & absract beanlesson.setAbstract(rs.getString(3)); idtmp=beanlesson.getId_lesson(); } tmp.setExercise_number(rs.getInt(4)); //add a new exercise of the current lesson to the list beanlesson.getListexercise().add(tmp); } //now, we forward the list to jsp request.setAttribute("summ", sum); RequestDispatcher rd=request.getRequestDispatcher("sumaryview.jsp"); rd.forward(request,response); con.close(); }catch(SQLException e){ out.print("erreur sql"+e.getMessage()); } out.println("</body>"); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 <%@ page import="java.util.ArrayList"%> <%@ page import="databean.Lesson"%> <%@ page import="databean.Exercise"%> <?xml version="1.0" encoding="utf-8" ?> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Samenvatting</title> </head> <body> <h1>Samenvatting</h1> <jsp:useBean id="summ" scope="request" class="databean.Summary" /> <jsp:getProperty property="listlesson" name="summ" /> <% ArrayList<Lesson> listl = summ.getListlesson(); for (Lesson l : listl) { out.print("<h2>" + l.getTitle() + "</h2>"); out.print("<p>" + l.getAbstract() + "</p>"); ArrayList<Exercise> liste = l.getListexercise(); out.print("<form action=\"exercise\" method=\"get\">"); for (Exercise e : liste) { int i = e.getExercise_number(); out.print("<input type=\"submit\" value=\"" + i + "\"</input>"); } out.print(" </form>"); } %> </body> </html>
Tomcat retourne à l’exécution :
Quelques petites précision:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 Etat HTTP 500 type Rapport d''exception message description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête. exception org.apache.jasper.JasperException: An exception occurred processing JSP page /sumaryview.jsp at line 22 19: 20: <% 21: ArrayList<Lesson> listl = summ.getListlesson(); 22: for (Lesson l : listl) { 23: out.print("<h2>" + l.getTitle() + "</h2>"); 24: out.print("<p>" + l.getAbstract() + "</p>"); 25: ArrayList<Exercise> liste = l.getListexercise(); Stacktrace: org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:471) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) controlsumary.service(controlsumary.java:87) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) cause mère java.lang.NullPointerException org.apache.jsp.sumaryview_jsp._jspService(sumaryview_jsp.java:96) org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:433) org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389) org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333) javax.servlet.http.HttpServlet.service(HttpServlet.java:722) controlsumary.service(controlsumary.java:87) javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
C'est une plateforme d'exercice donc il y a des exercices, des leçons, des questions. Chaque leçon possède 0..n exercices, chaque exercice possède 1..N question. Tout ces éléments existe en tant que classe Java (Bean). De plus j'ai rajouté un javabean Sumary, pour faire office de sommaire et qui contient une List de leçon, les leçon contenant elle même une List d'exercice et ainsi de suite.
J'ai ajouté des attribut de type List au beans parce que je ne voyais pas d'autre façon de représenter une liaison de cardinalité de type O..N 0..1.
Comment faire pour corriger l'erreur?
Je vous remercie d'avance pour vos réponses.
(edit: mise à jour du code)
Partager