JasperException+envoie d'information servlet vers jsp
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
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 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>");
}
} |
JSP
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
| <%@ 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 :
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
|
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) |
Quelques petites précision:
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)