Скачать презентацию 02 03 98 SF Programmation Internet et Intranet Java Скачать презентацию 02 03 98 SF Programmation Internet et Intranet Java

6209d559783ca82ade4dfba94564e3a7.ppt

  • Количество слайдов: 39

02/03/98 SF Programmation Internet et Intranet * Java complément de cours S. Frénot INSA 02/03/98 SF Programmation Internet et Intranet * Java complément de cours S. Frénot INSA Lyon 1998 stephf@lisiflory. insa-lyon. fr http: //lisisun 1/~sfrenot/cours/ 1

02/03/98 SF Paquetage Standards 2 02/03/98 SF Paquetage Standards 2

Package java. net 02/03/98 SF • Application Réseau : – URL : représente un Package java. net 02/03/98 SF • Application Réseau : – URL : représente un objet de type URL – URLConnection/Http. URLConnection : représente la gestion d'une connexion – Socket et Server. Socket représente les points de connexion TCP – Datagram. Packet et Datagram. Server représente les points de connexion UDP – Inet. Adress représente une adresse TCP/IP 3

Package java. io 02/03/98 SF • Gestion des flux – Octets : Input. Stream Package java. io 02/03/98 SF • Gestion des flux – Octets : Input. Stream et Output. Stream – Char (2 octets) : Dérivent de Reader et Writer – Tubes : Pipe. Input. Stream, Pipe. Output. Stream • Accès aux fichiers – File, Filename. Filter, Random. Acces. File • Classe de sérialisation d'objets – Object. Input. Stream, Object. Output. Stream • Classes de service – Buffered, Zipped, Stream. Tokenizer • exemple : Buffered. Input. Stream(Input. Stream in, int size) • Serialisation – interface Serializable, write. Object et read. Object 4

Package java. lang 02/03/98 SF • La classe Objet • Types de base : Package java. lang 02/03/98 SF • La classe Objet • Types de base : Boolean, Character, Byte, Short, Interger, Long, Float, Void • Math : fonctions mathématiques avancées • String et String. Buffer • Runtime et System: Machine Virtuelle • Thread, Thread. Group et Process (Runnable) • Throwable 5

Package java. lang. reflect 02/03/98 SF • Nécessaire d'Introspection – Interface member : décrit Package java. lang. reflect 02/03/98 SF • Nécessaire d'Introspection – Interface member : décrit les membres d'une classe • Classes : Constructor, Field, Method • Classe : Modifier – public, private, protected, static, final, synchronized, interface, abstract, native – transient : non persistant – volatile : variable à jour dans un thread • Classe : Array • ==> très utile pour les composants logiciels – Java. Bean 6

02/03/98 SF Package java. math • abstract class Number implements Serializable Big. Integer : 02/03/98 SF Package java. math • abstract class Number implements Serializable Big. Integer : Entiers de longueur variable => cryptographie Big. Decimal : Nombre réels avec une bonne précision => calcul financier 7

Packetage java. security 02/03/98 SF • Provider : fournisseur d'algorithmes de cryptage et de Packetage java. security 02/03/98 SF • Provider : fournisseur d'algorithmes de cryptage et de gestion de clés. • Identity : entité identifiée par le système de sécurité • Key. Pair : clé privée, clé publique pour la gestion des certificats et des signatures • Certificate : atteste qu'une clé publique est celle du propriétaire. Notion d'attestion par une entité tierce dite de confiance • Signature : mécanisme d'authentification d'un message et intégrité • Signer : générer des signatures 8

Package java. sql 02/03/98 SF • Principes de connexion sur une base de données Package java. sql 02/03/98 SF • Principes de connexion sur une base de données • Connection : connexion sur un moteur de bases de données • Driver : Sous couche permettant de dialoguer avec le moteur SQL • Data. Base. Meta. Data : Meta données du moteur • Callable. Statement : Procédures stockées • Statement, Result. Set : Execution – ==> Wrapper d'ODBC : JDBC 9

Package java. text 02/03/98 SF • Internationalisation – Traduction de texte – Encodage de Package java. text 02/03/98 SF • Internationalisation – Traduction de texte – Encodage de caractères – Format de nombres – Date et Heures – Techniques de tri • Classes – Number. Format, Date. Format – Collator : tri de chaînes de caractères – Break. Iterator : cesures de mots et de phrases 10

