Vous êtes sur la page 1sur 6

Saloua Ben Yahia

TP5 MVC I – Scope Session – Développement en Couches

Authentification, Ajout et Affichage des utilisateurs à partir d’une


base de données DERBY

Ce TP est utilisable avec tout autre base moyennant des modifications mineures sur le code (driver, URL
de la base). L’objectif est de créer une Application WEB MVC interagissant avec Base de Données ou un
utilisateur s’authentifie et par la suite peut ajouter ou lister les utilisateurs.
Le développement utilisera le pattern MVC I, on se basera sur la gestion des sessions et le développement
se fera en 3 couches.

1. Structure de la base de données


Une seule table utilisateurs :
Attention avec la base Derby l’option auto_increment n’existe pas en mode «wizard » graphique. Il faut
utiliser nécessairement le script de création de la table donné ci-dessous. Le même script est valable en
base Mysql.

Etape 1 : Sous Netbeans onglet services créer la Base BaseUsers (login : root, password : root). Respecter
ces valeurs pour être conforme au code ou bien changer les instructions nécessaires.
Etape 2 : Créer la table Utilisateurs. Cliquer sur le lien vers la Base, clic droit sur la souris et choisir
exécuter la commander, copier la commande ci-dessous et exécuter :

Etape 2 : CREATE TABLE "Utilisateurs"


(
"ID_USER" INT not null primary key
GENERATED ALWAYS AS IDENTITY
(START WITH 1, INCREMENT BY 1),
"NAME" VARCHAR(25),
"EMAIL" VARCHAR(25),
"VILLE" VARCHAR(25),
"LOGIN" VARCHAR(25),
"PASS" VARCHAR(25)
);

2. Structure du Projet
Créer un nouveau projet Web. Le code sera organisé en 3 couches :
- La couche Web MVC : Les Servlets/JSP : ServletLogin, ServletListe et ServletAjouter
- La couche Métier : GestionUser et Utilisateur dans le package com.appa.metier
- La couche DAO : dans le package com.app.dao, la classe Utilitaire qui se charge de la connexion
avec la BD et la classe GestionUserDAO qui envoie les requêtes SQL à la Table

1/6
Saloua Ben Yahia

Exemples de classes

▪ Classe Utilitaire (couche DAO)


Tester cette classe et vérifier qu’elle n’affiche aucune exception. Cette classe permet de se connecter à
votre base Users.

package com.app.dao;
import java.sql.*;
public class Utilitaire {
private static Connection conn;
static{
try{
Class.forName("org.apache.derby.jdbc.ClientDriver");
conn =
DriverManager.getConnection("jdbc:derby://localhost:1527/BaseUsers","root"
,"root");
}
catch(Exception e){
e.printStackTrace();
}

}
public static Connection getConnection(){
return conn;
}
public static void main(String [] args)
{
Connection c = Utilitaire.getConnection();
}}

▪ Classe GestUsersDAO.java (couche DAO)

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.

2/6
Saloua Ben Yahia

package com.app;
import java.sql.*;
import java.util.Vector;
public class GestUsersDAO {

public Utilisateur loadUser(String login, String pass){


Connection conn=Utilitaire.getConnection();
Utilisateur u=null;
try {
PreparedStatement ps=conn.prepareStatement("select * from
ROOT.\"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
ROOT.\"Utilisateurs\"(LOGIN,PASS,EMAIL,VILLE) values(?,?,?,?)");
ps.setString(1,l);
ps.setString(2,p);
ps.setString(3,e);
ps.setString(4,v);
ps.executeUpdate();

} catch (SQLException e2) {


e2.printStackTrace();
}
}
public Vector selectAll(){
Connection conn=Utilitaire.getConnection();
Vector users=new Vector();
Utilisateur u=null;
try {
PreparedStatement ps=conn.prepareStatement("select * from
ROOT.\"Utilisateurs\"");
ResultSet rsUser=ps.executeQuery();
while(rsUser.next()){
u=new Utilisateur();
u.setIdUser(new Integer(rsUser.getInt("ID_USER")));
u.setLogin(rsUser.getString("LOGIN"));

3/6
Saloua Ben Yahia
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;}}

▪ Classe Utilisateur.java (Couche Métier)

package mod.app.metier;
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;
}
public void setPass(String pass) {
this.pass = pass;
}
public String getVille() {
return ville;
}
public void setVille(String ville) {
this.ville = ville;
}}

▪ Classe GestUsers.java (Métier)


package com.app.metier;

import com.app.dao.GestionUsersDAO;

4/6
Saloua Ben Yahia
import java.util.Vector;

/**
*
* @author USER
*/
public class GestionUtilisateur {
GestionUsersDAO dao;
public GestionUtilisateur()
{
dao=new GestionUsersDAO();
}
public Utilisateur Chercher(String login, String pass){

return dao.loadUser(login, pass);


}
public void ajouter(Utilisateur u){
dao.addUser(u.getLogin(), u.getPass(),u.getEmail(),u.getVille());
}
public Vector lister(){

return dao.selectAll();
}
}

3- Codage du Service Authentification

Vue : Login.jsp
<P> Please fill out this form with your name.
Thanks!
<FORM METHOD="GET" action="ServletLogin">
<P> Please enter your login and password:
<P> login: <INPUT NAME="login" TYPE=" TEXT" SIZE=" 12" MAXLENGTH=" 20">
<P> password: <INPUT NAME="password" TYPE=" TEXT" SIZE=" 12" MAXLENGTH=" 20">
<P> Thank you! <INPUT TYPE="SUBMIT">
</FORM>

Contrôleur associée : ServletLogin.java

Ecrire le code ServletLogin qui doit :


- Récupérer les paramètres et vérifier qu’ils ne sont ni à nul ni chaine vide
- Instancier la couche métier GestionUtilisateur
- Appeler la méthode authentifier de la couche métier
a. Si la méthode authentifier retourne un User différent de nul alors créer une nouvelle session
vide avec la syntaxe
HttpSession maSession = request.getSession(true)
- Sauvegarder votre utilisateur dans la session maSession avec la syntaxe
maSession.setAttribute(«user », user)
- forwarder vers la JSP : Bienvenue.jsp

b. Si la méthode authentifier retourne un nul retourner vers la JSP formulaire d’authentification et


réfléchir sur un moyen de préciser le message d’erreur au niveau de la JSP

5/6
Saloua Ben Yahia

Vue Bienvenue.jsp

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

Tester votre application

4- Codage des Services Ajout et affichage des utilisateurs :

A vous de jouer : Coder maintenant le service d’Ajout et d’Affichage de la liste des Utilisateurs. Chacun
de ces services ne fonctionnera que si l’Utilisateur s’est uathentifié correctement. Pour faire cette
vérification suivre les étapes suivantes dans la ServletAjout et la ServletAffichage
1. Récupérer la session existante : HttpSession maSession=request.getSession(false)
2. Si la session est à null rediriger vers la JSP de login
3. Si la session est différente de null alors récuperer le Bean Utilisatauer dans le scope session:
maSession.getAttribute(«user ») ; Ne pas oublier de faire le cast car cette méthode retourne un
Object
4. Si ce Bean est aussi différent de null (double vérification) alors procéder à l’Ajout ou au Listing
de la liste des Users
5. Trouver une solution pour remonter les Exceptions de type SQL et permettre un affichage d’un
message (une page html d’erreur ) vers l’internaute : Un problème est survenu veuillez essayer
ultérieurement

6/6

Vous aimerez peut-être aussi