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

Slides:



Advertisements
Présentations similaires
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 8 Langage HTML.
Advertisements

DOM Document Object Model. Généralités Standard du W3C Parseur XML – Génération dun arbre dobjet – Construction totale de larbre DOM est spécifié en IDL.
SAX Simple API for XML. Généralités API non standard développé par les membres du forum XML-DEV Parseur XML – Orienté événement – Parsing dynamique SAX.
Sérialisation des objets
Le mécanisme des exceptions
Introspection et Réflexion Manipulation dynamique de code Java.
SI3 MAM3 Hydro Nathan Cohen Igor Litovsky Christophe Papazian
Introduction à la Programmation Orientée Objet Retour sur les principaux concepts SI3 MAM3 Hydro Nathan Cohen
Programmation Réseaux Illustration : Les Sockets en Java Anne-Marie Déry À travailler seuls Concepts généraux Mise en œuvre Java.
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Programmation Web Les JSP.
Page 1 Les applets Jacques Lonchamp. Page 2 Présentation Une applet est téléchargée à partir dune machine distante qui fournit le code. Ce chargement.
Voisin-Polian : Introduction à Java 1 Introduction à Java - les flots - Frédéric VOISIN – Nicole POLIAN FIIFO - « Remise à Niveau »
Plan du cours La sérialisation: – comment stocker et restaurer les Objets? Les interfaces graphiques et la programmation évènementielle. –Comment concevoir.
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Programmer en JAVA par Tama
INTRODUCTION A JAVA Chapitre 1 : Introduction
LICENCE MIAGE Introduction Programmation Orientée Objet JAVA philippe
Java ? Printemps 90 : Naughton, Gosling et Sheridan : –"Le consommateur est le centre du projet, il faut construire un environnement de petite taille avec.
Tarak Chaari, Stéphane Frénot, Frédérique Laforest, Frédéric Le-Mouël JAV1 JAV – TD 5 Lhéritage en Java.

Servlet JAVA.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Les entrées /sorties en Java François Bonneville
Connexion base de données
Chapitre IV Object, interfaces, classes imbriquées.
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.
COURS DE PROGRAMMATION ORIENTEE OBJET :
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Faculté I&C, Claude Petitpierre, André Maurer 1 Java.
Langage Oriente Objet Cours 4.
SERVLETS PRESENTATION
1 Cours JAVA / Y.Laborde Java : Les FLUX de données Les flux de données introduction les flux binaires les flux binaires de sortie (FBS) les flux binaires.
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
Introduction à la programmation (Java)
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
NSY102 1 Concurrence compléments Notes de cours Cnam Paris jean-michel Douin, douin au cnam point fr 19 Mars 2007.
Programmation par Objets et Java
1 Part3 3 2 Exception Générée par un problème de programme Objet définissant une erreur Peut être saisie et traitée par un programme Une erreur: situation.
Programmation concurrente
1 CSI 2532 Lab5 Installation de JDBC Février 13, 2012.
Miguel Garzon CrUise Lab - SITE. Introduction Data Types and Sizes Constants Logic Operators Type conversions Example.
IFT1025: Programmation 2 Internet Jian-Yun Nie. Concepts Communication sur lInternet Connexion dans Java.
Multi-Thread Jian-Yun Nie
IFT 6800 Atelier en Technologies d’information
1 IFT 6800 Atelier en Technologies dinformation Cours 7 : Le langage de programmation Java chapitre 5: Les API Java.
1 IFT 6800 Atelier en Technologies dinformation Le langage de programmation Java chapitre 3 : Classes et Objects.
Servlets. 2 H. Fauconnier M2-Internet Contenu dynamique Perl/cgi indépendant de la plateforme Extensions du serveur exemple ASP M2-Internet 3 H. Fauconnier.
Cours 11 Threads. Chapitre X threads threadPOO-L3 H. Fauconnier3 Threads threads: plusieurs activités qui coexistent et partagent des données exemples:
COURS DE PROGRAMMATION ORIENTEE OBJET :
Proxy et plus Cnam Paris jean-michel Douin, douin au cnam point fr
Fabienne Boyer Laboratoire LIG (INRIA-UJF-INPG) Projet SARDES, INRIA Rhône-Alpes APACHE/VELOCITY.
Michel Coletta - Journées PATTERNS Avril Grenoble1 STRUTS Introduction Technologies Java Architecture Développement Enseigner quoi ?
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
J201 (JOC) Java Avancé juin 2007 ~ Brigitte Groléas ~
Objectifs À la fin de ce cours, vous serez capables de :
Les API Java. java.lang.* Object Boolean Character Class Math Number Process Runtime String StringBuffer System Thread ThreadGroup Throwable Double Float.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Les sockets.
Les classes et les objets Les données finales class A { … private final int n = 20 ; // la valeur de n est définie dans sa déclaration … } class A { public.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Cours du 5 novembre.
1 Chapitre III (~70 transparents) Compléments. 2 Au sommaire de ce chapitre 1. Les fichiers Les classes utilitaires
Ingénierie des réseaux - Chapitre 2 bis Les sockets en Java
Introduction à la programmation objet avec java
pour les programmeurs en C++ Java 2 Part 1 3 Histoire de Java Projet de connexion des machines: 1991 Le nom Java a été introduit dans un café Développé.
Transcription de la présentation:

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

02/03/98 SF 2 Paquetage Standards

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

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

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

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

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

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

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

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

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

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

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

02/03/98 SF 14 Divers

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

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 ( –Spécifications : Java, VM, JavaBeans... Conception Objets –Design Patterns Erich Gamma ITP

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

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 **/

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

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

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 !

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

02/03/98 SF 23 Serveur

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); }

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

02/03/98 SF 26 Relocalisation

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());}}

02/03/98 SF 28 Les Layouts

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"));}}

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"); }

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;} }

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); }

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); }

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( ) ); }

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); }

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);}}

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; }

02/03/98 SF 38 Objets : Exemples de codes d'appels <OBJECT codetype="application/java" classid="AudioItem" witdh="15" height="15"> <OBJECT id="clock1" classid ="clsid:663C8FEF-1EF9--11CF-A3DB F12502" data="data:application/x-oleobject;base64,.donn base64."> A clock ! Des bulles

02/03/98 SF 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(); }