Package java. util 02/03/98 SF • Hashtable, Vector, Enumeration ---------------- • Calendar, Date, Time. Package java. util 02/03/98 SF • Hashtable, Vector, Enumeration ---------------- • Calendar, Date, Time. Zone ---------------- • Locale, Resource. Bundle -------------- • Event. Object, Event. Listener -------------- • String. Tokenizer, Bit. Set, Observer et Observable java. util. zip – Sommes de contrôles CRC 32 et Alder 32 – GZIPInput. Stream, ZIPInput. Stream. . . 11

Package java. applet Classe : Applet 02/03/98 SF Interfaces : Applet. Context Applet. Stub Package java. applet Classe : Applet 02/03/98 SF Interfaces : Applet. Context Applet. Stub Audio. Clip get. Applet. Info, get. Parameter. Info, init, start, stop, destroy -------------URL get. Document. Base( ); URL get. Code. Base( ); String get. Parameter(String name); boolean is. Active( ); void applet. Resize (int width, int heigt); ------------Applet. Context get. Applet. Context( ); void show. Document(URL url, String target); void show. Status(String status); Applet get. Applet(String name); Enumeration get. Applets(); ------------Audio. Clip get. Audio. Clip(URL url); Image get. Image(URL url); 12

02/03/98 SF Package java. rmi • java. rmi : classe pour les proxy clients. 02/03/98 SF Package java. rmi • java. rmi : classe pour les proxy clients. – Exception et interface Remote • java. rmi. server : classe pour les objets serveurs – Remote. Object, Serialisation. . . • java. rmi. dgc : Distributed Garbage Collector • java. rmi. registry : Dénomination des objets 13

02/03/98 SF Divers 14 02/03/98 SF Divers 14

02/03/98 SF Environnement JDK • JDK 1. 0 ==> JDK 1. 1. 5 ==> 02/03/98 SF Environnement JDK • JDK 1. 0 ==> JDK 1. 1. 5 ==> JDK 1. 2 beta • /bin/javac, java, appletviewer, javadoc. . . • /demo/ • /include/ • /lib/classes. zip • /src/ 15

Ressources Java : Livres 02/03/98 SF • Java. Series O'Reilly – Français et Anglais Ressources Java : Livres 02/03/98 SF • Java. Series O'Reilly – Français et Anglais – Couvre tous les aspects : tutorial, thread, jdbc, Beans – Ecris par les concepteurs du langage : Exploring Java (valise) • Bibles de référence – The Java Language Specification : James Gosling, Bill Joy, Guy Steele Addison -Wesley – Titanium, Sam's Net • Java client-server – Cédric Nicolas, Christophe Avare, Frédéric Najman, Eyrolle • Sun (http: //www. sun. com/) – Spécifications : Java, VM, Java. Beans. . . • Conception Objets – Design Patterns Erich Gamma ITP 16

Ressources Java : Web 02/03/98 SF • http: //www. sun. com jdk, documents, pointeurs, Ressources Java : Web 02/03/98 SF • http: //www. sun. com jdk, documents, pointeurs, projets • http: //www. gamelan. com Applet, Scripts, Java. Scripts • http: //www. stars. com Codes, Exemples, Tutoriels (pas que java) • Java. Developper. Connexion http: //java. sun. com/jdc/tech. Docs/newsletter/index. html 17

Règles d'écriture de code Java 02/03/98 SF • Un fichier. java par classe • Règles d'écriture de code Java 02/03/98 SF • Un fichier. java par classe • Entête classique : description. . . • Commentaires : Java. Doc – Début de bloc : /**. . **/ – Balises : @author, @version, @see, @param, @return, @exception • Exemple /** * Affiche un bouton rond *

 * Bouton. Rond b = new Bouton. Rond(titre); * mon. Panel. add(b); * 
*@see awt. button *@author C. Nicolas **/ 18

Convention de nommage 02/03/98 SF • • paquetages classes méthodes constantes variables/méthodes priv/protected variables/méthodes Convention de nommage 02/03/98 SF • • paquetages classes méthodes constantes variables/méthodes priv/protected variables/méthodes statiques variables locales à une méthode • • méthodes fabriquant des objets de classe X méthodes de conversion retournant des objets de type X accesseur d'un attribut y de type X accesseur de modification • • • classe de définition d'une exception Fin. De. La. Classe. Avec. Le. Mot. Exception interface se distinguant d'une classe similaire Interface. Se. Termine. Par. Ifc classe qui se distingue de son interface Classe. Se. Termine. Par. Imp minuscule Majusule. Pour. La. Premiere. Lettre. De. Chaque. Mot minuscule. Pour. La. Premiere. Comme. La. Classe. Après MAJUSCULE_AVEC_SOULIGNE termine. Par. Souligne_ termine. Par. Deux. Soulignes__ minuscules_avec_soulignes new. X to. X X get. Y() void set. Y(X valeur) 19

