66
Applets By Korteby Farouk Cours Java Avancée

Applets

Embed Size (px)

DESCRIPTION

Qu'est-ce qu'une applet ? Applets et sécurité… Du coté HTML Du coté Java Un peu de pratique

Citation preview

Page 1: Applets

Applets

By Korteby Farouk

Cours Java Avancée

Page 2: Applets

Sommaire

1. Qu'est-ce qu'une applet ?2. Applets et sécurité…3. Du coté HTML4. Du coté Java5. Un peu de pratique

Page 3: Applets

Qu'est-ce qu'une applet ?

By Korteby Farouk

Cours Java Avancée

Page 4: Applets

Qu'est-ce qu'une applet ?Une applet est une application

Java :• C'est une classe Java compilée

sous forme debytecode • Elle dérive d'une classe mère :

– java.applet.Applet pour Java 1 (supporté nativement par les navigateurs compatibles Java)

– javax.swing.Japplet pour Java 2 (nécessite un plug-in Java 2)

• Elle est exécutée par une machine virtuelle Java(JVM)

Page 5: Applets

Qu'est-ce qu'une applet ?Elle possède néanmoins

certaines particularités :• Elle réside sur un serveur web • Elle est véhiculée par une page

HTML qui contient son URL • Le navigateur Java-compatible

qui charge cette page télécharge alors le code de l'applet (.class ou .jar) et l'exécute grâce à sa propre JVM ou une JVM extérieure dans le cas d'un plug-in

Page 6: Applets

Qu'est-ce qu'une applet ?

Client Web

Serveur Web

Pages Web

1. Demande d’URL

3. Transmission de la page

2. Accès aux fichiers

4. Affichage de la page figée (avec hyperliens)

Page 7: Applets

Qu'est-ce qu'une applet ?

Client Web

Serveur Web1. Demande d’URL

3. Transmission de la page

2. Accès aux fichiers

4. Affichage de la page, initialisation puisdémarrage des applets Pages Web

Fichiers .class

Page 8: Applets

Applets et sécurité…

By Korteby Farouk

Cours Java Avancée

Page 9: Applets

Applets et sécurité…• Les conditions de sécurités sont

plus strictes que pour une application ordinaire, et sont gérées par le navigateur lui-même :

1. Pas d'accès au système de fichier de l'hôte

2. Pas d'exécution de code natif sur l'hôte

3. Communication restreinte avec le serveur d'origine

• La signature du code permet néanmoins de l'authentifier et de gérer ce problème

Page 10: Applets

Applets et sécurité…• Le client peut accorder des droits

aux applets signées par des personnes de confiance

• Le mécanisme des clefs privées et publiques garantit la fiabilité

Page 11: Applets

Applets et sécurité…• Attribués par VeriSign, Thawte, …

à une société• Prix: au moins 150 $ par an• Garantissent l’origine et

l’intégrité d’un programme (*.exe), d’une applet (*.class) ou d’une archive (*.jar)

• Utilisent une connexion sécurisée (SSL) avec transmission de données cryptées

Page 12: Applets

Applets et sécurité…• Qu'est-ce qu'une applet ?

Page 13: Applets

Du coté HTML

By Korteby Farouk

Cours Java Avancée

Page 14: Applets

Du coté HTML• Les balises <APPLET> ,

<OBJECT>

Elle sert à invoquer l'applet au sein de la page web,dans le cas d'une applet exécutée nativement.

Dans le cas d'une applet exécutée via un plug-in, c'est la balise <EMBED> ou <OBJECT> qui est utilisée, selon le navigateur.

Page 15: Applets

Du coté HTMLUtilisation :<APPLET code="HelloWord" width="300" height="200" > Texte de remplacement pour

les navigateurs n'interprétant pas cette balise

</APPLET>

Page 16: Applets

Du coté HTMLUtilisation :<OBJECT code="HelloWord" width="300" height="200" > Texte de remplacement pour

les navigateurs n'interprétant pas cette balise

</OBJECT>

Page 17: Applets

Du coté HTMLAttributs :

• code=[chaine] (obligatoire)– nom de la classe principale

