La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

02/03/98 SF 1 Programmation Internet et Intranet * Java complément de cours S. Frénot INSA Lyon 1998

Présentations similaires


Présentation au sujet: "02/03/98 SF 1 Programmation Internet et Intranet * Java complément de cours S. Frénot INSA Lyon 1998"— Transcription de la présentation:

1 02/03/98 SF 1 Programmation Internet et Intranet * Java complément de cours S. Frénot INSA Lyon 1998

2 02/03/98 SF 2 Paquetage Standards

3 02/03/98 SF 3 Package java.net Application Réseau : –URL : représente un objet de type URL –URLConnection/HttpURLConnection : représente la gestion d'une connexion –Socket et ServerSocket représente les points de connexion TCP –DatagramPacket et DatagramServer représente les points de connexion UDP –InetAdress représente une adresse TCP/IP

4 02/03/98 SF 4 Package java.io Gestion des flux –Octets : InputStream et OutputStream –Char (2octets) : Dérivent de Reader et Writer –Tubes : PipeInputStream, PipeOutputStream Accès aux fichiers –File, FilenameFilter, RandomAccesFile Classe de sérialisation d'objets –ObjectInputStream, ObjectOutputStream Classes de service –Buffered, Zipped, StreamTokenizer exemple : BufferedInputStream(InputStream in, int size) Serialisation –interface Serializable, writeObject et readObject

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

6 02/03/98 SF 6 Package java.lang.reflect 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 –JavaBean

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

8 02/03/98 SF 8 Packetage java.security Provider : fournisseur d'algorithmes de cryptage et de gestion de clés. Identity : entité identifiée par le système de sécurité KeyPair : 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

9 02/03/98 SF 9 Package java.sql 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 DataBaseMetaData : Meta données du moteur CallableStatement : Procédures stockées Statement, ResultSet : Execution –==> Wrapper d'ODBC : JDBC

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

11 02/03/98 SF 11 Package java.util Hashtable, Vector, Enumeration Calendar, Date, TimeZone Locale, ResourceBundle EventObject, EventListener StringTokenizer, BitSet, Observer et Observable java.util.zip –Sommes de contrôles CRC32 et Alder32 –GZIPInputStream, ZIPInputStream...

12 02/03/98 SF 12 Package java.applet getAppletInfo, getParameterInfo, init, start, stop, destroy URL getDocumentBase( ); URL getCodeBase( ); String getParameter(String name); boolean isActive( ); void appletResize (int width, int heigt); AppletContext getAppletContext( ); void showDocument(URL url, String target); void showStatus(String status); Applet getApplet(String name); Enumeration getApplets(); AudioClip getAudioClip(URL url); Image getImage(URL url); Classe : AppletInterfaces : AppletContext AppletStub AudioClip

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

14 02/03/98 SF 14 Divers

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

16 02/03/98 SF 16 Ressources Java : Livres JavaSeries 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, JavaBeans... Conception Objets –Design Patterns Erich Gamma ITP

17 02/03/98 SF 17 Ressources Java : Web jdk, documents, pointeurs, projets Applet, Scripts, JavaScripts Codes, Exemples, Tutoriels (pas que java) JavaDevelopperConnexion

18 02/03/98 SF 18 Règles d'écriture de code Java Un fichier.java par classe Entête classique : description... Commentaires : JavaDoc –Début de bloc : /**.... **/ Exemple /** * Affiche un bouton rond * * BoutonRond b = new BoutonRond(titre); * monPanel.add(b); * awt.button C. Nicolas **/

19 02/03/98 SF 19 Convention de nommage paquetagesminuscule classesMajusulePourLaPremiereLettreDeChaqueMot méthodesminusculePourLaPremiereCommeLaClasseAprès constantesMAJUSCULE_AVEC_SOULIGNE variables/méthodes priv/protectedtermineParSouligne_ variables/méthodes statiquestermineParDeuxSoulignes__ variables locales à une méthodeminuscules_avec_soulignes méthodes fabriquant des objets de classe XnewX méthodes de conversion retournant des objets de type XtoX accesseur d'un attribut y de type XX getY() accesseur de modificationvoid setY(X valeur) classe de définition d'une exceptionFinDeLaClasseAvecLeMotException interface se distinguant d'une classe similaireInterfaceSeTermineParIfc classe qui se distingue de son interfaceClasseSeTermineParImp

