TP Struts

M.Youssfi

TP STRUTS
Authentification, Ajout et Affichage des utilisateurs à partir d’une base de données MySQL
A- Structure de la base de données (voir Tp

précédent)
Une seule table utilisateurs :

B- Projet :
2- Créer un nouveau projet Tomcat nommé ProjSt1 3- Copie des fichiers Struts. (récupérer le dossier struts-1.2.7-lib) o Dans le répertoire lib de votre projet, copier tous les fichiers.jar du dossier struts-1.2.7-lib. Ces fichiers constituent l’api struts.

o Copier également le connecteur MySQL o Dans le répertoire WEB-INF, copier tous les fichier.tld du dossier struts-1.2.7lib. Ces fichiers contiennent des librairies de tag que nous utiliserons dans les pages JSP.

1/12

TP Struts

M.Youssfi

o Copier également les deux fichiers web.xml et struts-config.xml dans le repertoire WEB-INF o Déclarer les fichiers .jar dans le classpath du projet :  Sélectionner votre projet  Project>properties  Sélectionner la catégorie java build path  Cliquer sur le bouton Add JARs…  Parcourez votre projet pour atteindre votre répertoire lib et puis sélectionnez tous les fichiers du dossier lib et ajoutez les au classpath en validant le bouton OK.

C- Modèle.

2/12

TP Struts

M.Youssfi

Classe Utilitaire

