Java Par L'exemple : Le serveur - PowerPoint PPT Presentation

About This Presentation
Title:

Java Par L'exemple : Le serveur

Description:

DatagramPacket et DatagramServer repr sente les points de connexion UDP ... Certificate : atteste qu'une cl publique est celle du propri taire. ... – PowerPoint PPT presentation

Number of Views:426
Avg rating:3.0/5.0
Slides: 40
Provided by: LISI61
Category:
Tags: atteste | exemple | java | par | serveur

less

Transcript and Presenter's Notes

Title: Java Par L'exemple : Le serveur


1
Programmation Internetet Intranet Java
complément de cours
S. Frénot INSA Lyon 1998 stephf_at_lisiflory.insa-lyo
n.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
  • gt très utile pour les composants logiciels
  • JavaBean

7
Package java.math
  • abstract class Number implements Serializable
  • BigInteger Entiers de longueur variable
  • gt cryptographie
  • BigDecimal Nombre réels avec une bonne
    précision gt 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
  • gt 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 gt JDK 1.1.5 gt 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 _at_author, _at_version, _at_see, _at_param,
    _at_return, _at_exception
  • Exemple
  • /
  • Affiche un bouton rond
  • ltpregt
  • BoutonRond b new BoutonRond(titre)
  • monPanel.add(b)
  • lt/pregt
  • _at_see awt.button
  • _at_author C. Nicolas
  • /

19
Convention de nommage
  • paquetages minuscule
  • classes MajusulePourLaPremiereLettreDeChaqueMot
  • méthodes minusculePourLaPremiereCommeLaClasseAp
    rès
  • constantes MAJUSCULE_AVEC_SOULIGNE
  • variables/méthodes priv/protected termineParSoulig
    ne_
  • variables/méthodes statiques termineParDeuxSoulig
    nes__
  • variables locales à une méthode minuscules_avec_so
    ulignes
  • 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 FinDeLaClass
    eAvecLeMotException
  • interface se distinguant d'une classe
    similaire InterfaceSeTermineParIfc
  • classe qui se distingue de son interface ClasseSeT
    ermineParImp

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/
  • gt Dynamiques
  • gt 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 ssnew ServerSocket(Integer.parse
    Int(argv0))
  • while (true) new UneConnexion(ss.accept()).sta
    rt()
  • 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 innew BufferedReader(
  • new InputStreamReader(client.getInputSt
    ream(), "8859_1"))
  • OutputStream outclient.getOutputStream()
  • PrintWriter poutnew PrintWriter(
  • new OutputStreamWriter(out,
    ""8859_1"), true)
  • String larequetein.readLine()
  • StringTokenizer stnew StringTokenizer(larequet
    e)
  • if ((st.countTokens()gt2)
    st.nextToken().equals("GET"))
  • if ((requestst.nextToken()).startsWith("/"))
  • requestrequest.substring(1)
  • if ((request.endsWith("/")
    request.equals(""))
  • requestrequest"index.html"
  • try
  • FileInputStream fisnew FileInputStream(req
    uest)
  • byte datanew bytefis.available()
  • fis.read(data)

26
  • Relocalisation

27
Relocalisation de page traces
  • Shell
  • trace/tmp/logrealocations.log
  • echo REMOTE_ADDR gtgt trace
  • echo "Location http//www.insa-lyon.fr8000"
  • 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(ne
    w 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")
  • pnew 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.weightx1.0 gbc.weihty0
    gbc.fillGridBagConstraints.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.gridxx gbc.gridyy
  • cont.add(comp, gbc)

33
Calculatrice 2/3
  • public void init()
  • setFont(new Font("Monospaced"), Font.BOLD, 24)
  • addContainerListener(this)
  • gbc.gridwidth4
  • addGB(this, lAffichage, 0, 0)
  • // haut de la calculatrice
  • Panel topRownew Panel( )
  • topRow.addContainerListener(this)
  • gbc.gridwidth1
  • gbc.weightx1.0
  • addGB(toprow, new Button("C"),0,0)
  • gbc.weightx0.33
  • addGB(toprow, new Button(""),0,0)
  • gbc.weightx1.0
  • addGB(toprow, new Button(""),0,0)
  • gbc.gridwidth4
  • addGB(this, topRow, 0, 1)
  • gbc.weightx1 gbc.gridwidth1

//Les chiffres for (int j0 jlt3 j)
addGB(this, new Button("", ((2-j)3i1)), i,
j2) // -, 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 bottomRownew Panel( )
bottomRow.addContainerListener(this)
gbc.weightx1.0 addGB(bottomRow, new
Button("0"),0,0) gbc.weightx0.33
addGB(bottomRow, new Button("."),0,0)
gbc.weightx1.0 addGB(bottomRow, new
Button(""),0,0) gbc.gridwidth4
addGB(this, bottomRow, 0,5)
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 monApplinew
    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 monBoutonQuitternew
    Button("ATCHAW!")
  • //On lui donnne un adapatateur
  • monBoutonQuitter.addActionListener(new
  • MonAdaptateur(MonAdaptateur.QUITTER,
    uneAppli))
  • //2nd bouton
  • Button monBoutonAgrandirnew
    Button("Maximise")
  • //On lui donnne un adapatateur
  • monBoutonAgrandir.addActionListener(new
  • MonAdaptateur(MonAdaptateur.MAXIMISER
    , uneAppli))
  • maFrame.add(monBoutonQuitter)
  • maFrame.add(monBoutonAgrandir)
  • maFrame.pack)

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)
  • typeActionunTypeAction
  • lAppliuneAppli
  • public actionPerformed(ActionEvent e)
  • Object unComposante.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
  • ltPgtltOBJECT classid"http//www.miamachina.it/analo
    gclock.py"gt
  • lt/objectgt
  • ltOBJECT codetype"application/java"
  • classid"AudioItem"
  • witdh"15" height"15"gt
  • ltPARAM name"snd" value"Hello.au"gtlt/OBJECTgt
  • ltOBJECT id"clock1"
  • classid "clsid663C8FEF-1EF9--11CF-A3DB-080036
    F12502"
  • data"dataapplication/x-oleobjectbase64,
    .donn base64."gt
  • A clocklt/objectgt
  • ! ltAPPLET code"Bubble.class" width"500"
    heigth"500"gt
  • Des bulles lt/APPLETgt

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 laFramenew Frame()
  • Applet helloWeb new HelloWeb()
  • laFrame.add("Center",helloWeb())
  • laFrame.setSize(200,200)
  • helloWeb.init()
  • helloWeb.start()
  • theFrame.show()
Write a Comment
User Comments (0)
About PowerShow.com