1 / 39

Programmation Internet et Intranet * Java complément de cours

Programmation Internet et Intranet * Java complément de cours. S. Frénot INSA Lyon 1998 stephf@lisiflory.insa-lyon.fr http://lisisun1/~sfrenot/cours/. Paquetage Standards. Package java.net. Application Réseau : URL : représente un objet de type URL

brede
Download Presentation

Programmation Internet et Intranet * Java complément de cours

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Programmation Internetet Intranet *Java complément de cours S. Frénot INSA Lyon 1998 stephf@lisiflory.insa-lyon.fr http://lisisun1/~sfrenot/cours/

  2. Paquetage Standards

  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. 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. 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. 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. 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. 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. 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. 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. 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. Package java.applet Classe : Applet Interfaces : AppletContext AppletStub AudioClip 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);

  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. Divers

  15. Environnement JDK • JDK1.0 ==> JDK 1.1.5 ==> JDK 1.2beta • /bin/javac, java, appletviewer, javadoc ... • /demo/ • /include/ • /lib/classes.zip • /src/

  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. Ressources Java : Web • http://www.sun.com jdk, documents, pointeurs, projets • http://www.gamelan.com Applet, Scripts, JavaScripts • http://www.stars.com Codes, Exemples, Tutoriels (pas que java) • JavaDevelopperConnexion http://java.sun.com/jdc http://java.sun.com/jdc/techDocs/newsletter/index.html

  18. Règles d'écriture de code Java • Un fichier .java par classe • Entête classique : description... • Commentaires : JavaDoc • Début de bloc : /** .... **/ • Balises : @author, @version, @see, @param, @return, @exception • Exemple /** * Affiche un bouton rond * <pre> * BoutonRond b = new BoutonRond(titre); * monPanel.add(b); * </pre> *@see awt.button *@author C. Nicolas **/

  19. Convention de nommage • paquetages minuscule • classes MajusulePourLaPremiereLettreDeChaqueMot • méthodes minusculePourLaPremiereCommeLaClasseAprès • constantes MAJUSCULE_AVEC_SOULIGNE • variables/méthodes priv/protected termineParSouligne_ • variables/méthodes statiques termineParDeuxSoulignes__ • variables locales à une méthode minuscules_avec_soulignes • méthodes fabriquant des objets de classe X newX • méthodes de conversion retournant des objets de type X toX • accesseur d'un attribut y de type X X getY() • accesseur de modification void setY(X valeur) • classe de définition d'une exception FinDeLaClasseAvecLeMotException • interface se distinguant d'une classe similaire InterfaceSeTermineParIfc • classe qui se distingue de son interface ClasseSeTermineParImp

  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. 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. Serveurs Java • http://jeeves.javasoft.com/ • http://www.acme.com/java/software/Acme.Serve.Serve.html (Jef Poskanzer) 1500lignes + sources • http://www.w3.org/pub/WWW/Jigsaw/ ==> Dynamiques ==> Multithreads

  23. Serveur

  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. 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. Relocalisation

  27. Relocalisation de page + traces • 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.*; 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. Les Layouts

  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. 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. 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. 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. Calculatrice 2/3 //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); } 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;

  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. 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. 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. 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. Objets : Exemples de codes d'appels <P><OBJECT classid="http://www.miamachina.it/analogclock.py"> </object> <OBJECT codetype="application/java" classid="AudioItem" witdh="15" height="15"> <PARAM name="snd" value="Hello.au"></OBJECT> <OBJECT id="clock1" classid ="clsid:663C8FEF-1EF9--11CF-A3DB-080036F12502" data="data:application/x-oleobject;base64, .donn base64."> A clock</object> ! <APPLET code="Bubble.class" width="500" heigth="500"> Des bulles </APPLET>

  39. Applet / Standalone public class HelloWeb extends Applet { publc void paint (java.awt.Graphics gc) { gc.drawStrings ("Hello Web!", 125, 95); } public static void main (String[] args) { Frame laFrame=new Frame(); Applet helloWeb = new HelloWeb(); laFrame.add("Center",helloWeb()); laFrame.setSize(200,200); helloWeb.init(); helloWeb.start(); theFrame.show(); } }

More Related