• width=[entier] (obligatoire pour l'AppletViewer)– dimension horizontale de l'applet, en

pixels• height=[entier] (obligatoire pour

l'AppletViewer)– dimension verticale de l'applet, en pixels

• hspace=[entier]– espace horizontal autour de l'applet, en

pixels• vspace=[entier]

– espace vertical autour de l'applet, en pixels

Page 18: Applets

Du coté HTMLAttributs :

• codebase=[chaine]– URL de base pour l'applet. Par défaut :

le répertoire courant• name=[chaine]

– nom de l'applet• archive=[chaine]

– fichier archive contenant les classes de l'applet

• alt=[chaine]– Texte affiché par les navigateurs

interprétant la balise, mais n'affichant pas l'applet pour autant (en cours de chargement, support Java désactivé, etc...)

Page 19: Applets

Du coté HTMLLa balise <PARAM>• Elle sert à passer des arguments

à l'applet à l'exécution, de la même façon que les arguments en ligne de commande d'une application.

Page 20: Applets

Du coté HTMLUtilisation :<APPLET code="HelloWord" width="300" height="200">

• <PARAM name="texte" value="Hello world !">

• <PARAM name="occurences" value="3">

</APPLET>

Page 21: Applets

Du coté Java

By Korteby Farouk

Cours Java Avancée

Page 22: Applets

Du coté Java

Du coté Java:

1. Création2. Cycle de vie3. Récupération des

paramètres4. Contexte de l'applet

Page 23: Applets

Du coté Java

1. Création

• Il faut dériver la super classe java.applet.Applet, comme n'importe quelle application Java :

• public class MyApplet extends public class MyApplet extends java.applet.Applet {} java.applet.Applet {}

Page 24: Applets

Du coté Java

Cependant, on n'utilise ni de constructeur, ni de méthode main().

En effet, c'est le navigateur qui instancie l'applet à un moment non défini, alors que toutes les ressources nécessaires à son initialisation ne sont pas forcément encore disponible.

A la place, on utilise la méthode initinit().().

Page 25: Applets

Du coté Java

Le comportement de l'applet est alors spécifié en surchargeant les méthodes:

• init(),init(),• start(), start(), • stop(), stop(), • destroy()destroy()• et paint(Graphics gc) et paint(Graphics gc) héritées de la superclasse :

java.applet.Applet

Page 26: Applets

Du coté Java

2. Cycle de vieL'appel des méthodes:

init(),start(), stop() et destroy()par le navigateur constitue le cycle

de vie de l'applet 

Page 27: Applets

Du coté Java• public void init()

– appelée une seule fois par le navigateur à l'initialisation de l'applet, lorsqu'elle est chargée

• public void start()– appelée à chaque fois que l'applet devient

visible

• public void stop()– appelée à chaque fois que l'applet est

masquée

• public void destroy()– appelée une seule fois par le navigateur à la

destruction de l'applet, lorsque la page HTML change

Page 28: Applets

Du coté Java

init()init()

start()start()

stop()stop()

destroy()destroy()

Page 29: Applets

Du coté Java

Récupération des paramètres• La méthode

getParameter(StringparameterNagetParameter(StringparameterName)me) permet de récupérer dans une chaine la valeur associée à un paramètre défini dans la page web par la balise <PARAM> vue précédement :

Page 30: Applets

Du coté Java

Pour une chaîne de caractère :• String texte =

getParameter("texte");

Et Pour un entier :• int occurences = (new

Integer(getParameter("occurences"))).intValue();

Page 31: Applets

Du coté Java

Contexte de l'applet• La classe AppletContext d'accéder

à des ressources externes à l'applet, telles que d'autres applets ou le navigateur lui-même.

• La méthode getAppletContext() permet d'obtenir l'instance correspondant à l'applet courante, à laquelle on peut ensuite appliquer notamment les méthodes suivantes :

Page 32: Applets

Du coté Java

• public java.util.Enumeration getApplets()– retourne l'ensemble des autres

applets de la page, sous la forme d'une énumération

• public java.applet.Applet getApplets( String appletName)– retourne l'applet de la page portant

le nom appletName

Page 33: Applets

Du coté Java

• public void showDocument(java.net.URL url)– demande au navigateur de charger

la ressource désignée par l'URL url

• public showStatus(String status)– affiche le message status dans la

barre d'état du navigateur

Page 34: Applets

Ateliers

By Korteby Farouk

Cours Java Avancée

Page 35: Applets

Ateliers• l'indispensable JDK de SUN :

Il contient un compilateur, un interpréteur, les classes de base, et d'autres outils.

• la documentation sur les API, les outils Java fournis par Sun

• Un Éditeur java : JCreator Pro

Page 36: Applets

AteliersAvec le package :

Java.AWT Applets;Java.AWT Applets;

1. Composants de Base2. Son et Graphiques3. Composants Intermédiaires

Page 37: Applets

Composants de BaseComposants de Base

By Korteby Farouk

Cours Java Avancée

Page 38: Applets

Composants de Base• HelloWorld

public class HelloWorld extends Applet {

public void paint( Graphics g ) {

g.drawString("Hello World",50,25);

} }

Page 39: Applets

Composants de Base• Label1:

importer un HTML paramètre

• javag.drawString(this.getParameter("text"),50,25);

• HTML<PARAM name="text" value="Your text here">

Page 40: Applets

Composants de Base• Label2: importer plusieurs

paramètres:

private String getStrParam( String name, String private String getStrParam( String name, String defaultVal ) {defaultVal ) {

String param = this.getParameter(name);String param = this.getParameter(name);

return param;return param;

}}

private int getIntParam( String name, int defaultVal ) {private int getIntParam( String name, int defaultVal ) {

String param = this.getParameter(name);String param = this.getParameter(name);

int i = Integer.parseInt( param );int i = Integer.parseInt( param );

return i;return i;

}}

Page 41: Applets

Composants de Base• HTML

<APPLET code="Label3.class" width=150 <APPLET code="Label3.class" width=150 height=50>height=50>

<PARAM name="text" value="Your text here"><PARAM name="text" value="Your text here">

<PARAM name="x" value="50"><PARAM name="x" value="50">

<PARAM name="y" value="25"><PARAM name="y" value="25">

texte en cas de problème dans la jretexte en cas de problème dans la jre

</APPLET></APPLET>

Page 42: Applets

Composants de Base• SampleFonts: Texte Styles et Polices

1.1. g.setFont( new Font("TimesRoman",Font.PLAIN,14) ); g.setFont( new Font("TimesRoman",Font.PLAIN,14) ); g.drawString("TimesRoman Plain 14-g.drawString("TimesRoman Plain 14-point",x,y+=25);point",x,y+=25);

2.2. g.setFont( new Font("TimesRoman",Font.ITALIC,14) ); g.setFont( new Font("TimesRoman",Font.ITALIC,14) ); g.drawString("TimesRoman Italic 14-g.drawString("TimesRoman Italic 14-point",x,y+=15);point",x,y+=15);

3.3. g.setFont( new Font("TimesRoman",Font.BOLD,14) ); g.setFont( new Font("TimesRoman",Font.BOLD,14) ); g.drawString("TimesRoman Bold 14-point",x,y+=15);g.drawString("TimesRoman Bold 14-point",x,y+=15);

4.4. g.setFont( new Font("TimesRoman", g.setFont( new Font("TimesRoman", Font.ITALIC+Font.BOLD,14) ); Font.ITALIC+Font.BOLD,14) ); g.drawString("TimesRoman BoldItalic 14-g.drawString("TimesRoman BoldItalic 14-point",x,y+=15);point",x,y+=15);

Page 43: Applets

Composants de Base• SampleButton:button avec

événement

• DéclarationDéclarationjava.awt.Button button1;java.awt.Button button1;int presses = 0;int presses = 0;

• Dans init()Dans init()add( button1 = new java.awt.Button("Sample Button") ); add( button1 = new java.awt.Button("Sample Button") );

• Déclaration fonction Clique du buttonDéclaration fonction Clique du buttonvoid Button_Clicked(Event event) {void Button_Clicked(Event event) { System.out.println("Sample Button presses == " + +System.out.println("Sample Button presses == " + +

+presses); +presses); showStatus("Sample Button presses == " + showStatus("Sample Button presses == " +

presses);presses); }}

Page 44: Applets

Composants de Base• SampleButton:button avec

événement

• Gestion d’événementGestion d’événementpublic boolean handleEvent(Event event) {public boolean handleEvent(Event event) { if (event.target == button1if (event.target == button1 && event.id == Event.ACTION_EVENT&& event.id == Event.ACTION_EVENT ){){ Button_Clicked(event);Button_Clicked(event); return true;return true; }} return super.handleEvent(event);return super.handleEvent(event); }}

Page 45: Applets

Composants de Base• SampleTextField1

• DéclarationTextField output;TextField output;TextField input;TextField input;

• Dans init()output = new TextField("ereh txet epyT",40);output = new TextField("ereh txet epyT",40);add(output);add(output);input = new TextField("Type text here",40);input = new TextField("Type text here",40);add(input);add(input);

Page 46: Applets

Composants de Base• SampleTextField1• Gestion d’événementGestion d’événementpublic boolean keyDown( Event evt, public boolean keyDown( Event evt,

int key ) {int key ) {boolean result = boolean result = super.keyDown( evt, key );super.keyDown( evt, key );String s = input.getText();String s = input.getText();output.setText(s);output.setText(s);return result;return result;

}}

Page 47: Applets

Composants de Base• SampleChoice: liste de choix

Dans la méthode : init()

Choice c = new Choice();Choice c = new Choice();

c.addItem ("Choice1");c.addItem ("Choice1");

c.addItem ("Choice2");c.addItem ("Choice2");

c.addItem ("Choice3");c.addItem ("Choice3");

add(c);add(c);

Page 48: Applets

Composants de Base• SampleChoice: liste de choix

La Gestion d’événements:

public boolean action(Event e, Object o) {public boolean action(Event e, Object o) { if (e.target instanceof Choice) {if (e.target instanceof Choice) {

Choice c = (Choice)e.target;Choice c = (Choice)e.target; int index = c.getSelectedIndex();int index = c.getSelectedIndex(); String s = c.getSelectedItem();String s = c.getSelectedItem();

showStatus(s);showStatus(s); return true;return true; }} return false;return false; }}

Page 49: Applets

Composants de Base• SampleCheckboxes1: Buttons radios

Déclaration:TextField output;Checkbox box2;Checkbox box1;Checkbox box3;

La méthode : init()setLayout( new GridLayout( 4, 1 ) );output = new TextField("balloon",40); add(output);box1 = new Checkbox( "Big"); add(box1);box2 = new Checkbox( "Red"); add(box2);box3 = new Checkbox( "Shiny"); add(box3);output.setEditable(false);

Page 50: Applets

Composants de Base• Gestion d’événements

public boolean action( Event e, Object what ) {public boolean action( Event e, Object what ) {boolean result = super.action( e, what );boolean result = super.action( e, what );

if (e.target == box1if (e.target == box1 || e.target == box2|| e.target == box2 || e.target == box3|| e.target == box3 ){){ String s1 = (box1.getState() ? "big " : "");String s1 = (box1.getState() ? "big " : ""); String s2 = (box2.getState() ? "red " : "");String s2 = (box2.getState() ? "red " : ""); String s3 = (box3.getState() ? "shiny " : "");String s3 = (box3.getState() ? "shiny " : ""); String s = s1 + s2 + s3 + "balloon";String s = s1 + s2 + s3 + "balloon"; output.setText(s);output.setText(s); }}

return result;return result; }}

Page 51: Applets

Composants de Base• SampleScrollbars1Déclaration:Déclaration:

Scrollbar x;Scrollbar x;Scrollbar y;Scrollbar y;Scrollbar width;Scrollbar width;Scrollbar height; Scrollbar height; Scrollbar startAngle;Scrollbar startAngle;Scrollbar arcAngle;Scrollbar arcAngle;

La methode init();La methode init();x = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255); x = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255); add(x);add(x);y = new Scrollbar(Scrollbar.VERTICAL,128,64,80,255); y = new Scrollbar(Scrollbar.VERTICAL,128,64,80,255); add(y);add(y);width = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255);width = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255);add(width);add(width);height = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255);height = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255);add(height); add(height); startAngle = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255); startAngle = new Scrollbar(Scrollbar.VERTICAL,128,64, 0,255); add(startAngle);add(startAngle);arcAngle = new Scrollbar(Scrollbar.VERTICAL,128,64,10,360); arcAngle = new Scrollbar(Scrollbar.VERTICAL,128,64,10,360); add(arcAngle);add(arcAngle);

