View
753
Download
2
Category
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