20 02/03/98 SF 20 Recommandations 1/2 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.methode1().methode2() méthodes publiques = synchronized Si surcharge de Object.equals() alors surcharge de Object.hashcode( ) Pas de clonage intempestif Utiliser notifyAll plutot que notify ou resume

21 02/03/98 SF 21 Recommandations 2/2 Si possible créer un constructeur sans paramètre –Class.newInstance() Pas de final sinon pour de l'optimisation de performances Interfaces mieux que classes abstraites (héritage simple) Préférer abstract void maMethodeVide(); à void maMethodeVide(){ } 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) BufferedInputStream : optimisation des performances Surcharger toString des classes définies (debogage) Ne pas croire tout ce qu'on dit !

22 02/03/98 SF 22 Serveurs Java erve.html (Jef Poskanzer) 1500lignes + sources ==> Dynamiques ==> Multithreads

23 02/03/98 SF 23 Serveur

24 02/03/98 SF 24 Java Par L'exemple : Le serveur import java.net.*; import java.io.*; public class MonServeurWeb { public static void main( String argv[]) throws IOException { ServerSocket ss=new ServerSocket(Integer.parseInt(argv[0])); while (true) new UneConnexion(ss.accept()).start(); class UneConnexion extends Thread{ Socket client; UneConnexion (Socket client) throws SocketException { this.client = client; setPriority(NORM_PRIORITY -1); }

25 02/03/98 SF 25 Java Par l'Exemple : Le serveur public void run() { try { bufferedReader in=new BufferedReader( new InputStreamReader(client.getInputStream(), "8859_1");); OutputStream out=client.getOutputStream(); PrintWriter pout=new PrintWriter( new OutputStreamWriter(out, ""8859_1"), true); String larequete=in.readLine(); StringTokenizer st=new StringTokenizer(larequete); if ((st.countTokens()>=2) && st.nextToken().equals("GET")){ if ((request=st.nextToken()).startsWith("/")) request=request.substring(1); if ((request.endsWith("/") ||request.equals("")) request=request+"index.html"; try { FileInputStream fis=new FileInputStream(request); byte[] data=new byte[fis.available()]; fis.read(data); out.write(data); out.flush(); catch(FileNotFoundException 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

26 02/03/98 SF 26 Relocalisation

27 02/03/98 SF 27 Relocalisation de page + traces Shell : trace=/tmp/logrealocations.log echo $REMOTE_ADDR >> $trace echo "Location: echo Servlet import java.io.*; import java.servlet.*; import java.servlet.http.*; public class gotoUrl extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { DataOutputStream log = new DataOutputStream(new FileOutputStream("goto.log", true)); log.writeChars(req.getRemoteAddr()+"\n"); log.close(); res.sendRedirect(req.getQueryString());}}

28 02/03/98 SF 28 Les Layouts