Page 52: Applets

Composants de Base• Gestion d’événement

public boolean handleEvent( Event e ) {public boolean handleEvent( Event e ) { boolean result = super.handleEvent(e);boolean result = super.handleEvent(e); if (e.target == xif (e.target == x || e.target == y|| e.target == y || e.target == width|| e.target == width || e.target == height|| e.target == height

|| e.target == startAngle|| e.target == startAngle || e.target == arcAngle|| e.target == arcAngle

){){ paint( getGraphics() );paint( getGraphics() ); }} return result;return result; }}

Page 53: Applets

Composants de BaseLa méthode paint()

• Cette méthode permet d'afficher le contenu de l'applet à l'écran.

• Ce rafraîchissement peut être provoqué par le navigateur ou par le système d'exploitation.

• La méthode repaint() force l'utilisation de la méthode paint().

Page 54: Applets

Composants de Base• La Méthode paint():

public void paint( Graphics g ) {public void paint( Graphics g ) { g.clearRect( 0, 60, 300, 240 );g.clearRect( 0, 60, 300, 240 ); g.fillArc(g.fillArc( x.getValue(),x.getValue(), y.getValue(),y.getValue(), width.getValue(),width.getValue(), height.getValue(),height.getValue(), startAngle.getValue(),startAngle.getValue(), arcAngle.getValue()arcAngle.getValue() );); }}