Recommandations 1/2 • • • 02/03/98 SF Pas de variables d'instance publiques Pas d'accesseurs Recommandations 1/2 • • • 02/03/98 SF Pas de variables d'instance publiques Pas d'accesseurs inutiles Identifier les variables immuables (pas de synchro) Peu de variables/méthodes statiques (classe) Long plutôt que int et double / float – moins d'erreur de dépassement • Protected mieux que Private • Minimiser les accès aux variables d'instance dans les méthodes – utiliser des accesseurs protected • • Pas de surcharge sans nouveau paramètre (sinon utiliser instanceof()) Méthodes simples Préferer void : x. methode 1(). methode 2() méthodes publiques = synchronized Si surcharge de Object. equals() alors surcharge de Object. hashcode( ) Pas de clonage intempestif Utiliser notify. All plutot que notify ou resume 20

Recommandations 2/2 02/03/98 SF • Si possible créer un constructeur sans paramètre – Class. Recommandations 2/2 02/03/98 SF • Si possible créer un constructeur sans paramètre – Class. new. Instance() • Pas de final sinon pour de l'optimisation de performances • Interfaces mieux que classes abstraites (héritage simple) • Préférer abstract void ma. Methode. Vide(); à void ma. Methode. Vide(){ } • Import java. awt. Button mieux que java. awt. * • Nommer les thread pour le débogage en distant • Utiliser plutôt implements Runnable que extends Thread • Ne pas abuser du Garbage Collector (-verbosegc et -prof) • Buffered. Input. Stream : optimisation des performances • Surcharger to. String des classes définies (debogage) Ne pas croire tout ce qu'on dit ! 21

Serveurs Java 02/03/98 SF • http: //jeeves. javasoft. com/ • http: //www. acme. com/java/software/Acme. Serveurs Java 02/03/98 SF • http: //jeeves. javasoft. com/ • http: //www. acme. com/java/software/Acme. Serve. S erve. html (Jef Poskanzer) 1500 lignes + sources • http: //www. w 3. org/pub/WWW/Jigsaw/ ==> Dynamiques ==> Multithreads 22

02/03/98 SF Serveur 23 02/03/98 SF Serveur 23

