Applets

Preview:

DESCRIPTION

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

Citation preview

Applets

By Korteby Farouk

Cours Java Avancée

Sommaire

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

Qu'est-ce qu'une applet ?

By Korteby Farouk

Cours Java Avancée

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)

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

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)

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

Applets et sécurité…

By Korteby Farouk

Cours Java Avancée

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

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é

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

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

Du coté HTML

By Korteby Farouk

Cours Java Avancée

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.

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

les navigateurs n'interprétant pas cette balise

</APPLET>

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

les navigateurs n'interprétant pas cette balise

</OBJECT>

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

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

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.

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

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

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

</APPLET>

Du coté Java

By Korteby Farouk

Cours Java Avancée

Du coté Java

Du coté Java:

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

paramètres4. Contexte de l'applet

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

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

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

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 

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

Du coté Java

init()init()

start()start()

stop()stop()

destroy()destroy()

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 :

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

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 :

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

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

Ateliers

By Korteby Farouk

Cours Java Avancée

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

AteliersAvec le package :

Java.AWT Applets;Java.AWT Applets;

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

Composants de BaseComposants de Base

By Korteby Farouk

Cours Java Avancée

Composants de Base• HelloWorld

public class HelloWorld extends Applet {

public void paint( Graphics g ) {

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

} }

Composants de Base• Label1:

importer un HTML paramètre

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

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

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;

}}

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>

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

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

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

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

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;

}}

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

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

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

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

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

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

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

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

Son et GraphiquesSon et Graphiques

By Korteby Farouk

Cours Java Avancée

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

Son et GraphiquesSon et Graphiques

• La methode Paint()La methode Paint()

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

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

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>

Composants Composants IntermédiairesIntermédiaires

By Korteby Farouk

Cours Java Avancée

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;

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

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;

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

Merci de votre AttentionMerci de votre Attention

By Korteby Farouk

Cours Java Avancée -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-

Recommended