Bonjour,
Je voudrais créer une application web où on peut ajouter et supprimer des produits dans un panier.
Cependant quand j'essaye de lancer la requête post pour ajouter un produit, j'obtiens cette erreur :
Voici ma servlet qui me permet d'enregistrer les produits :
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 message Erreur à l'instantiation de la classe servlet [panier.AjouterPanier] description Le serveur a rencontré une erreur interne qui l'a empêché de satisfaire la requête. exception jakarta.servlet.ServletException: Erreur à l'instantiation de la classe servlet [panier.AjouterPanier] org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:356) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:866) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1716) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:831) cause mère java.lang.NoClassDefFoundError: javax/servlet/http/HttpServlet java.base/java.lang.ClassLoader.defineClass1(Native Method) java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1010) java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150) org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2522) org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:872) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1408) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1252) org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:690) org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:356) org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:399) org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:866) org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1716) org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191) org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) java.base/java.lang.Thread.run(Thread.java:831)
Code Java : 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 package panier; import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; /** * Servlet implementation class AjouterPanier */ @WebServlet("/ajouterProduit") public class AjouterPanier extends HttpServlet { private static final long serialVersionUID = 1L; /** * Default constructor. */ public AjouterPanier() { super(); } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { RequestDispatcher dispatcher = request.getRequestDispatcher("panier.jsp"); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nom = request.getParameter("nom"); double prix = Double.parseDouble(request.getParameter("prix")); String ref = request.getParameter("ref"); Produit p = new Produit(); p.setNom(nom); p.setPrix(prix); p.setRef(ref); List<Produit> produits = new ArrayList<Produit>(); produits.add(p); HttpSession session = request.getSession(); session.setAttribute("produits", produits); RequestDispatcher dispatcher = request.getRequestDispatcher("panier.jsp"); dispatcher.forward(request, response); System.out.println(Arrays.toString(produits.toArray())); } }
Voici la page JSP qui permet de rentrer les données et réaliser la requête :
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 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> <meta charset="ISO-8859-1"> <title>Ajouter un produit</title> </head> <body> </head> <body> <div> <h2>Ajouter un produit</h2> <form action="<%=request.getContextPath() %>/AjouterPanier" method="post"> <label for="ref">Nom du produit :</label><br> <input type="text" name="nom" required><br> <label for="ref">Prix du produit :</label><br> <input type="number" name="prix" required><br> <label for="ref">Référence :</label><br> <input type="text" name="ref" required><br><br> <input type="submit" value="Ajouter le produit"> </form> </div> </body> </html>
Toutes les informations devront être ensuite affiché sur autre page JSP (c'est a dire le panier)
Voici son code :
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 <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width,initial-scale=1"> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/all.min.css" /> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css"> <meta charset="ISO-8859-1"> <title>Panier</title> </head> <style> </style> <body> </head> <body> <h3>PANIER</h3> <div> <form method="GET" action="ajouterProduit.jsp"> <input type="submit" value="Ajouter un produit" /> </form> <br> <div class="produit"> <c:forEach items="${produits}" var="produits"> <tr> <td><c:out value="${produits.nom}" /></td> <td><c:out value="${produits.prix}" /></td> <td><c:out value="${produits.ref}" /></td> </tr> </c:forEach> </div> </div> </body> </html>
Au départ je pensais que mon erreur venait d'un problème au niveau du package mais quand je check mon web.xml :
Code XML : 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 <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:web="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd http://java.sun.com/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee" id="WebApp_ID" version="2.4"> <display-name>Panier</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>AjouterPanier</servlet-name> <servlet-class>panier.AjouterPanier</servlet-class> </servlet> <servlet-mapping> <servlet-name>AjouterPanier</servlet-name> <url-pattern>/AjouterPanier</url-pattern> </servlet-mapping> </web-app>
Je ne trouve rien de bizarre.
Pourriez-vous s'il vous plaît m'indiquer si possible ce qu'est le problème afin que je puisse faire fonctionner la requête.
Je vous remercie d'avance.
Partager