02/03/98 SF Java Par L'exemple : Le serveur • import java. net. *; • 02/03/98 SF Java Par L'exemple : Le serveur • import java. net. *; • import java. io. *; • public class Mon. Serveur. Web { • public static void main( String argv[]) throws IOException { • Server. Socket ss=new Server. Socket(Integer. parse. Int(argv[0])); • while (true) new Une. Connexion(ss. accept()). start(); • • class Une. Connexion extends Thread{ • Socket client; • Une. Connexion (Socket client) throws Socket. Exception { • this. client = client; • set. Priority(NORM_PRIORITY -1); • } 24

02/03/98 SF Java Par l'Exemple : Le serveur • • public void run() { 02/03/98 SF Java Par l'Exemple : Le serveur • • public void run() { try { buffered. Reader in=new Buffered. Reader( new Input. Stream. Reader(client. get. Input. Stream(), "8859_1"); ); Output. Stream out=client. get. Output. Stream(); Print. Writer pout=new Print. Writer( new Output. Stream. Writer(out, ""8859_1"), true); String larequete=in. read. Line(); • • • • • String. Tokenizer st=new String. Tokenizer(larequete); if ((st. count. Tokens()>=2) && st. next. Token(). equals("GET")){ if ((request=st. next. Token()). starts. With("/")) request=request. substring(1); if ((request. ends. With("/") ||request. equals("")) request=request+"index. html"; try { File. Input. Stream fis=new File. Input. Stream(request); byte[] data=new byte[fis. available()]; fis. read(data); out. write(data); out. flush(); catch(File. Not. Found. Exception e){ pout. println("404 Object not found"); } else pout. println("400 Bad Request"); client. close(); catch (IOException e) { System. out. println("I/O error" + e); } } //fin run() }//fin class 25

02/03/98 SF Relocalisation 26 02/03/98 SF Relocalisation 26

Relocalisation de page + traces 02/03/98 SF • Shell : trace=/tmp/logrealocations. log echo $REMOTE_ADDR Relocalisation de page + traces 02/03/98 SF • Shell : trace=/tmp/logrealocations. log echo $REMOTE_ADDR >> $trace echo "Location: http: //www. insa-lyon. fr: 8000" echo • Servlet import java. io. *; import java. servlet. http. *; public class goto. Url extends Http. Servlet { public void service(Http. Servlet. Request req, Http. Servlet. Response res) throws Servlet. Exception, IOException { Data. Output. Stream log = new Data. Output. Stream(new File. Output. Stream("goto. log", true)); log. write. Chars(req. get. Remote. Addr()+"n"); log. close(); res. send. Redirect(req. get. Query. String()); }} 27

02/03/98 SF Les Layouts 28 02/03/98 SF Les Layouts 28

Layout. Manager : exemples import java. awt. *; 02/03/98 SF • • public class Layout. Manager : exemples import java. awt. *; 02/03/98 SF • • public class Grid extends java. applet. Applet { • public void init() { • set. Layout(new Grid. Layout(3, 2)); //ligne, colonne (2, 0) • add(new Button("Un"); • . . . • add(new Button("cinq"); }} • import java. awt. *; • public class Flow extends java. applet. Applet{ • public void init() { • add (new Button("Un")); • add (new Button("Deux")); • add (new Button("Trois")); • add (new Button("Quatre")); • add (new Button("Cinq")); }} 29

02/03/98 SF Layout. Manager : Border. Layout • • • • import java. awt. 02/03/98 SF Layout. Manager : Border. Layout • • • • import java. awt. *; public class une. Bordure extends java. applet. Applet { public void init() { set. Layout (new java. awt. Border. Layout()); Panel p new Panel(); p. add(new Button("Est")); add(p, "East"); p = new Panel(); p. add(new Button("Ouest")); add (p, "West"); p=new Panel(); p. add(new Button("Nord")); add (p, "North"); } } 30

Layout. Manager : Card. Layout 02/03/98 SF • import java. awt. *; • public Layout. Manager : Card. Layout 02/03/98 SF • import java. awt. *; • public class main extends java. applet. Applet { • Card. Layout cards = new Card. Layout(); • public void init() { • set. Layout(cards); • add(new Button("Un"), "Nom. Carte. Un"); • add(new Button("Deux"), "Nom. Carte. Deux"); • } • public void agir() { • cards. next(this); • return true; } • } 31

Calculatrice 1/3 02/03/98 SF • • import java. awt. *; import java. awt. event. Calculatrice 1/3 02/03/98 SF • • import java. awt. *; import java. awt. event. *; • public class Calculator extends java. applet. Applet implements Container. Listener, Action. Listener { Grid. Bag. Constraints gbc = new Grid. Bag. Constraints(); { gbc. weightx=1. 0; gbc. weihty=0; gbc. fill=Grid. Bag. Constraints. BOTH"; } Text. Field l. Affichage = new Text. Field(); • • • private void add. GB(Container cont, Component comp, int x, int y) { if (!(cont. get. Layout() instanceof Grid. Bag. Layout)) cont. set. Layout(new Grid. Bag. Layout()); gbc. gridx=x; gbc. gridy=y; cont. add(comp, gbc); } 32

Calculatrice 2/3 public void init() { set. Font(new Font( Calculatrice 2/3 public void init() { set. Font(new Font("Monospaced"), Font. BOLD, 24); add. Container. Listener(this); gbc. gridwidth=4; add. GB(this, l. Affichage, 0, 0); // haut de la calculatrice Panel top. Row=new Panel( ); top. Row. add. Container. Listener(this); gbc. gridwidth=1; gbc. weightx=1. 0; add. GB(toprow, new Button("C"), 0, 0); gbc. weightx=0. 33; add. GB(toprow, new Button("%"), 0, 0); gbc. weightx=1. 0; add. GB(toprow, new Button("+"), 0, 0); gbc. gridwidth=4; add. GB(this, top. Row, 0, 1); gbc. weightx=1; gbc. gridwidth=1; 02/03/98 SF //Les chiffres for (int j=0; j<3: ; j++) add. GB(this, new Button("", ((2 -j)*3+i+1)), i, j+2); // -, x, / add. GB(this, new Button("-"), 3, 2); add. GB(this, new Button("x"), 3, 2); add. GB(this, new Button("u 00 F 7"), 3, 2); // Ligne du bas Panel bottom. Row=new Panel( ); bottom. Row. add. Container. Listener(this); gbc. weightx=1. 0; add. GB(bottom. Row, new Button("0"), 0, 0); gbc. weightx=0. 33; add. GB(bottom. Row, new Button(". "), 0, 0); gbc. weightx=1. 0; add. GB(bottom. Row, new Button("="), 0, 0); gbc. gridwidth=4; add. GB(this, bottom. Row, 0, 5); } 33

Calculatrice 3/3 02/03/98 SF public void component. Added(Container e) { Component comp e. get. Calculatrice 3/3 02/03/98 SF public void component. Added(Container e) { Component comp e. get. Child( ); if (comp instanceof Button) ((Button)comp). add. Action. Listener(this); } public void component. Removed(Container. Event e) { } public void action. Performed(Action. Event e) { if (e. get. Action. Command( ). equals("C")) the. Display. set. Text(""); else the. Display. set. Text(the. Display. get. Text( ) + e. get. Action. Command( ) ); } } 34

Application 1/3 (traitement) 02/03/98 SF import java. awt. *; import java. awt. event. *; Application 1/3 (traitement) 02/03/98 SF import java. awt. *; import java. awt. event. *; public class Application. Simple{ // La classe principale sert de délégué public void quitter. Appli() { System. exit(0); } public void maximiser(Frame f){ f. set. Size(f. get. Toolkit(). get. Screen. Size()); } public static void main(String args[]){ Application. Simple mon. Appli=new Applicatio. Simple(); IHMSimple mon. IHM = new IHMSimple(mon. Apli); } 35

Application 2/3 (IHM) 02/03/98 SF class IHMSimple { public IHMSimple(Application. Simple une. Appli) { Application 2/3 (IHM) 02/03/98 SF class IHMSimple { public IHMSimple(Application. Simple une. Appli) { Frame ma. Frame; = new Frame(); ma. Frame. set. Layout(new Flow. Layout()); //Premier bouton Button mon. Bouton. Quitter=new Button("ATCHAW!"); //On lui donnne un adapatateur mon. Bouton. Quitter. add. Action. Listener(new Mon. Adaptateur(Mon. Adaptateur. QUITTER, une. Appli)); //2 nd bouton Button mon. Bouton. Agrandir=new Button("Maximise"); //On lui donnne un adapatateur mon. Bouton. Agrandir. add. Action. Listener(new Mon. Adaptateur(Mon. Adaptateur. MAXIMISER, une. Appli)); ma. Frame. add(mon. Bouton. Quitter); ma. Frame. add(mon. Bouton. Agrandir); ma. Frame. pack); ma. Frame. set. Visible(true); }} 36

Application 3/3 : Adaptateur 02/03/98 SF class Mon. Adaptateur implements Action. Listener { static Application 3/3 : Adaptateur 02/03/98 SF class Mon. Adaptateur implements Action. Listener { static final int QUITTER = 1; static final int MAXIMISER = 2; protected int type. Action; protected Application. Simple l. Appli; public Mon. Adaptateur(int un. Type. Action, Application. Simple une. Appli) { type. Action=un. Type. Action; l. Appli=une. Appli; } public action. Performed(Action. Event e){ Object un. Composant=e. get. Source(); do { un. Composant=((Component)un. Composant). get. Parent; } while (!(un. Composant instanceof Window)); Window fenetremere=(Window) un. Composant; switch (type. Action) { case QUITER : l. Appli. quitter. Appli(); break; case AGRANDIR l. Appli. maximiser((Frame)fenetremere); break; } } } 37

" src="https://present5.com/presentation/6209d559783ca82ade4dfba94564e3a7/image-38.jpg" alt="02/03/98 SF Objets : Exemples de codes d'appels

" /> 02/03/98 SF Objets : Exemples de codes d'appels

A clock ! Des bulles 38

Applet / Standalone 02/03/98 SF public class Hello. Web extends Applet { publc void Applet / Standalone 02/03/98 SF public class Hello. Web extends Applet { publc void paint (java. awt. Graphics gc) { gc. draw. Strings ("Hello Web!", 125, 95); } public static void main (String[] args) { Frame la. Frame=new Frame(); Applet hello. Web = new Hello. Web(); la. Frame. add("Center", hello. Web()); la. Frame. set. Size(200, 200); hello. Web. init(); hello. Web. start(); the. Frame. show(); } } 39