Vous êtes sur la page 1sur 9

JSP, SERVLET, JDBC, MVC M.

Youssfi

Gestion des factures dun client


Un oprateur Tlcom propose ses clients des abonnements qui sont de deux types
Abonnement GSM et Abonnement Fixe. Chaque abonnement reoit mensuellement de
factures rgler.
Lapplication doit tre dveloppe en respectant la sparation des couches donnes,
mtier et de prsentation.
La couche de donnes est reprsente par une base de donnes relationnelle.
La couche mtier sera dveloppe en utilisant :
o Des java-beans persistants qui sont des classes persistantes.
o Une faade reprsente par la classe Operateur.java qui contient les
diffrentes mthodes mtiers qui assurent la persistante et le mapping
objet relationnel.
La couche prsentation est une application web base sur les servlets et JSP en
respectant larchitecture MVC.

Dans un premier temps, nous allons nous intresser uniquement la consultation des
clients. Le travail que nous allons raliser consiste afficher les clients en saisissant un mot
cl qui reprsente une partie du nom du client

La vue quon souhaite raliser est la suivante :

Premire partie :

1- Crer la base de donnes et saisir quelques exemples de clients.


2- Crer le modle (Couche mtier) savoir :
a. Client.java : classe persistante reprsente par un java bean.
b. Utilitaire.java : classe qui retourne un singleton Connection, en utilisant la
mthode statique getConnection() ;
c. Operateur.java : Classe non persistante qui contient une mthode qui permet
de retourner un vecteur de client sachant un mot cl.
d. Tester votre modle en utilisant une simple application.
3- Crer la couche prsentation en utilisant une seule page JSP : Clients1.jsp.
4- Crer une deuxime version de la couche prsentation en respectant le modle MVC.

1
JSP, SERVLET, JDBC, MVC M.Youssfi

Solution de la premire partie

1- Base de donnes :

2- Modle

a- Client.java
package mod.fact;
public class Client {
private int idClient;
private String nom;
private String email;
private String tel;
private String ville;

public String getEmail() { return email; }

public void setEmail(String email) { this.email = email; }

public int getIdClient() { return idClient; }

public void setIdClient(int idClient) {


this.idClient = idClient;
}
public String getNom() { return nom; }

public void setNom(String nom) { this.nom = nom; }

public String getTel() { return tel;}

public void setTel(String tel) { this.tel = tel; }

public String getVille() { return ville; }

public void setVille(String ville) { this.ville = ville; }


}

2
JSP, SERVLET, JDBC, MVC M.Youssfi