Page 55: Applets

Son et GraphiquesSon et Graphiques

By Korteby Farouk

Cours Java Avancée

Page 56: Applets

Son et GraphiquesSon et Graphiques

SampleGif: dessin d’une image

• DéclarationImage im;Image im;

• La méthode init()im = getImage(getCodeBase(), im = getImage(getCodeBase(),

"image.gif");"image.gif");

Page 57: Applets

Son et GraphiquesSon et Graphiques

• La methode Paint()La methode Paint()

g.drawImage(im, 0, 0, this);g.drawImage(im, 0, 0, this);

Page 58: Applets

Son et GraphiquesSon et Graphiques

SampleSound1: jouer du sonSampleSound1: jouer du son

Déclaration:Déclaration:

String s;String s;

AudioClip ac;AudioClip ac;

La methode init()La methode init()s = getParameter("SON");s = getParameter("SON");

ac = ac = getAudioClip(getDocumentBase(), getAudioClip(getDocumentBase(), s );s );

ac.play(); <> ac.loop();ac.play(); <> ac.loop();

Page 59: Applets

Son et GraphiquesSon et Graphiques

HTMLHTML

<applet code="Son.class" <applet code="Son.class"

width=200 height=50> width=200 height=50>

<param name="SON" <param name="SON" value="son.au"> Votre value="son.au"> Votre navigateur n'est pas compatible navigateur n'est pas compatible Java ! Java !