29 02/03/98 SF 29 LayoutManager : exemples import java.awt.*; public class Grid extends java.applet.Applet { public void init() { setLayout(new GridLayout(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"));}}

30 02/03/98 SF 30 LayoutManager : BorderLayout import java.awt.*; public class uneBordure extends java.applet.Applet { public void init() { setLayout (new java.awt.BorderLayout()); 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"); }

31 02/03/98 SF 31 LayoutManager : CardLayout import java.awt.*; public class main extends java.applet.Applet { CardLayout cards = new CardLayout(); public void init() { setLayout(cards); add(new Button("Un"), "NomCarteUn"); add(new Button("Deux"), "NomCarteDeux"); } public void agir() { cards.next(this); return true;} }

32 02/03/98 SF 32 Calculatrice 1/3 import java.awt.*; import java.awt.event.*; public class Calculator extends java.applet.Applet implements ContainerListener, ActionListener { GridBagConstraints gbc = new GridBagConstraints(); { gbc.weightx=1.0; gbc.weihty=0; gbc.fill=GridBagConstraints.BOTH";} TextField lAffichage = new TextField(); private void addGB(Container cont, Component comp, int x, int y) { if (!(cont.getLayout() instanceof GridBagLayout)) cont.setLayout(new GridBagLayout()); gbc.gridx=x; gbc.gridy=y; cont.add(comp, gbc); }

33 02/03/98 SF 33 Calculatrice 2/3 public void init() { setFont(new Font("Monospaced"), Font.BOLD, 24); addContainerListener(this); gbc.gridwidth=4; addGB(this, lAffichage, 0, 0); // haut de la calculatrice Panel topRow=new Panel( ); topRow.addContainerListener(this); gbc.gridwidth=1; gbc.weightx=1.0; addGB(toprow, new Button("C"),0,0); gbc.weightx=0.33; addGB(toprow, new Button("%"),0,0); gbc.weightx=1.0; addGB(toprow, new Button("+"),0,0); gbc.gridwidth=4; addGB(this, topRow, 0, 1); gbc.weightx=1; gbc.gridwidth=1; //Les chiffres for (int j=0; j<3:; j++) addGB(this, new Button("", ((2-j)*3+i+1)), i, j+2); // -, x, / addGB(this, new Button("-"), 3,2); addGB(this, new Button("x"), 3,2); addGB(this, new Button("\u00F7"), 3,2); // Ligne du bas Panel bottomRow=new Panel( ); bottomRow.addContainerListener(this); gbc.weightx=1.0; addGB(bottomRow, new Button("0"),0,0); gbc.weightx=0.33; addGB(bottomRow, new Button("."),0,0); gbc.weightx=1.0; addGB(bottomRow, new Button("="),0,0); gbc.gridwidth=4; addGB(this, bottomRow, 0,5); }

34 02/03/98 SF 34 Calculatrice 3/3 public void componentAdded(Container e) { Component comp e.getChild( ); if (comp instanceof Button) ((Button)comp).addActionListener(this); } public void componentRemoved(ContainerEvent e) { } public void actionPerformed(ActionEvent e) { if (e.getActionCommand( ).equals("C")) theDisplay.setText(""); else theDisplay.setText(theDisplay.getText( ) + e.getActionCommand( ) ); }

35 02/03/98 SF 35 Application 1/3 (traitement) import java.awt.*; import java.awt.event.*; public class ApplicationSimple{ // La classe principale sert de délégué public void quitterAppli() { System.exit(0); } public void maximiser(Frame f){ f.setSize(f.getToolkit().getScreenSize()); } public static void main(String args[]){ ApplicationSimple monAppli=new ApplicatioSimple(); IHMSimple monIHM = new IHMSimple(monApli); }

36 02/03/98 SF 36 Application 2/3 (IHM) class IHMSimple { public IHMSimple(ApplicationSimple uneAppli) { Frame maFrame; = new Frame(); maFrame.setLayout(new FlowLayout()); //Premier bouton Button monBoutonQuitter=new Button("ATCHAW!"); //On lui donnne un adapatateur monBoutonQuitter.addActionListener(new MonAdaptateur(MonAdaptateur.QUITTER, uneAppli)); //2nd bouton Button monBoutonAgrandir=new Button("Maximise"); //On lui donnne un adapatateur monBoutonAgrandir.addActionListener(new MonAdaptateur(MonAdaptateur.MAXIMISER, uneAppli)); maFrame.add(monBoutonQuitter); maFrame.add(monBoutonAgrandir); maFrame.pack); maFrame.setVisible(true);}}

37 02/03/98 SF 37 Application 3/3 : Adaptateur class MonAdaptateur implements ActionListener { static final int QUITTER = 1; static final int MAXIMISER = 2; protected int typeAction; protected ApplicationSimple lAppli; public MonAdaptateur(int unTypeAction, ApplicationSimple uneAppli) { typeAction=unTypeAction; lAppli=uneAppli; } public actionPerformed(ActionEvent e){ Object unComposant=e.getSource(); do { unComposant=((Component)unComposant).getParent; } while (!(unComposant instanceof Window)); Window fenetremere=(Window) unComposant; switch (typeAction) { case QUITER : lAppli.quitterAppli(); break; case AGRANDIR lAppli.maximiser((Frame)fenetremere); break; }

38 02/03/98 SF 38 Objets : Exemples de codes d'appels A clock ! Des bulles