Académique Documents
Professionnel Documents
Culture Documents
2 Supportpoojavadeuximepartie 140408132723 Phpapp01 PDF
2 Supportpoojavadeuximepartie 140408132723 Phpapp01 PDF
Deuxième Partie
Mohamed Youssfi
med@youssfi.net
d’une application
App Java
RMI, JMS Serveur d’application J2EE
CORBA,SOAP
•SWING
Couche DAO
JPA, Hibernate
Smart Phone
SOAP (HTTP+XML)
Couche métier
Application .Net SOAP (HTTP+XML)
ou CORBA
Couche Service Couche web
- Struts
MiddleWares : - Spring
Aplication PHP - RMI
SOAP (HTTP+XML) - CORBA - JSF
- EJB Session
- SOAP (Web Sevices)
SMTP, POP3, IMAP - JMS
Serveur Messagerie -Java Mail
-SMSLib
SMS
Client SMS HTTP
Client HTTP
-HTML, CSS, JavaScript
med@youssfi.net | ENSET Université -XML, AJAX, Jquery, Spry
Hassan II Mohammedia 5
-SVG ou Flash
Qu’est ce que java?
Langage de programmation orienté objet (Classe, Objet,
Héritage, Encapsulation et Polymorphisme)
Avec java on peut créer des application
multiplateformes. Les applications java sont portables.
C’est-à-dire, on peut créer une application java dans une
plateforme donnée et on peut l’exécuter sur n’importe
quelle autre plateforme.
Java est utilisé pour créer :
Des applications Desktop
Des applets java (applications java destinées à s’exécuter dans une page web)
Des applications pour les smart phones (JME, Androide)
Des applications embarquées dans des cartes à puces (Java Card Edition)
Des application JEE (Java Entreprise Edition) : Les applications qui vont
s’exécuter dans un serveur d’application JEE (Web Sphere Web Logic, Jboss,etc…).
Par M.youssfi
Deux solutions :
Soit utiliser le bloc try catch
try {
cp.retirer(mt2);
} catch (Exception e) {
System.out.println(e.getMessage());
}
Ou déclarer que cette exception est ignorée dans la méthode main et
dans ce cas là, elle remonte vers le niveau supérieur. Dans notre cas la
JVM.
public static void main(String[] args) throws Exception {
package metier;
public class Compte {
private int code;
private float solde;
public void verser(float mt){
solde=solde+mt;
}
public void retirer(float mt){
if(mt>solde) throw new RuntimeException("Solde Insuffisant");
solde=solde-mt;
}
public float getSolde(){
return solde;
}
}
med@youssfi.net | ENSET Université
Hassan II Mohammedia 21
Utilisation de la classe Compte
En faisant appel à la méthode retirer, le compilateur ne signale rien
C’est une Exception non surveillée. On est pas obligé de la traiter pour que
le programme soit compilé
package pres;
import java.util.Scanner;
import metier.Compte;
public class Application {
public static void main(String[] args) {
Compte cp=new Compte();
Scanner clavier=new Scanner(System.in);
System.out.print("Montant à verser:");
float mt1=clavier.nextFloat();
cp.verser(mt1);
System.out.println("Solde Actuel:"+cp.getSolde());
System.out.print("Montant à retirer:");
float mt2=clavier.nextFloat();
cp.retirer(mt2); // Le comilateur ne signale rien
}
}
med@youssfi.net | ENSET Université
Hassan II Mohammedia 22
Personnaliser les exception métier.
L’exception générée dans la méthode retirer, dans le cas ou le solde
est insuffisant est une exception métier.
Il plus professionnel de créer une nouvelle Exception nommée
SoldeInsuffisantException de la manière suivante :
package metier;
public class SoldeInsuffisantException extends Exception {
public SoldeInsuffisantException(String message) {
super(message);
}
}
M.Youssfi
Programme Ficher
Fichier Streams
d’entrée
Streams
Clavier de sortie Imprimante
Un autre Programme
Moniteur
Streams
De sortie
Streams
D’entrée med@youssfi.net | ENSET Université
Hassan II Mohammedia 33
Principe des entrées/sorties
Pour effectuer une entrée ou une sortie de données en Java,
le principe est simple et se résume aux opérations suivantes :
Ouverture d'un moyen de communication.
Écriture ou lecture des données.
Fermeture du moyen de communication.
Binaires Caractères B C
fw:FileWriter f2:File
Fichier2.txt
write(int c):void
fis:FileInputStream f1:File
image1.jpg
read():int
fos:FileOutputStream f2:File
image2.jpg
write(int c ):void
File f1=new File("c:/image1.jpg");
FileInputStream fis=new FileInputStream(f1);
File f2=new File("c:/image2.jpg");
FileOutputStream fos=new FileOutPutStream(f2);
int c;
while((c=fis.read())!=-1){
fos.write(c);
}
fis.close();fos.close();
med@youssfi.net | ENSET Université
Hassan II Mohammedia 43
Lire et Écrire sur un fichier texte ligne par ligne : Streams de traitement :
BufferedReader et BufferedWriter
public Operation() { }
public Operation(int numOp, Date dateOp, String numC,String to, double mt) {
this.numeroOperation = numOp;this.dateOperation = dateOp;
this.numeroCompte = numC;this.typeOperation = to;
this.montant = mt;
}
// Getters et Setters
} med@youssfi.net | ENSET Université
Hassan II Mohammedia 52
Sérialisation
oos:ObjectOutputStream fos:FileOutputStream f:File
banque.txt
writeObject(Object o):void write(int c)
import java.io.*;
import metier.Operation;
public class Deserialisation {
public static void main(String[] args) throws Exception {
File f=new File("banque.txt");
FileInputStream fis=new FileInputStream(f);
ObjectInputStream ois=new ObjectInputStream(fis);
Operation op1=(Operation) ois.readObject();
Operation op2=(Operation) ois.readObject();
System.out.println("Num:"+op1.getNumeroOperation());
System.out.println("Date:"+op1.getDateOperation());
System.out.println("Compte:"+op1.getNumeroCompte());
System.out.println("Type:"+op1.getTypeOperation());
System.out.println("Montant:"+op1.getMontant());
}
}
med@youssfi.net | ENSET Université
Hassan II Mohammedia 54
Exercice 3
Par M.youssfi
SWING
med@youssfi.net | ENSET Université
Hassan II Mohammedia 59
Une autre manière plus pratique : Hérier de la classe Frame
import java.awt.*;
public class MaFenetreAWT extends Frame{
// Créer une zone de texte
TextField t=new TextField(12);
// Créer un bouton OK
Button b=new Button("OK");
public MaFenetreAWT() {
// Définir une technique de placement
this.setLayout(new FlowLayout());
//ajouter la zone de texte t à la frame this
this.add(t);
// ajouter le bouton b à la frame this
this.add(b);
// Définir les dimensions de la frame
this.setBounds(10,10,500,500);
// Afficher la frame
this.setVisible(true);
}
public static void main(String[] args) {
MaFenetreAWT f=new MaFenetreAWT();
}
}
this.add(l);this.add(t);this.add(b);
this.add(b2);this.add(liste);
this.setBounds(10,10, 400, 400);
b.addActionListener(this);
b2.addActionListener(this);
this.setVisible(true); }
// Gestionaire des événnements
public void actionPerformed(ActionEvent e) {
// Si la sourse de l'événement est le bouton b
if(e.getSource()==b){
// Lire le contenu de la zone de texte
String s=t.getText();
// Ajouter la valeur de s à la liste
liste.add(s);}
// Si la sourse de l'événnement est b2
else if(e.getSource()==b2){
// Quitter l'application
System.exit(0); }
}
public static void main(String[] args) {
new TestEvent(); med@youssfi.net | ENSET Université
}} Hassan II Mohammedia 63
En utilisant une classe interne
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestEvent2 extends Frame{
Label l=new Label("Votre Nom:");
TextField t=new TextField("******"); h: ActionListener
Button b=new Button("Ajouter"); public void actionPerformed(ActionEvent e)
List liste=new List();
Button b2=new Button("Quitter");
class Handler implements ActionListener{
public void actionPerformed(ActionEvent e) {
if(e.getSource()==b){
String s=t.getText();
liste.add(s);
}
else if(e.getSource()==b2){
System.exit(0);
}
}
}
public TestEvent2() {
this.setLayout(new FlowLayout());
this.add(l);this.add(t);this.add(b);
this.add(b2);this.add(liste);
this.setBounds(10,10, 400, 400);
Handler h=new Handler();
b.addActionListener(h);
b2.addActionListener(h);
this.setVisible(true);
}
public static void main(String[] args) {
new TestEvent2(); med@youssfi.net | ENSET Université
} Hassan II Mohammedia 64
}
En créant directement un objet de ActionListener
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
public class TestEvent extends Frame{
Label l=new Label("Votre Nom:");
TextField t=new TextField(12);
Button b=new Button("Ajouter");
List liste=new List();
Button b2=new Button("Quitter");
: ActionListener
public TestEvent() { public void actionPerformed(ActionEvent e)
this.setLayout(new FlowLayout());
this.add(l);this.add(t);this.add(b);
this.add(b2);this.add(liste);
this.setBounds(10,10, 400, 400);
// Si on clique le bouton b1
b.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
String s=t.getText();
liste.add(s);
}
}
);
// Si on clique le bouton b2
b2.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
// Si on clique le bouton fermer de la fenêtre
this.addWindowListener(new WindowAdapter(){ : WindowListener
public void windowClosing(WindowEvent e) {
System.exit(0); public void windowClosing(WindowEvent e)
}
});
this.setVisible(true);
}
public static void main(String[] args) {
new TestEvent();
}}
med@youssfi.net | ENSET Université
Hassan II Mohammedia 65
Exemple d’application SWING
Interface concernant le TP entrée sorties (Récepteur)
import javax.swing.*;
public class RecepteurSWING extends JFrame implements ActionListener
{
private JLabel jl=new JLabel("Récepteur");
private JTextField jtf1=new JTextField(12);
private JButton jb1=new JButton("Add");
private JButton jb2=new JButton("Charcger");
private JButton jb3=new JButton("Sérialiser");
private List liste1=new List();
private List liste2=new List();
private JLabel jlErr=new JLabel("OK");
this.add(jlErr,BorderLayout.SOUTH);
jb1.addActionListener(this);
jb2.addActionListener(this);
jb3.addActionListener(this);
this.setBounds(10, 10, 500, 400);
this.setVisible(true);
}
M.Youssfi
JDBC
ODBC
Oracle MySQL SQL Server
….
Excel Access
createStatement()
getResultSetMetaData()
getConnection() executeQuery()
Lien SQL Données Structure
Pilote JDBC
Base de Données
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver") ;
Pour charger le pilote jdbc de MySQL:
Class.forName("com.mysql.jdbc.Driver") ;
Statement st=conn.createStatement();
Exécution d’une requête SQL avec l’objet Statement :
while(rs.next()){
System.out.ptintln(rs.getInt(1));
System.out.ptintln(rs.getString("NOM_PROD"));
System.out.ptintln(rs.getDouble("PRIX"));
}
2 BD
Contrôleur
3
1 4
5
Modèle
Métier DAO SGBD
Vue med@youssfi.net | ENSET Université
Hassan II Mohammedia 86
Mapping objet relationnel
D’une manière générale les applications sont
orientée objet :
Manipulation des objet et des classes
Utilisation de l’héritage et de l’encapsulation
Utilisation du polymorphisme
D’autres part les données persistantes sont souvent
stockées dans des bases de données relationnelles.
Le mapping Objet relationnel consiste à faire
correspondre un enregistrement d’une table de la
base de données à un objet d’une classe
correspondante.
Dans ce cas on parle d’une classe persistante.
Une classe persistante est une classe dont l’état de
ses objets sont stockés dans une unité de
sauvegarde (Base de données,Fichier, etc..)
med@youssfi.net | ENSET Université
Hassan II Mohammedia 87
Couche Métier : Mapping objet relationnel
public List<Cotation> getCotations(String codeSoc){
List<Cotation> cotations=new ArrayList<Cotation>();
cots
try {
Class.forName("com.mysql.jdbc.Driver");
:Cotation Connection conn=DriverManager.getConnection
numCot = 1 ("jdbc:mysql://localhost:3306/bourse_ws","root","");
dateCot=… PreparedStatement ps=conn.prepareStatement
valAction= … ("select * from cotations where CODE_SOCIETE=?");
codeSoc=‘SGMB’ ps.setString(1, codeSoc);
ResultSet rs=ps.executeQuery();
while(rs.next()){
:Cotation Cotation cot=new Cotation();
numCot = 2 cot.setNumCotation(rs.getLong("NUM_COTATION"));
dateCot=… cot.setDateCotation(rs.getDate("DATE_COTATION"));
valAction= … cot.setCodeSociete(rs.getString("CODE_SOCIETE"));
codeSoc=‘SGMB’ cot.setValAction(rs.getDouble("VAL_ACTION"));
cotations.add(cot);
}
:Cotation } catch (Exception e) { e.printStackTrace();}
numCot = 3 return(cotations);
dateCot=… }
valAction= … }
codeSoc=‘SGMB’
package metier;
System.out.print("Mot Clé:");
String mc=clavier.next();
List<Etudiant> etds=metier.getEtudiantParMC(mc);
for(Etudiant et:etds)
System.out.println(et.getNom()+"\t"+et.getEmail());
}
}
fireTableChanged(null);
}
}