|
Paquetage Standards Package java net Application Réseau
|
tarix | 01.11.2017 | ölçüsü | 445 b. | | #26480 |
|
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
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
- Buffered, Zipped, StreamTokenizer
- exemple : BufferedInputStream(InputStream in, int size)
Serialisation - interface Serializable, writeObject et readObject
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
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
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
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
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
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
Package java.util Hashtable, Vector, Enumeration -------------------------------- Calendar, Date, TimeZone -------------------------------- Locale, ResourceBundle ---------------------------- EventObject, EventListener --------------------------- java.util.zip - Sommes de contrôles CRC32 et Alder32
- GZIPInputStream, ZIPInputStream ...
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);
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
Divers
Environnement JDK JDK1.0 ==> JDK 1.1.5 ==> JDK 1.2beta /bin/javac, java, appletviewer, javadoc ... /demo/ /include/ /lib/classes.zip /src/
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 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
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
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
- *
- * BoutonRond b = new BoutonRond(titre);
- * monPanel.add(b);
- *
- *@see awt.button
- *@author C. Nicolas
- **/
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
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
Recommandations 2/2 Si possible créer un constructeur sans paramètre 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 !
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
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
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());}}
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"));}}
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"); } }
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;} }
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); }
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;
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( ) ); } }
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); }
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);}}
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;
Objets : Exemples de codes d'appels
classid="AudioItem" witdh="15" height="15">
classid ="clsid:663C8FEF-1EF9--11CF-A3DB-080036F12502" data="data:application/x-oleobject;base64, .donn base64."> A clock !
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(); } }
Dostları ilə paylaş: |
|
|