package mod.app; import java.sql.*; public class Utilitaire { private static Connection conn; static{ try{ Class.forName("com.mysql.jdbc.Driver"); conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/Bas eUsers","root",""); } catch(Exception e){ e.printStackTrace(); } } public static Connection getConnection(){ return conn; } }

Classe Utilisateur.java

package mod.app; public class Utilisateur { private Integer idUser; private String login; private String pass; private String email; private String ville; public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public Integer getIdUser() { return idUser; } public void setIdUser(Integer idUser) { this.idUser = idUser; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPass() { return pass;

3/12

TP Struts
} public void setPass(String pass) { this.pass = pass; } public String getVille() { return ville; } public void setVille(String ville) { this.ville = ville; } }

M.Youssfi

Classe GestUsers.java

Cette classe contient les méthodes métier qui permettent : - d’ajouter un nouvel utilisateur - de retourner un utilisateur sachant son login et son mot de passe - de retourner toutes les utilisateurs dans un vecteur.
package mod.app; import java.sql.*; import java.util.Vector; public class GestUsers { public Utilisateur loadUser(String login, String pass){ Connection conn=Utilitaire.getConnection(); Utilisateur u=null; try { PreparedStatement ps=conn.prepareStatement("select * from utilisateurs where login=? and pass=?"); ps.setString(1,login); ps.setString(2,pass); ResultSet rsUser=ps.executeQuery(); if(rsUser.next()){ u=new Utilisateur(); u.setIdUser(new Integer(rsUser.getInt("ID_USER"))); u.setLogin(rsUser.getString("LOGIN")); u.setPass(rsUser.getString("PASS")); u.setEmail(rsUser.getString("EMAIL")); u.setVille(rsUser.getString("VILLE")); } } catch (SQLException e) { e.printStackTrace(); } return u; } public void addUser(String l,String p, String e,String v){ Connection conn=Utilitaire.getConnection(); Utilisateur u=null; try { PreparedStatement ps=conn.prepareStatement("insert into utilisateurs(LOGIN,PASS,EMAIL,VILLE) values(?,?,?,?)"); ps.setString(1,l); ps.setString(2,p); ps.setString(3,e);

4/12

TP Struts
ps.setString(4,v); ps.executeUpdate(); } catch (SQLException e2) { e2.printStackTrace(); }

M.Youssfi

} public Vector selectAll(){ Connection conn=Utilitaire.getConnection(); Vector users=new Vector(); Utilisateur u=null; try { PreparedStatement ps=conn.prepareStatement("select * from utilisateurs"); ResultSet rsUser=ps.executeQuery(); while(rsUser.next()){ u=new Utilisateur(); u.setIdUser(new Integer(rsUser.getInt("ID_USER"))); u.setLogin(rsUser.getString("LOGIN")); u.setPass(rsUser.getString("PASS")); u.setEmail(rsUser.getString("EMAIL")); u.setVille(rsUser.getString("VILLE")); users.add(u); } } catch (SQLException e) { e.printStackTrace(); } } } return users;

D- Authentification

Nous allons reprendre la même application du premier TP, auquel, on va ajouter la validation. Une modification sera également affectée au modèle, juste pour changer la manière de travailler. 1- Première Vue : Login.jsp

5/12

TP Struts Code JSP :
<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <html> <body> <html:form action="login.do" method="post" > Login:<html:text property="login" /><br/> Pass :<html:password property="pass" /><br/> <html:submit value="Valider" /> </html:form> <html:errors /> </body> </html>

M.Youssfi

2- Le Form Bean associé : LoginForm.java

Code java :
import javax.servlet.http.HttpServletRequest; import mod.app.Utilisateur; import org.apache.struts.action.*; public class LoginForm extends ActionForm { private String login="root"; private String pass="pass"; private Utilisateur user=null; public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass;

6/12

TP Struts

M.Youssfi

} public Utilisateur getUser() { return user; } public void setUser(Utilisateur user) { this.user = user; } public ActionErrors validate(ActionMapping map,HttpServletRequest request){ ActionErrors errors=new ActionErrors(); if((this.getLogin().equals(""))||this.getLogin()==null){ errors.add("login",new ActionError("login.vide")); } if ((this.getPass().equals(""))||this.getPass()==null){ errors.add("pass",new ActionError("pass.invalide")); } return errors; } }

3- Action associée : LoginAction.java

Code java :
import javax.servlet.http.*; import mod.app.GestUsers; import mod.app.Utilisateur; import org.apache.struts.action.*; public class LoginAction extends Action { public ActionForward execute( ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception{ LoginForm lf=(LoginForm)form; GestUsers gu=new GestUsers(); Utilisateur u=gu.loadUser(lf.getLogin(),lf.getPass()); if(u!=null){ lf.setUser(u); return map.findForward("bienvenue"); } else{ return map.findForward("notAutorised"); } } }

7/12

TP Struts

M.Youssfi

4- Vue Bienvenue.jsp
Si l’utilisateur existe, la vue suivante devrait être affichée. Elle permet d’afficher l’état de l’utilisateur actuel.

Code JSP :
<%@ page language="java" %> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" %> <html> <head> <title>Bien Venue</title> </head> <body bgcolor="#FFFFFF"> <h3> Id User :<bean:write name="logFor" property="user.idUser" /><br/> Login :<bean:write name="logFor" property="user.login" /><br/> Pass :<bean:write name="logFor" property="user.pass" /><br/> Email:<bean:write name="logFor" property="user.email" /><br/> Ville :<bean:write name="logFor" property="user.ville" /><br/> </h3> </body> </html>

5- web.xml (pas de changement par rapport au fichier standard) 6- struts-config.xml
<?xml version="1.0" encoding="iso-8859-1"?> <!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd"> <struts-config> <form-beans> <form-bean name="logFor" type="LoginForm"/> </form-beans> <global-forwards> <forward name="bienvenue" path="/BienVenue.jsp"/> <forward name="notAutorised" path="/Login.jsp"/> </global-forwards> <action-mappings> <action path="/login"

8/12

TP Struts
name="logFor" type="LoginAction" scope="request" input="/Login.jsp" validate="true" /> </action-mappings> <message-resources parameter="ApplicationResources"/> </struts-config>

M.Youssfi

7 - Création du ficher de ressources. Dans le dossier classes, créer un fichier texte nommé ApplicationResources.properties dont le contenu est le suivant :
login.vide=<li>Vous devez saisir un login</li> pass.invalide =<li>Vous devez saisir un mot de pass valide</li>

8- Démarrer Tomcat et tester votre application

E- Ajout et affichage des utilisateurs :
Vue Affiche.jsp

9/12

TP Struts

M.Youssfi

1- FormBean associé à cette vue : UsersForm.java

import org.apache.struts.action.*; import java.util.*; public class UsersForm extends ActionForm { private String login; private String pass; private String email; private String ville; private Vector users=new Vector(); public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPass() { return pass; } public void setPass(String pass) { this.pass = pass; } public Vector getUsers() { return users; } public void setUsers(Vector users) {

10/12

TP Struts
this.users = users; } public String getVille() { return ville; } public void setVille(String ville) { this.ville = ville; }

M.Youssfi

}

2- Action associée à la vue : UsersAction.java
import javax.servlet.http.*; import mod.app.GestUsers; import mod.app.Utilisateur; import org.apache.struts.action.*; public class UsersAction extends Action { public ActionForward execute( ActionMapping map, ActionForm form, HttpServletRequest request, HttpServletResponse response)throws Exception{ UsersForm uf=(UsersForm)form; GestUsers gu=new GestUsers(); gu.addUser(uf.getLogin(),uf.getPass(),uf.getEmail(),uf.getVille()); uf.setUsers(gu.selectAll()); return map.findForward("afficheUsers"); } }

3- La vue Affiche.jsp
<%@ page language="java" %> <%@ page import="mod.app.*" %> <%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html"%> <%@ taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> <%@ taglib uri="/WEB-INF/struts-logic.tld" prefix="logic"%> <!DOCTYPE HTML PUBLIC "-//w3c//dtd html 4.0 transitional//en"> <html> <head> <title>Utilisateurs</title> </head> <body bgcolor="#FFFFFF"> <table border="1" width="75%" align="center"> <tr> <td>Id</td><td>Login</td><td>Pass</td><td>Ville</td><td>Email</td > </tr> <html:form action="addUser.do" > <tr> <td></td> <td><html:text property="login" /></td> <td><html:text property="pass" /></td> <td><html:text property="email" /></td>

11/12

TP Struts
<td><html:text property="ville" /></td> <td><html:submit value="Ajouter" /></td> </tr> </html:form> <logic:iterate id="user" name="usersForm" property="users" type="Utilisateur" > <tr> <td><bean:write name="user" property="idUser" /></td> <td><bean:write name="user" property="login" /></td> <td><bean:write name="user" property="pass" /></td> <td><bean:write name="user" property="email" /></td> <td><bean:write name="user" property="ville" /></td> </tr> </logic:iterate> </body> </html>

M.Youssfi

4- Mise à jour du fichier struts-config.xml Ajouter les lignes en gras au fichier précédent :
<struts-config> <form-beans> <form-bean name="logFor" type="LoginForm"/>

<form-bean name="usersForm" type="UsersForm"/>

</form-beans> <global-forwards> <forward name="bienvenue" path="/BienVenue.jsp"/> <forward name="notAutorised" path="/Login.jsp"/> </global-forwards> <action-mappings> <action path="/login" name="logFor" type="LoginAction" scope="request" input="/Login.jsp" validate="true" />

<forward name="afficheUsers" path="/Affiche.jsp"/>

</action-mappings> <message-resources parameter="ApplicationResources"/> </struts-config>

<action path="/addUser" name="usersForm" type="UsersAction" scope="request" />

5- Tester l’application : La vue affiche.jsp doit être appelée avec l’url addUser.do, car elle utilise les données du bean de formulaire UsersForm nommé usersForm.

12/12