Java pour Internet

logom.gif (2144 octets)

sciences.gif (2353 octets)

 

INTRODUCTION

HISTORIQUE

STRUCTURE

APPLICATIONS
JAVA

POUR QUOI FAIRE?

LES APPLETS JAVA

 

Hit Counter

RETOUR

Introduction

Java : Une "nouvelle" génération de logiciels (système d'exploitation, interface utilisateur, langage de programmation,...) et de matériels (processeurs) informatiques.

Buts initiaux

Offrir une plateforme de développement de logiciels embarqués pour les produits électroniques de grande consommation (fours, magnétoscopes, voitures, ...).

Apporter une plus grande facilité au développement de ces applications que lors de l'utilisation de plateformes de développement plus classiques.

Caractéristiques principales

  • portable,
  • facile à utiliser,
  • produisant un code compact.

Réorientation en cours de route

Ces caractéristiques sont intéressantes dans le cadre du déploiement d'applications pour les technologies Internet:

  • portabilité pour l'exécution sur des machines de types différents (PC, Mac, stations UNIX, PDA, téléphones mobiles, ...),

  • facilité de développement via des méthodes modernes d'analyse et de conception informatique,

  • code compacte pour réaliser des économies de bande passante sur les réseaux (les téléchargements sont plus rapides),

  • existence de fonctions bas-niveau pour la gestion des réseaux

  • existence de contrôles de la sécurité.

-> Ces caractéristiques ont conduit Java à s'implanter en tant que plateforme de développement pour Internet/Intranet:

  • Web,
  • Serveurs d'applications,
  • ...

Historique

1990 : Début du développement par Sun Microsystems.

Fin 1994 : Naissance du premier navigateur Internet acceptant d'exécuter des programmes ("applets") conçus en Java: HotJava de Sun Microsystems.

Mai 1995 : Présentation officielle de Java et HotJava.

Janvier 1996 : Netscape Communications Corporation ajoute les spécifications Java/Javascript à son navigateur Internet Netscape Navigator 2 -> possibilité d'exécution d'applets Java.

Mars 1996 : Kit de développement Java (JDK, Java Development Kit) en version 1.0 en téléchargement libre et gratuit sur le site Web de Sun Microsystems.

Septembre 1996 : Microsoft supporte à son tour Java sur Internet Explorer 3.

Juillet 1997 : Distribution de la version 1.1 de Java et de son kit de développement.

Décembre 1998 : Distribution de la version 1.2: "Java 2".

La version actuelle de Java est encore Java 2. Le JDK est en version 1.4.

En conclusion, actuellement, seuls les aspects logiciels ont connus un réel succès à travers le développement du WEB et l'intégration de la technologie Java au sein des navigateurs Internet.

Java embarqué et les puces Java sont encore des technologies de laboratoire.

Quelques exemples

  • ...

Structure

L'environnement Java est constitué de différents éléments:

  • un langage de programmation permettant le développement des programmes,

  • des composants préprogrammés (API Java, Application Programming Interface) utilisables par les développeurs pour réaliser plus simplement certaines opérations,

  • un compilateur (javac) pour compiler les "sources" Java de manière à les rendre exécutables sur une plateforme,

  • des programmes destinés à exécuter les applications écrites en java ayant été compilées (machines virtuelles Java, JVM) (Java, Appletviewer),

  • différents utilitaires:
    • debugger,
    • gestionnaire de documentation,
    • ...
  • ...

Caractéristiques du langage informatique Java

Programmation orientée objet ->

  • classes et objets instanciant ces classes,
  • héritage entre classes,
  • interfaces,
  • polymorphisme,
  • ...

Syntaxe très proche de celle du C++ (elle-même inspirée du C), mais en plus simple:

  • pas d'héritage multiple,
  • pas de surcharge des opérateurs,
  • pas de gestion explicite de l'emploi de la mémoire (ramasse miettes automatique),
  • généralisation masquée de la notion de pointeur,
  • ...

Compilation Java

Le programmeur écrit des fichiers sources (qui contiennent et décrivent des classes). Il leurs donne l'extension ".java". Il peut utiliser l'API Java pour faciliter son travail en utilisant des classes déjà écrites.

Ces fichiers sources sont compilés au moyen du compilateur javac pour obtenir des fichiers portant l'extension ".class".

Ces fichiers ne sont pas des exécutables au sens classique car ils sont indépendants:

  • de la machine de travail ayant réalisé la compilation,
  • de la machine cible sur laquelle sera réalisée l'exécution,

et ne dépendent que de la version de l'API Java utilisée.

Ces fichiers sont constitués d'un code intermédiaire appelé bytecode.

Une application peut être composée de un ou plusieurs fichiers .class. Il n'y a pas d'édition de liens et donc pas d'exécutable au sens classique du terme.

Pour gérer un projet comportant plusieurs classes, chacune d'elles peut être, dans une certaine mesure (gestion automatique des dépendances entre classes), compilée indépendamment des autres et être substituée à la version précédente.

Exécution d'un programme Java

Sur la plateforme à sa disposition, l'utilisateur lance un programme spécifique (une JVM, Java Virtual Machine ou JRE, Java Runtime Environment) destiné à exécuter les fichiers .class constituant l'application.

Ce programme transforme à la volée en assembleur et appels système spécifiques à la plateforme d'exécution le bytecode contenu dans les fichiers .class et exécute les instructions assembleur ainsi obtenues. On dit qu'il y a "interprètation" du pseudo-code.

Le rôle d'une JVM consiste à réaliser l'interface entre l'ordinateur (le système d'exploitation de l'ordinateur et son processeur) et les fichiers bytecode .class qui sont eux indépendants de l'ordinateur. Dans une architecture classique le source est compilé directement en assembleur et fournit donc un résultat spécifique à la plateforme cible.

Architecture classique

Architecture Java

Les JVM (Java Virtual Machine)

Systèmes d'exploitation supportés:

  • Par Sun Microsystems: Sun Solaris 2.3 et +, Windows 3.1, Windows 95, Windows 98, Windows 98 Me, Windows NT, Windows 2000, Windows XP, Linux.

  • Par des éditeurs tiers: OS/2, OS400, Aix, Irix, Unixware 2.0, HP/UX, MVS, Mac OS 7.5 et 8 pour les PowerMacs, 68020, 68030, ...

Navigateurs Internet supportés:

  • Netscape Navigator 2 et +,
  • Internet Explorer 3 et +,
  • Sun HotJava,
  • ...

ATTENTION, si toutes ces JVM supportent globalement sans problème le langage Java ainsi que l'API 1.0, certaines vont plus loin et supportent les versions 1.1, 1.2, 1.3 ou 1.4 dans leurs différentes évolutions. Une JVM 1.4 exécutera l'API 1.0 mais une JVM 1.0 n'exécutera pas d'API 1.4 (compatibilité ascendante).

L'API Java

Elle apporte le support des fonctionnalités suivantes:

  • interface utilisateur (AWT, Swings),
  • communication sur le réseau (Net),
  • gestion des aspects multimédia (images, sons, images animées, 3D, ...)
  • structures de données élaborées (vecteurs, listes, tables de haschage, ...),
  • ...

Les applications Java

Il existe deux types d'application en Java:

  • les applications,
  • les applets.

Les applications sont des programmes conçus pour être exécutés dans des JVM fonctionnant directement sous un système d'exploitation.

Les applets sont des programmes conçus pour être exécutés dans les JVM intégrées aux navigateurs WEB et s'appuyant sur le contexte d'exécution de ceux-ci. Les applets sont intégrées au sein des pages WEB. Les fichiers .class qui les représentent sont stockées sur le même site WEB. Ces classes sont téléchargées automatiquement par le navigateur par l'intermédiaire du réseau pour enfin être exécutées dans le navigateur.

Exemple de fichier html intégrant une applet

<applet width="300" height="20" code="Exemple1.class"> Votre navigateur ne prend pas en charge Java </applet>

Java, pour quoi faire?

Fonctionnalités

  • langage de programmation complet

  • support d'une interface utilisateur

  • support du son

  • support de l'affichage d'images

  • support des connections internet bas niveau (sockets, datagramme, ...)

  • support des connections internet haut niveau (URL)

  • connectivité à des bases de données (JDBC)

  • support des objets distribués (RMI, Corba)

  • ...

En conclusion

Tout ce qui peut être fait avec un langage de programmation classique peut être fait en Java.

Faut-il se lancer dans Java? Si oui, à quel prix.

Java ne coute rien, les JDK et les JVM sont gratuits.

Certains éditeurs commercialisent des environnements de développement intégrés. Les principaux sont:

  • Visual J++ de Microsoft,
  • Visual Café de Symantec,
  • JBuilder d'Inprise (Borland),
  • Visual Age d'IBM.

Quand employer Java?

Une réponse prudente consiste à dire "Quand un autre produit ou une autre technologie ne fait pas les choses mieux, plus simplement ou plus rapidement".

Il existe un grand nombre de produits ou technologies ayant pour but la réalisation de sites WEB élaborés:

  • Macromedia Flash,
  • Javascript,
  • ASP,
  • PHP,
  • Perl,
  • Scripts CGI,
  • ...

Les fonctionnalités apportées par ces produits sont multiples et difficilement énumérables exhaustivement. Ils procurent toutefois deux fonctionnalités principales:

  • la production de page WEB dynamiques,

  • l'exécution de "programmes" au sein de page WEB statiques.

Dans ce cadre, la limitation la plus importante de Java est certainement qu'il n'est pas conçu pour créer du HTML dynamique (conception d'une page WEB à partir d'informations et affichage de cette page sur l'écran du navigateur client).

Les pages visualisées sont statiques. Ce sont les applets qu'elles contiennent qui réalisent les traitements particuliers désirés.

Les points forts de Java sont:

  • Les possibilités de la programmation orientée objet

    • programmation plus simple

    • réutilisabilité du code

  • La connectivité

    • réalisation simplifiée de programmes communiquant

  • La puissance de l'API

    • plusieurs milliers de classes diverses

  • Le déploiement des applications sous forme d'applets

    • Elles sont stockées sur un serveur WEB et chargées à la demande sur les postes clients
      -> pas de stockage sur ces postes,
      -> économie de place,
      -> facilité de la maintenance.

  • La portabilité

    • le bytecode est sensé s'exécuter avec les mêmes résultats sur toute JVM de version compatible.

  • L'exécution des applets sur les postes clients

    • Les applets sont téléchargées puis exécutées sur les postes clients
      -> Ce sont ces postes qui travaillent et pas les serveurs WEB comme avec d'autres technologies.

Les points faibles de Java sont:

  • L'absence d'HTML dynamique.

  • La necessité de devoir maîtriser la programmation orientée objet

    • Pour un débutant complet, Java, comme tout langage de programmation, est très cher par le temps nécessaire à son apprentissage.

    Cet argument est tempéré par le fait que, comparativement à d'autres langages de programmation (Pascal, C, C++, ...), Java est assez simple à prendre en mains.

    Pour une personne ayant des connaissances en programmation, le passage à Java sera généralement assez aisé. C'est particulièrement le cas pour la conversion depuis C, C++ car Java en est syntaxiquement très proche.

    • Un autre aspect est l'apprentissage de l'API Java (quelques dizaines de classes en Java 1.0, plusieurs centaines en Java 1.1, plusieurs milliers en Java 2).

  • Une productivité parfois assez faible

    • Il est fréquent d'avoir à écrire des portions de code importantes pour seulement résoudre des problèmes "simples".

  • La lenteur à l'exécution

    • De 2 à 20 fois moins rapide qu'un programme C équivalent.

  • La charge du réseau et des serveurs

    • Le téléchargement des classes sur le réseau peut surcharger les liens réseaux et les serveurs WEB.

  • La gestion des versions

    • Il est parfois difficile de jongler entre les versions de Java et les versions de JVM.
      -> La JVM devrait toujours avoir une version supérieure à la version de Java utilisée lors du développement.
      -> Même si on développe sur un JDK d'une version supérieur à la version de Java cible, on utilise uniquement les classes et méthodes de l'API de celle-ci.

Les Applets Java

Intégration d'une Applet au sein d'une page WEB

Deux techniques possibles pour intégrer une applet dans une page WEB via les tags:

  • <applet> : Exécution de l'applet au sein de la machine virtuelle Java installée avec le navigateur -> installation de base mais problème de versions.

  • <object> et <embed>: Exécution de l'applet au sein de la machine virtuelle Java installée avec le système d'exploitation (JRE, Plug'in) -> résolution du problème de version, mais double installation sur le client (Navigateur + JRE).

Le tag applet

Reconnu tant par Internet Explorer que Netscape Navigator.

<APPLET CODE="class file" Fichier .class contenant l'applet
CODEBASE="path" Chemin vers le fichier class sur le site
ALIGN=alignment Alignement
WIDTH=nnn Largeur de l'empreinte dans la page web
HEIGHT=mmm Hauteur de l'empreinte dans la page web
VSPACE=xxx Espacement vertical autour de l'applet
HSPACE=yyy> Espacement horizontal autour de l'applet
<PARAM NAME="variable" nom d'un paramètre transmis à l'applet
VALUE="value"> valeur du paramètre transmis à l'applet
Text not displayed Texte affiché si l'applet ne peut pas être utilisée
</APPLET>

Exemple  : <applet width="300" height="20" code="Exemple1.class"> <PARAM NAME="VITESSE" VALUE="50"> Votre navigateur ne prend pas en charge Java </applet>

Les tags object et embed

Tag object reconnu par Internet Explorer

Tag embed reconnu par Netscape Navigator.

Tags utilisés pour afficher différents documents dans des pages Web via des plug'in.

Le tag embed

<EMBED CODE="class file" Fichier .class contenant l'applet
WIDTH=nnn Largeur de l'empreinte dans la page web
HEIGHT=mmm Hauteur de l'empreinte dans la page web
PARAM=VALEUR> Paramètre et valeur du paramètre


Exemple:

  <embed
  CODE="SimpleFog.class"
  WIDTH="300"
  HEIGHT="250"
  type="application/x-java-applet;version=1.3"
  scriptable="false"
  pluginspage="http://java.sun.com/products/
                     plugin/1.3/plugin-install.html">

Le tag object

<OBJECT classid="xxx" Identificateur d'implantation
codebase="yyy" URL d'origine de l'implantation
WIDTH=nnn Largeur de l'empreinte dans la page web
HEIGHT=mmm> Hauteur de l'empreinte dans la page web
<PARAM NAME="variable" nom d'un paramètre transmis à l'applet
VALUE="value"> valeur du paramètre transmis à l'applet
Text not displayed Texte affiché si l'applet ne peut pas être utilisée
</OBJECT>


Exemple:

<object
  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
  WIDTH="300"
  HEIGHT="250"
  codebase="http://java.sun.com/products/plugin/1.3/
                  jinstall-13-win32.cab#Version=1,3,0,0">
  <param name="CODE" value="Exemple1.class">
  <param name="type" value="application/x-java-applet;
                            version=1.3">
  <param name="scriptable" value="false">
  Votre systeme n'a pas de Plug'in Java
</object>

Composition entre les deux tags

Exemple:

<object
  classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
  WIDTH="300"
  HEIGHT="20"
  codebase="http://java.sun.com/products/plugin/1.3/
                  jinstall-13-win32.cab#Version=1,3,0,0">
  <param name="CODE" value="Exemple1.class">
  <param name="type" value="application/x-java-applet;
                            version=1.3">
  <param name="scriptable" value="false">
  <embed type="application/x-java-applet;version=1.3"
         CODE="SimpleFog.class"
         WIDTH="300"
         HEIGHT="20"
         scriptable="false"
         pluginspage="http://java.sun.com/
                            products/plugin/1.3/
                            plugin-install.html">
</object>

Le type MIME application/x-java-applet est le type des fichiers .class.

Ecriture d'une Applet

Exemple 1: Une Applet toute simple

import java.applet.Applet;
import java.awt.*;
import java.lang.*;

public class Ex1 extends Applet{

  public void init() {
    setBackground(Color.white);
  }

  public void paint(Graphics g) {
    g.drawRect(5,5,200,3);
    g.drawString("Hello",5,10);
  }
}

Les directives import permettent la reconnaissances des classes, méthodes, ... de l'API Java.

La méthode init est appelée une fois au lancement de l'Applet.

La méthode paint est appelée chaque fois que Java détecte que l'Applet doit être dessinée. L'objet Graphics obtenu en paramètre est utilisé pour les opérations de dessin.

Exercice

A partir de l'exemple précédent, on souhaite programmer une page Web faisant appel à une Applet affichant 5 rectangles de 70 pixels de haut et 40 pixels de large espacés de 5 pixels.

Exemple 2: Accès au site source de l'Applet pour le téléchargement WEB d'un fichier texte. Récupération d'un paramètre depuis la page HTML source.

import java.applet.Applet;
import java.awt.*;
import java.lang.*;
import java.net.*;
import java.io.*;

public class Ex2 extends Applet{
  List lst = new List();

  public void init() {
    setLayout(new BorderLayout());
    add("Center",lst);
    setBackground(Color.white);
    URL url = getCodeBase();
    try {
      String filename = getParameter("FILENAME");
      String adresse = url+filename ;
      URL u1 = new URL(adresse);
      try {
        InputStream is = u1.openStream() ;
        BufferedReader d;
        d = new BufferedReader(new InputStreamReader(is));
        boolean bRun = true;
        while (bRun) {
          try {
            String s = d.readLine();
            if ( s == null )
              bRun = false;
              else
              lst.add(s); }
          catch( IOException ioe2 ) { } } }
      catch ( IOException ioe ) { } }
    catch (MalformedURLException e) { }
  }
}

La méthode init est appelée une fois au lancement de l'Applet. Elle crée une List lst et l'insère au centre du BorderLayout lui-même inséré dans l'Applet pour que lst occupe l'intégralité de l'espace d'affichage disponible.

Via la méthode getDocumentBase, on récupère l'URL de base du répertoire d'où à été téléchargée l'Applet.

Via la méthode getParameter, on récupère une chaîne de caractères qui contient la valeur du paramètre recherché (tous deux issus de la page Web origine).

On reconstruit ensuite (avec l'URL de base et le paramètre) l'URL du fichier texte qui sera téléchargé. Celui-ci est ouvert via une InputStream transformée en un InputStreamReader puis en un BufferedReader qui autorise la lecture ligne par ligne via la méthode readLine. Ceci est réalisé tant que la String s rendue est différente de null. Si elle l'est, elle est ajoutée dans lst.

Différents try - catch permettent de gérer les éventuelles erreurs (Exception) pouvant arriver au cours de l'exécution de l'Applet.

Exercice

A partir des deux exemples précédents, on souhaite programmer une page Web faisant appel à 2 Applets simultanées utilisant la même classe mais avec des paramètres différents.

La classe Applet devra réaliser l'affichage de n lignes de m cercles de rayon r accolés les uns aux autres. Les paramètres n, m et r sont obtenus par getParameter.  La première Applet devra afficher 5 lignes de 20 cercles de 15 pixels de rayon. La seconde Applet devra afficher 10 lignes de 15 cercles de 20 pixels de rayon.

Horizontale.gif (2348 octets)

Conçu pour être visualisé au moyen de Netscape Navigator
ou Internet Explorer
avec le Plug'in Java de Sun
pour les applets Java3D

Horizontale.gif (2348 octets)

Remarques, erreurs
nicolas.janey@univ-fcomte.fr

Horizontale.gif (2348 octets)