b- Utilitaire.java
package mod.fact;
import java.sql.*;
public class Utilitaire {
private static Connection conn;
static{
try {
// Pour JDBC ODBC
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
conn=DriverManager.getConnection("jdbc:odbc:dsnFact","","");
// pour Mysql Driver :
//Class.forName("com.mysql.jdbc.Driver");
//conn=DriverManager.getConnection
// ("jdbc:mysql://localhost:3306/NOM_BASE", "root", "" );
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static Connection getConnection(){ return conn; }
}
c- Operateur.java
package mod.fact;
import java.sql.*;
import java.util.*;
public class Operateur {
public Vector chercheClientsParMotCles(String motCle){
Vector lesClients=new Vector();
Connection conn=Utilitaire.getConnection();
try {
PreparedStatement ps=conn.prepareStatement("select * from
CLIENTS where NOM LIKE ?");
ps.setString(1,"%"+motCle+"%");
ResultSet rs=ps.executeQuery();
while(rs.next()){
Client c=new Client();
c.setIdClient(rs.getInt("ID_CLIENT"));
c.setNom(rs.getString("NOM"));
c.setEmail(rs.getString("EMAIL"));
c.setTel(rs.getString("TEL"));
c.setVille(rs.getString("VILLE"));
lesClients.add(c);
}
rs.close();
ps.close();

} catch (SQLException e) {
e.printStackTrace();
}
return lesClients;
}
}

3
JSP, SERVLET, JDBC, MVC M.Youssfi

3- Couche prsentation

Clients1.jsp

<%@ page language="java" %>


<%@ page import="java.util.*" %>
<%@ page import="mod.fact.*" %>

<%
String mot=request.getParameter("motCle");
if(mot==null) mot="";
Operateur op=new Operateur();
Iterator itCli=op.chercheClientsParMotCles(mot).iterator();
%>
<html>
<head>
<title>Clients</title>
</head>
<body bgcolor="#FFFFFF">
<center>
<form method="post" action="Clients1.jsp">
Client:<input type="text" name="motCle" value="<%=mot%>">
<input name="chercher" type="submit" id="chercher"
value="Chercher">
</form>

<table width="80%" border="1">


<tr>
<th scope="col">ID Client </th>
<th scope="col">NOM</th>
<th scope="col">EMAIL</th>
<th scope="col">TEL</th>
<th scope="col">VILLE</th>
</tr>
<%
while(itCli.hasNext()){
Client cli=(Client)itCli.next();
%>
<tr>
<td><%=cli.getIdClient()%></td>
<td><%=cli.getNom()%></td>
<td><%=cli.getEmail()%></td>
<td><%=cli.getTel()%></td>
<td><%=cli.getVille()%></td>
</tr>
<%} %>
</table>
</center>
</body>
</html>

4
JSP, SERVLET, JDBC, MVC M.Youssfi

4- Respecter le modle MVC


La page JSP que lon vient de faire fonctionne parfaitement, mais on peut constater quelle
soccupe de beaucoup de choses :
1- Rcuprer les donnes de la requte
2- Valider si les donnes on t bien saisies
3- Faire appel au modle pour rcuprer le rsultat.
4- Afficher les rsultats.
Il ne faut pas oublier que les pages JSP on t crer simplifier la tache du web
designer ; ce qui fait que, dans la pratique, les pages JSP se limitent laffichages
uniquement. Cela veut dire que les points 1, 2 et 3 doivent tre dlgus un autre
composant. Ce dernier nest autre quune servlet quon appelle le contrleur.
Si lon dveloppe de cette manire, nous respectons ce que lon appelle le modle MVC :
Modle : reprsente la couche mtier et soccupe des traitements. Dans cette partie, on
peut utiliser soit les java-beans, ce qui reprsente notre cas, ou les EJB qui sont des
composants distribus qui doivent sexcuter au sein dun serveur dapplication J2EE
Contrleur : reprsent par une servlet dont le rle est de :
o Rcuprer les donnes de ces requtes,
o Stocker ces donnes dans un objet intermdiaire associ la requte et appel
form bean (bean de formulaire)
o Sassurer de la validation de ces donnes.
o Faire appel au modle, qui se charge du traitement, en lui transmettant les
donnes de la requte.
o Rcuprer les rsultats ventuels retourns par le modle.
o Stocker ces rsultats dans le form bean
o Faire une redirection vers une page JSP qui va se charger de laffichage de la
des rsultats relatif la rponse http.
Vues : sont implmentes par les pages JSP. Une page JSP se charge de :
o Rcuprer les donnes des rsultats stocks, pralablement par le contrleur,
dans le form bean.
o Afficher dynamiquement la page HTML en se basant sur les rsultats
rcuprs.
Une reprsentation graphique du modle MVC peut tre la suivante :

Serveur
Client
Navigateur : Rep
Vue JDBC SGBD
JSP
Aperu de la 6 3
vue
Form Modle
5 Bean
Req1 Java beans
4 ou EJB
Contrleur
Une servlet 2

5
JSP, SERVLET, JDBC, MVC M.Youssfi

Reviennent notre problme notre page JSP sera divise en trois parties :

Le form bean : ClientForm.java


Le contrleur : ControleurServlet.java
La vue : Client2.jsp

a- Form Bean : ClientForm.java

Daprs la requte,
Les donnes envoyes par le client se limitent la valeur de motCles
Les rsultats afficher est un vecteur de clients.
Le code java du form bean est le suivant :

package form.beans;

import java.util.Vector;

public class ClientForm {


private String motCle="";
private Vector lesClients=new Vector();

public Vector getLesClients() {


return lesClients;
}
public void setLesClients(Vector lesClients) {
this.lesClients = lesClients;
}
public String getMotCle() {
return motCle;
}
public void setMotCle(String motCle) {
this.motCle = motCle;
}
}

b- Contrleur : ControleurServlet.java

import java.io.IOException;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import form.beans.ClientForm;
import mod.fact.Operateur;
public class ControleurServlet extends HttpServlet {
public void dopost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

6
JSP, SERVLET, JDBC, MVC M.Youssfi

// Crer le form bean pour stocker les donnes de la


requte
// et galement les rsultats afficher.
ClientForm cf=new ClientForm();
// rcuprer les donnes de la requte
String mot=request.getParameter("motCle");
if(mot==null) mot="";
// stocker les donnes de la reqte dans le form bean
cf.setMotCle(mot);
//Rcuprer le rsultatde la couche mtier
// en lui transmettant le mot cl
Operateur op=new Operateur();
Vector
clients=op.chercheClientsParMotCles(cf.getMotCle());
// Stocker le rsultat dans le form bean
cf.setLesClients(clients);
// stocker le form bean dans la session courante
HttpSession session=request.getSession();
session.setAttribute("cf",cf);
// rediriger vers la vue pour afficher
response.sendRedirect("Clients2.jsp");
}
}

Descripteur de dploiement : web.xml

<?xml version="1.0" encoding="UTF-8"?>


<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web
Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>cs</servlet-name>
<servlet-class>ControleurServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>cs</servlet-name>
<url-pattern>/clients</url-pattern>
</servlet-mapping>

</web-app>
d- La vue : Clients2.jsp

<%@ page language="java" %>


<%@ page import="java.util.*" %>
<%@ page import="mod.fact.*" %>
<%@ page import="form.beans.*" %>
<%
ClientForm cf=(ClientForm)session.getAttribute("cf");
if(cf==null) cf=new ClientForm();
Iterator itCli=cf.getLesClients().iterator();
%>
<html>
<head>
<title>Clients</title>
</head>

7
JSP, SERVLET, JDBC, MVC M.Youssfi

<body bgcolor="#FFFFFF">
<center>
<form method="post" action="clients">
Client:<input type="text" name="motCle"
value="<%=cf.getMotCle()%>">
<input name="chercher" type="submit" id="chercher"
value="Chercher">
</form>

<table width="80%" border="1">


<tr>
<td>ID Client </td>
<td>NOM</td>
<td>EMAIL</td>
<td>TEL</td>
<td>VILLE</td>
</tr>
<%
while(itCli.hasNext()){
Client cli=(Client)itCli.next();
%>
<tr>
<td><%=cli.getIdClient()%></td>
<td><%=cli.getNom()%></td>
<td><%=cli.getEmail()%></td>
<td><%=cli.getTel()%></td>
<td><%=cli.getVille()%></td>
</tr>
<%} %>
</table>
</center>
</body>
</html>

8
JSP, SERVLET, JDBC, MVC M.Youssfi

Deuxime Partie

Un abonnement est dfini par :


- Le numro dabonnement
- Le nom de labonnement
- Date dabonnement
- Le solde de labonnement qui reprsente le montant qui reste consommer de cet
abonnement.
- Le propritaire de cet abonnement reprsent par un attribut de type Client.
Un abonnement GSM est un abonnement qui contient en plus
- Le nombre de points fidlo qui reprsente des points obtenus en fonction du
montant consomm.
Un abonnement FIXE est abonnement qui est caractris par
Un dbit

Une facture est caractrise par :


Le numro de facture
Date facture
Montant de facture
Une proprit qui indique si la facture est rgle ou non

Travail demand :

1. Etablir un diagramme de classe complet


2. Crer la base de donnes correspondante ce diagramme de classes
3. Complter la couche mtier :
a. Crer les classes Facture, Abonnement, AbFixe et AbGSM
b. Ajouter la classe Operateur les mthodes suivantes :
i. Une mthode qui permet retourner un objet de type Abonnement
sachant son numro, en chargeant dans cet objet Abonnement son
propritaire ainsi que toutes les factures.
ii. Une mthode qui permet dajouter un nouveau client.
iii. Une mthode qui permet de rgler une facture sachant son numro.
c. Tester nouveau le modle
4. Crer une application web en utilisant STRUTS qui permet lutilisateur de :
a. Saisir le numro dabonnement dans un formulaire
b. En validant, afficher, dans la mme page,
i. Les caractristiques de cet abonnement
ii. Le nom du propritaire de cet abonnement
iii. La liste des factures de cet abonnement, en affichant une case cocher
qui devrait permettre de rgler une facture.

Vous aimerez peut-être aussi