</applet></applet>

Page 60: Applets

Composants Composants IntermédiairesIntermédiaires

By Korteby Farouk

Cours Java Avancée

Page 61: Applets

Composants IntermédiairesComposants Intermédiaires

SampleFrame1SampleFrame1: exemple de : exemple de frameframe

• déclarationdéclarationstatic final int x = 100;static final int y = 100;static final int width = 300;static final int height = 300;Frame frame;

Page 62: Applets

Composants IntermédiairesComposants Intermédiaires

SampleFrame1SampleFrame1: exemple de : exemple de frameframe

• La méthode init()La méthode init()frame = new Frame();frame = new Frame();

frame.setResizable(true);frame.setResizable(true); //Par Default//Par Default

frame.setTitle("SampleFrame1 Applet");frame.setTitle("SampleFrame1 Applet");

frame.reshape( x,y, width,height );frame.reshape( x,y, width,height );

frame.show();frame.show();

Page 63: Applets

Composants IntermédiairesComposants Intermédiaires

SampleMenu1SampleMenu1: exemple de menu: exemple de menu

• DéclarationDéclaration

Frame frame;Frame frame;

MenuBar menuBar;MenuBar menuBar;

Menu file;Menu file;

Page 64: Applets

Composants IntermédiairesComposants Intermédiaires

SampleMenu1SampleMenu1: exemple de menu: exemple de menu

• La méthode init()La méthode init()frame = new Frame();frame = new Frame();

menuBar = new MenuBar();menuBar = new MenuBar();

file = new Menu("file",true);file = new Menu("file",true);

menuBar.add(file);menuBar.add(file);

file.add("Quit");file.add("Quit");

frame.setMenuBar(menuBar);frame.setMenuBar(menuBar);

frame.show();frame.show();

Page 65: Applets

Merci de votre AttentionMerci de votre Attention

By Korteby Farouk

Cours Java Avancée -Applets-

Page 66: Applets

Pour informations Complémentaires vous Pour informations Complémentaires vous pouvez consultez:pouvez consultez:

http://www.jmdoudoux.fr/didacticiels : ‘Développons en Java’ etdidacticiels : ‘Développons en Java’ et ‘Développons en Java avec Eclipse’

http://penserenjava.free.fr/http://penserenjava.free.fr/ Thinking in java traduit en française

By Korteby Farouk

Cours Java Avancée -Applets-