Bonjour à tous,

Je découvre la programmation en java à l aide des jsp. Abordant le chapitre Struts, je rencontre un problème pour leurs utilisations.

Quand je cherche à acceder à ma jsp principal l'erreur suivante s'affiche.

org.apache.jasper.JasperException: Cannot retrieve mapping for action: "/enregistrement"
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:510)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:375)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
Je cherche depuis bientôt 2 jours mais je n ai pas trouvé de solutions pour résoudre mon problème.

Voici les différents fichiers de mon application:
struts-config.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
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!DOCTYPE struts-config PUBLIC
          "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
          "http://struts.apache.org/dtds/struts-config_1_3.dtd">
 
<struts-config>
	<form-beans>
		<form-bean name="EnregistrementForm" type="monapp.EnregistrementForm"/>
	</form-beans>
	<action-mappings>
		<action path="/monstruts" type="monapp.EnregistrementAction" name="EnregistrementForm" input="/enregistrement.jsp">
			<forward name="ok" path="/ok.html"/>
			<forward name="echec" path="/echec.html"/>
		</action>
	</action-mappings>
</struts-config>
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?xml version="1.0" encoding="ISO-8859-1"?>
 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
	xmlns: xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
	version="2.4">
    <display-name>JavaBeans</display-name>
    <description>
     Dcouverte des JavaBeans
    </description>
 
    <!-- Action Servlet Configuration -->
    <servlet>
    	<servlet-name>action</servlet-name>
    	<servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    	<init-param>
    		<param-name>config</param-name>
    		<param-value>/WEB-INF/struts-config.xml</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup>
    </servlet>
 
    <!-- Action Servlet Mapping -->
    <servlet-mapping>
    	<servlet-name>action</servlet-name>
    	<url-pattern>*.do</url-pattern>
    </servlet-mapping>
 
    <!-- Struts Tag Library Descriptors -->
    <taglib>
    	<taglib-uri>/WEB-INF/tld/struts-bean.tld</taglib-uri>
    	<taglib-location>/WEB-INF/tld/struts-bean.tld</taglib-location>
    </taglib>
    <taglib>
    	<taglib-uri>/WEB-INF/tld/struts-html.tld</taglib-uri>
    	<taglib-location>/WEB-INF/tld/struts-html.tld</taglib-location>
    </taglib>
    <taglib>
    	<taglib-uri>/WEB-INF/tld/struts-logic.tld</taglib-uri>
    	<taglib-location>/WEB-INF/tld/struts-logic.tld</taglib-location>
    </taglib>
</web-app>

Ces 2 fichiers se trouvent sous WEB-INF.

Ensuite j ai 2 classes java:

EnregistrementForm.java :

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
package monapp;
import org.apache.struts.action.*;
 
public class EnregistrementForm extends ActionForm {
 
	String Nom;
	String Pass;
	String PassConfirm;
 
	String getNom(){return Nom;}
	String getPass(){return Pass;}
	String getPassConfirm(){return PassConfirm;}
 
	public void setNom(String Nom){this.Nom = Nom;}
	public void setPass(String Pass){this.Pass = Pass;}
	public void setPassConfirm(String PassConfirm){this.PassConfirm = PassConfirm;}
 
}
et EnregistrementAction.java :
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
package monapp;
 
import org.apache.struts.action.*;
import javax.servlet.http.*;
import java.sql.*;
import java.io.*;
 
//EnregistrementAction hrite de Struts Action
public class EnregistrementAction extends Action{
 
	//La mthode perform vient de Struts 1.0, remplace par la mthode exectue
	//(gestion d'exception supplmentaire) de Struts 1.1
	public ActionForward perform(ActionMapping mapping, ActionForm form, HttpServletRequest req, HttpServletResponse res){
 
		//Casting de EnregistrementForm en tant qu'objet form
		EnregistrementForm rf = (EnregistrementForm) form;
		String nom = rf.getNom();
		String pass = rf.getPass();
		String passConfirm = rf.getPassConfirm();
 
		//Implmentation de la logique mtier (vrification que les 2 mots de passes sont identiques et insertion dans la base de donnes)
		if(pass.equals(passConfirm)){
			//Chargement du pilote JDBC
			try{Class.forName("org.gjt.mm.mysql.Driver");}
			catch(java.lang.ClassNotFoundException e){
				System.out.println("Pilote JDBC non trouv!");
			}
			try{
				//connexion  la base de donnes
				String url = "jdbc:mysql://localhost/madb?user=root&password=mysqlweb";
				Connection con;
				con = DriverManager.getConnection(url);
 
				//Prparation et excution de la requte sql
				PreparedStatement p = con.prepareStatement("insert into matable(nom, pass) values (?,?)");
				p.setString(1, nom);
				p.setString(2, pass);
				ResultSet r = p.executeQuery();
				p.close();
			}//fin du try connexion  la base
			// Renvoie l'exception en cas d'erreur base ou sql
			catch(SQLException ex){
				System.out.println("Erreur base de donnes");
				System.out.println("Message: "+ ex.getMessage());
				System.out.println("Mesasge: "+ ex.getSQLState());
				System.out.println("Message: "+ ex.getErrorCode());
			}
 
			//Appel de l'objet ActionMapping pour envoyer vers le fichier ok.html
			return mapping.findForward("ok");
		}
		else{
			//Appel ActionMapping pour envoyer vers le fichier echec.html si le mot de passe de confirmation n'est pas le mme
			return mapping.findForward("echec");
		}
	}
}
Ces 2 classes se trouvent sous le package monapp.

Et pour finir 1 fichier jsp pour la saisie de l'information et 2 pages html pour retourner le résultat de l'opération.

enregistrement.jsp :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
<%@ taglib uri="/WEB-INF/tld/struts-html.tld" prefix="html" %>
 
<html:form action="enregistrement">
Nom:<html:text property="nom"/><br>
Entrez le mot de passe:<html:password property="pass"/><br>
Entrez le mot de passe  nouveau:<html:password property="passConfirm"/><br>
<html:submit value="Enregistrement"/>
</html:form>
ok.html :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<html>
	<head>
		<title>Ok</title>
	</head>
	<body>
		Enregistrement r&eacute;ussi !
		<br><a href="enregistrement.jsp">Enregistrer un autre membre</a>
	</body>
</html>
et echec.html :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
<html>
	<head>
		<title>Echec</title>
	</head>
	<body>
		Echec de l'enregistrement
		<br><a href="enregistrement.jsp">Enregistrer un autre membre</a>
	</body>
</html>
J'utilise les librairies struts 1.3.8 donc je ne sais pas si tous mes DOCTYPE sont corrects enfin il me semble.

Merci aux bonnes âmes qui se pencheront sur mon problème.