 |
 |
 |
1) Introduction sur les « objets » |
|
 |
|
Texte original |
 |
Traducteur :
Jérome Quelin |
|
 |
|
 |
 |
 |
 |
 |
 |
|
 |
|
 |
 |
 |
Java’s threading is built into the
language, which makes a complicated subject much simpler. The threading is
supported on an object level, so one thread of execution is represented by one
object. Java also provides limited resource locking. It can lock the memory of
any object (which is, after all, one kind of shared resource) so that only one
thread can use it at a time. This is accomplished with the
synchronized keyword. Other types of resources
must be locked explicitly by the programmer, typically by creating an object to
represent the lock that all threads must check before accessing that
resource.
|
 |
Le multithreading Java est intégré au langage, ce qui simplifie grandement
ce sujet compliqué. Le multithreading est supporté au niveau de l'objet, donc un thread d'exécution
est représenté par un objet. Java fournit aussi des mécanismes limités de verrouillage de
ressources. Il peut verrouiller la mémoire de n'importe quel objet (qui n'est, après tout, qu'un
type de ressource partagée) de manière à ce qu'un seul thread puisse l'utiliser à un moment donné.
Ceci est réalisé grâce au mot clef synchronized. D'autres types de
ressources doivent être verrouillé explicitement par le programmeur, typiquement en créant un objet
qui représente un verrou que tous les threads doivent vérifier avant d'accéder à cette
ressource.
|
 |
 |
 |
Persistence
|
 |
Persistance
|
 |
 |
 |
When you create an object, it exists for
as long as you need it, but under no circumstances does it exist when the
program terminates. While this makes sense at first, there are situations in
which it would be incredibly useful if an object could exist and hold its
information even while the program wasn’t running. Then the next time you
started the program, the object would be there and it would have the same
information it had the previous time the program was running. Of course, you can
get a similar effect by writing the information to a file or to a database, but
in the spirit of making everything an object it would be quite convenient to be
able to declare an object persistent and have all the details taken care of for
you.
|
 |
Quand un objet est créé, il existe aussi longtemps qu'on en a besoin,
mais en aucun cas il continue d'exister après que le programme se termine. Bien que cela semble
logique de prime abord, il existe des situations où il serait très pratique si un objet pouvait
continuer d'exister et garder son information même quand le programme ne tourne plus. A l'exécution
suivante du programme, l'objet serait toujours là et il aurait la même information dont il
disposait dans la session précédente. Bien sûr, on peut obtenir ce comportement en écrivant
l'information dans un fichier ou une base de données, mais dans l'esprit du tout objet, il serait
pratique d'être capable de déclarer un objet persistant et que tous les détails soient pris en
charge.
|
 |
 |
 |
Java provides support for
“lightweight persistence,” which means that you can easily store
objects on disk and later retrieve them. The reason it’s
“lightweight” is that you’re still forced to make explicit
calls to do the storage and retrieval. In addition, JavaSpaces (described in
Chapter 15) provide for a kind of persistent storage of objects. In some future
release more complete support for persistence might
appear.
|
 |
Java fournit un support pour la « persistance légère », qui
signifie qu'on peut facilement stocker des objets sur disque et les récupérer plus tard. La raison
pour laquelle on parle de « persistance légère » est qu'on est toujours obligé de faire
des appels explicites pour le stockage et la récupération. De plus, JavaSpaces (décrit au Chapitre
15) fournit un type de stockage persistant des objets. Un support plus complet de la persistance
peut être amené à apparaître dans de futures versions.
|
 |
 |
 |
Java and the Internet
|
 |
Java et l'Internet
|
 |
 |
 |
If Java is, in fact, yet another computer
programming language, you may question why it is so important and why it is
being promoted as a revolutionary step in computer programming. The answer
isn’t immediately obvious if you’re coming from a traditional
programming perspective. Although Java is very useful for solving traditional
stand-alone programming problems, it is also important because it will solve
programming problems on the World Wide
Web.
|
 |
Java n'étant qu'un autre langage de programmation, on peut se demander
pourquoi il est si important et pourquoi il est présenté comme une étape révolutionnaire de la
programmation. La réponse n'est pas immédiate si on se place du point de vue de la programmation
classique. Bien que Java soit très pratique pour résoudre des problèmes traditionnels, il est aussi
important car il permet de résoudre des problèmes liés au web.
|
 |
 |
 |
What is the Web?
|
 |
Qu'est-ce que le Web ?
|
 |
 |
 |
The Web can seem a bit of a mystery at
first, with all this talk of “surfing,” “presence,” and
“home pages.” There has even been a growing reaction against
“Internet-mania,” questioning the economic value and outcome of such
a sweeping movement. It’s helpful to step back and see what it really is,
but to do this you must understand client/server systems, another aspect of
computing that’s full of confusing issues.
|
 |
Le Web peut sembler un peu mystérieux au début, avec tout ce vocabulaire de
« surf », « page personnelles », etc... Il y a même eu une réaction importante
contre cette « Internet-mania », se questionnant sur la valeur économique et les revenus
d'un tel engouement. Il peut être utile de revenir en arrière et voir de quoi il retourne, mais
auparavant il faut comprendre le modèle client/serveur, un autre aspect de l'informatique
relativement confus.
|
 |
 |
 |
Client/Server computing
|
 |
Le concept Client/Serveur
|
 |
 |
 |
The primary idea of a client/server
system is that you have a central repository of information—some kind of
data, often in a database—that you want to distribute on demand to some
set of people or machines. A key to the client/server concept is that the
repository of information is centrally located so that it can be changed and so
that those changes will propagate out to the information consumers. Taken
together, the information repository, the software that distributes the
information, and the machine(s) where the information and software reside is
called the server. The software that resides on the remote machine, communicates
with the server, fetches the information, processes it, and then displays it on
the remote machine is called the client.
|
 |
L'idée primitive d'un système client/serveur est qu'on dispose d'un dépôt
centralisé de l'information - souvent dans une base de données - qu'on veut distribuer à un
ensemble de personnes ou de machines. L'un des concepts majeurs du client/serveur est que le dépôt
d'informations est centralisé afin qu'elles puissent être changées facilement et que ces
changements se propagent jusqu'aux consommateurs de ces informations. Pris ensemble, le dépôt
d'informations, le programme qui distribue l'information et la (les) machine(s) où résident
informations et programme sont appelés le serveur. Le programme qui réside sur la machine distante,
communique avec le serveur, récupère l'information, la traite et l'affiche sur la machine distante
est appelé le client.
|
 |
 |
 |
The basic concept of client/server
computing, then, is not so complicated. The problems arise because you have a
single server trying to serve many clients at once. Generally, a database
management system is involved so the designer “balances” the layout
of data into tables for optimal use. In addition, systems often allow a client
to insert new information into a server. This means you must ensure that one
client’s new data doesn’t walk over another client’s new data,
or that data isn’t lost in the process of adding it to the database. (This
is called transaction processing.) As client software changes, it must be built,
debugged, and installed on the client machines, which turns out to be more
complicated and expensive than you might think. It’s especially
problematic to support multiple types of computers and operating systems.
Finally, there’s the all-important performance issue: you might have
hundreds of clients making requests of your server at any one time, and so any
small delay is crucial. To minimize latency, programmers work hard to offload
processing tasks, often to the client machine, but sometimes to other machines
at the server site, using so-called middleware. (Middleware is also used
to improve maintainability.)
|
 |
Le concept de base du client/serveur n'est donc pas si compliqué. Les
problèmes surviennent car un seul serveur doit servir de nombreux clients à la fois. Généralement,
un système de gestion de base de données est impliqué afin que le concepteur répartisse les
informations dans des tables pour une utilisation optimale. De plus, les systèmes permettent
généralement aux utilisateurs d'ajouter de nouvelles informations au serveur. Cela veut dire qu'ils
doivent s'assurer que les nouvelles données d'un client ne contredisent pas les nouvelles données
d'un autre client, ou que ces nouvelles données ne soient pas perdues pendant leur inscription dans
la base de données (cela fait appel aux transactions). Comme les programmes d'application client
changent, ils doivent être créés, débuggués, et installés sur les machines clientes, ce qui se
révèle plus compliqué et onéreux que ce à quoi on pourrait s'attendre. C'est particulièrement
problématique dans les environnements hétérogènes comprenant différents types de matériels et de
systèmes d'exploitation. Enfin, se pose toujours le problème des performances : on peut se
retrouver avec des centaines de clients exécutant des requêtes en même temps, et donc un petit
délai multiplié par le nombre de clients peut être particulièrement pénalisant. Pour minimiser les
temps de latence, les programmeurs travaillent dur pour réduire la charge de travail des tâches
incriminées, parfois jusque sur les machines clientes, mais aussi sur d'autres machines du site
serveur, utilisant ce qu'on appelle le middleware (le middleware est aussi utilisé pour
améliorer la maintenabilité).
|
 |
 |
 |
The simple idea of distributing
information to people has so many layers of complexity in implementing it that
the whole problem can seem hopelessly enigmatic. And yet it’s crucial:
client/server computing accounts for roughly half of all programming activities.
It’s responsible for everything from taking orders and credit-card
transactions to the distribution of any kind of data—stock market,
scientific, government, you name it. What we’ve come up with in the past
is individual solutions to individual problems, inventing a new solution each
time. These were hard to create and hard to use, and the user had to learn a new
interface for each one. The entire client/server problem needs to be solved in a
big way.
|
 |
L'idée relativement simple de distribuer de l'information aux gens a de si
nombreux niveaux de complexité dans son implémentation que le problème peut sembler désespérément
insoluble. Et pourtant il est crucial : le client/serveur compte pour environ la moitié des
activités de programmation. On le retrouve pour tout ce qui va des transactions de cartes de crédit
à la distribution de n'importe quel type de données - économique, scientifique, gouvernementale, il
suffit de choisir. Dans le passé, on en est arrivé à des solutions particulières aux problèmes
particuliers, obligeant à réinventer une solution à chaque fois. Elles étaient difficiles à créer
et à utiliser, et l'utilisateur devait apprendre une nouvelle interface pour chacune. Le problème
devait être repris dans son ensemble.
|
 |
 |
 |
The Web as a giant server
|
 |
Le Web en tant que serveur géant
|
 |
 |
 |
The Web is actually one giant
client/server system. It’s a bit worse than that, since you have all the
servers and clients coexisting on a single network at once. You don’t need
to know that, since all you care about is connecting to and interacting with one
server at a time (even though you might be hopping around the world in your
search for the correct server).
|
 |
Le Web est en fait un système client/serveur géant. C'est encore pire que
ça, puisque tous les serveurs et les clients coexistent en même temps sur un seul réseau. Vous
n'avez pas besoin de le savoir d'ailleurs, car tout ce dont vous vous souciez est de vous connecter
et d'interagir avec un serveur à la fois (même si vous devez parcourir le monde pour trouver le bon
serveur).
|
 |
 |
 |
Initially it was a simple one-way
process. You made a request of a server and it handed you a file, which your
machine’s browser software (i.e., the client) would interpret by
formatting onto your local machine. But in short order people began wanting to
do more than just deliver pages from a server. They wanted full client/server
capability so that the client could feed information back to the server, for
example, to do database lookups on the server, to add new information to the
server, or to place an order (which required more security than the original
systems offered). These are the changes we’ve been seeing in the
development of the Web.
|
 |
Initialement, c'était un processus à une étape. On faisait une requête à un
serveur qui renvoyait un fichier, que le logiciel (ie, le client) interprétait en le formatant sur
la machine locale. Mais les gens en voulurent plus : afficher des pages d'un serveur ne leur
suffisait plus. Ils voulaient bénéficier de toutes les fonctionnalités du client/serveur afin que
le client puisse renvoyer des informations au serveur, par exemple pour faire des requêtes précises
dans la base de données, ajouter de nouvelles informations au serveur, ou passer des commandes (ce
qui nécessitait plus de sécurité que ce que le système primitif offrait). Nous assistons à ces
changements dans le développement du Web.
|
 |
 |
 |
The Web browser was a big step forward:
the concept that one piece of information could be displayed on any type of
computer without change. However, browsers were still rather primitive and
rapidly bogged down by the demands placed on them. They weren’t
particularly interactive, and tended to clog up both the server and the Internet
because any time you needed to do something that required programming you had to
send information back to the server to be processed. It could take many seconds
or minutes to find out you had misspelled something in your request. Since the
browser was just a viewer it couldn’t perform even the simplest computing
tasks. (On the other hand, it was safe, since it couldn’t execute any
programs on your local machine that might contain bugs or
viruses.)
|
 |
Le browser Web fut un grand bond en avant en avançant le concept qu'une
information pouvait être affichée indifféremment sur n'importe quel ordinateur. Cependant, les
browsers étaient relativement primitifs et ne remplissaient pas toutes les demandes des
utilisateurs. Ils n'étaient pas particulièrement interactifs, et avaient tendance à saturer le
serveur et l'Internet car à chaque fois qu'on avait besoin de faire quelque chose qui requérait un
traitement il fallait renvoyer les informations au serveur pour que celui-ci les traite. Cela
pouvait prendre plusieurs secondes ou minutes pour finalement se rendre compte qu'on avait fait une
faute de frappe dans la requête. Comme le browser n'était qu'un afficheur, il ne pouvait pas
effectuer le moindre traitement (d'un autre côté, cela était beaucoup plus sûr, car il ne pouvait
pas de ce fait exécuter sur la machine locale de programmes contenant des bugs ou des
virus).
|
 |
 |
 |
To solve this problem, different
approaches have been taken. To begin with, graphics standards have been enhanced
to allow better animation and video within browsers. The remainder of the
problem can be solved only by incorporating the ability to run programs on the
client end, under the browser. This is called client-side
programming.
|
 |
Pour résoudre ce problème, différentes solutions ont été approchées. En
commençant par les standards graphiques qui ont été améliorés pour mettre des animations et de la
vidéo dans les browsers. Le reste du problème ne peut être solutionné qu'en incorporant la
possibilité d'exécuter des programmes sur le client, dans le browser. C'est ce qu'on appelle la
programmation côté client.
|
 |
 |
 |
Client-side programming
|
 |
La programmation côté client
|
 |
 |
 |
The Web’s initial server-browser
design provided for interactive content, but the interactivity was completely
provided by the server. The server produced static pages for the client browser,
which would simply interpret and display them. Basic HTML contains simple
mechanisms for data gathering: text-entry boxes, check boxes, radio boxes, lists
and drop-down lists, as well as a button that can only be programmed to reset
the data on the form or “submit” the data on the form back to the
server. This submission passes through the Common Gateway Interface (CGI)
provided on all Web servers. The text within the submission tells CGI what to do
with it. The most common action is to run a program located on the server in a
directory that’s typically called “cgi-bin.” (If you watch the
address window at the top of your browser when you push a button on a Web page,
you can sometimes see “cgi-bin” within all the gobbledygook there.)
These programs can be written in most languages. Perl is a common choice because
it is designed for text manipulation and is interpreted, so it can be installed
on any server regardless of processor or operating system.
|
 |
Le concept initial du Web (serveur-browser) fournissait un contenu
interactif, mais l'interactivité était uniquement le fait du serveur. Le serveur produisait des
pages statiques pour le browser client, qui ne faisait que les interpréter et les afficher. Le HTML
de base contient des mécanismes simples pour récupérer de l'information : des boîtes de texte,
des cases à cocher, des listes à options et des listes de choix, ainsi qu'un bouton permettant de
réinitialiser le contenu du formulaire ou d'envoyer les données du formulaire au serveur. Cette
soumission de données passe par CGI (Common Gateway Interface), un mécanisme fourni par tous les
serveurs web. Le texte de la soumission indique à CGI quoi faire avec ces données. L'action la plus
commune consiste à exécuter un programme situé sur le serveur dans un répertoire typiquement appelé
« cgi-bin » (si vous regardez l'adresse en haut de votre browser quand vous appuyez sur
un bouton dans une page web, vous verrez certainement « cgi-bin » quelque part au milieu
de tous les caractères). Ces programmes peuvent être écrits dans la plupart des langages. Perl est
souvent préféré car il a été conçu pour la manipulation de texte et est interprété, et peut donc
être installé sur n'importe quel serveur sans tenir compte du matériel ou du système
d'exploitation.
|
 |
 |
 |
Many powerful Web sites today are built
strictly on CGI, and you can in fact do nearly anything with it. However, Web
sites built on CGI programs can rapidly become overly complicated to maintain,
and there is also the problem of response time. The response of a CGI program
depends on how much data must be sent, as well as the load on both the server
and the Internet. (On top of this, starting a CGI program tends to be slow.) The
initial designers of the Web did not foresee how rapidly this bandwidth would be
exhausted for the kinds of applications people developed. For example, any sort
of dynamic graphing is nearly impossible to perform with consistency because a
GIF file must be created and moved from the server to the client for each
version of the graph. And you’ve no doubt had direct experience with
something as simple as validating the data on an input form. You press the
submit button on a page; the data is shipped back to the server; the server
starts a CGI program that discovers an error, formats an HTML page informing you
of the error, and then sends the page back to you; you must then back up a page
and try again. Not only is this slow, it’s inelegant.
|
 |
Beaucoup de sites Web populaires sont aujourd'hui bâtis strictement sur
CGI, et de fait on peut faire ce qu'on veut avec. Cependant, les sites web bâtis sur des programmes
CGI peuvent rapidement devenir ingérables et trop compliqués à maintenir, et se pose de plus le
problème du temps de réponse. La réponse d'un programme CGI dépend de la quantité de données à
envoyer, ainsi que de la charge du serveur et de l'Internet (de plus, le démarrage d'un programme
CGI a tendance à être long). Les concepteurs du Web n'avaient pas prévu que la bande passante
serait trop petite pour le type d'applications que les gens développèrent. Par exemple, tout type
de graphisme dynamique est impossible à réaliser correctement car un fichier GIF doit être créé et
transféré du serveur au client pour chaque version de ce graphe. Et vous avez certainement déjà
fait l'expérience de quelque chose d'aussi simple que la validation de données sur un formulaire.
Vous appuyez sur le bouton « submit » d'une page, les données sont envoyées sur le serveur, le
serveur démarre le programme CGI qui y découvre une erreur, formate une page HTML vous informant de
votre erreur et vous la renvoie ; vous devez alors revenir en arrière d'une page et réessayer.
Non seulement c'est lent et frustrant, mais c'est inélégant.
|
 |
 |
 |
The solution is client-side programming.
Most machines that run Web browsers are powerful engines capable of doing vast
work, and with the original static HTML approach they are sitting there, just
idly waiting for the server to dish up the next page. Client-side programming
means that the Web browser is harnessed to do whatever work it can, and the
result for the user is a much speedier and more interactive experience at your
Web site.
|
 |
La solution est la programmation côté client. La plupart des machines qui
font tourner des browsers Web sont des ordinateurs puissants capables de beaucoup de choses, et
avec l'approche originale du HTML statique, elles ne font qu'attendre que le serveur leur envoie
parcimonieusement la page suivante. La programmation côté client implique que le browser Web prenne
en charge la partie du travail qu'il est capable de traiter, avec comme résultat pour l'utilisateur
une interactivité et une vitesse inégalées.
|
 |
 |
 |
The problem with discussions of
client-side programming is that they aren’t very different from
discussions of programming in general. The parameters are almost the same, but
the platform is different: a Web browser is like a limited operating system. In
the end, you must still program, and this accounts for the dizzying array of
problems and solutions produced by client-side programming. The rest of this
section provides an overview of the issues and approaches in client-side
programming.
|
 |
Les problèmes de la programmation côté client ne sont guère différents des
discussions de la programmation en général. Les paramètres sont quasiment les mêmes, mais la
plateforme est différente : un browser Web est comme un système d'exploitation limité. Au
final, on est toujours obligé de programmer, et ceci explique le nombre de problèmes rencontrés
dans la programmation côté client. Le reste de cette section présente les différentes approches de
la programmation côté client.
|
 |
 |
 |
Plug-ins
|
 |
Les plug-ins
|
 |
 |
 |
One of the most significant steps forward
in client-side programming is the development of the plug-in. This is a way for
a programmer to add new functionality to the browser by downloading a piece of
code that plugs itself into the appropriate spot in the browser. It tells the
browser “from now on you can perform this new activity.” (You need
to download the plug-in only once.) Some fast and powerful behavior is added to
browsers via plug-ins, but writing a plug-in is not a trivial task, and
isn’t something you’d want to do as part of the process of building
a particular site. The value of the plug-in for client-side programming is that
it allows an expert programmer to develop a new language and add that language
to a browser without the permission of the browser manufacturer. Thus, plug-ins
provide a “back door” that allows the creation of new client-side
programming languages (although not all languages are implemented as
plug-ins).
|
 |
L'une des plus importantes avancées en terme de programmation orientée
client a été le développement du plug-in. C'est une façon pour le programmeur d'ajouter de
nouvelles fonctionnalités au browser en téléchargeant une partie de logiciel qui s'enfiche à
l'endroit adéquat dans le browser. Il indique au browser : « à partir de maintenant
tu peux réaliser cette nouvelle opération » (on n'a besoin de télécharger le plug-in qu'une
seule fois). De nouveaux comportements puissants sont donc ajoutés au browser via les plug-ins,
mais écrire un plug-in n'est pas une tâche facile, et ce n'est pas quelque chose qu'on souhaiterait
faire juste pour bâtir un site Web particulier. La valeur d'un plug-in pour la programmation côté
client est qu'il permet à un programmeur expérimenté de développer un nouveau langage et d'intégrer
ce langage au browser sans la permission du distributeur du browser. Ainsi, les plug-ins
fournissent une « porte dérobée » qui permet la création de nouveaux langages de
programmation côté client (bien que tous les langages ne soient pas implémentés en tant que
plug-ins).
|
 |
 |
 |
Scripting languages
|
 |
Les langages de script
|
 |
 |
 |
Plug-ins resulted in an explosion of
scripting languages. With a scripting language you embed the source code for
your client-side program directly into the HTML page, and the plug-in that
interprets that language is automatically activated while the HTML page is being
displayed. Scripting languages tend to be reasonably easy to understand and,
because they are simply text that is part of an HTML page, they load very
quickly as part of the single server hit required to procure that page. The
trade-off is that your code is exposed for everyone to see (and steal).
Generally, however, you aren’t doing amazingly sophisticated things with
scripting languages so this is not too much of a hardship.
|
 |
Les plug-ins ont déclenché une explosion de langages de script. Avec un
langage de script, du code source est intégré directement dans la page HTML, et le plug-in qui
interprète ce langage est automatiquement activé quand le page HTML est affichée. Les langages de
script tendent à être relativement aisés à comprendre ; et parce qu'ils sont du texte faisant
partie de la page HTML, ils se chargent très rapidement dans la même requête nécessaire pour se
procurer la page auprès du serveur. La contrepartie en est que le code est visible pour tout le
monde (qui peut donc le voler). Mais généralement on ne fait pas des choses extraordinairement
sophistiquées avec les langages de script et ce n'est donc pas trop pénalisant.
|
 |
 |
 |
This points out that the scripting
languages used inside Web browsers are really intended to solve specific types
of problems, primarily the creation of richer and more interactive graphical
user interfaces (GUIs). However, a scripting language might solve 80 percent of
the problems encountered in client-side programming. Your problems might very
well fit completely within that 80 percent, and since scripting languages can
allow easier and faster development, you should probably consider a scripting
language before looking at a more involved solution such as Java or ActiveX
programming.
|
 |
Ceci montre que les langages de script utilisés dans les browsers Web sont
vraiment spécifiques à certains types de problèmes, principalement la création d'interfaces
utilisateurs plus riches et attrayantes. Cependant, un langage de script permet de résoudre 80 pour
cent des problèmes rencontrés dans la programmation côté client. La plupart de vos problèmes
devraient se trouver parmi ces 80 pour cent, et puisque les langages de script sont plus faciles à
mettre en oeuvre et permettent un développement plus rapide, vous devriez d'abord vérifier si un
langage de script ne vous suffirait pas avant de vous lancer dans une solution plus complexe telle
que la programmation Java ou ActiveX.
|
 |
 |
 |
The most commonly discussed browser
scripting languages are JavaScript (which has nothing to do with Java;
it’s named that way just to grab some of Java’s marketing momentum),
VBScript (which looks like Visual Basic), and Tcl/Tk, which comes from the
popular cross-platform GUI-building language. There are others out there, and no
doubt more in development.
|
 |
Les langages de script les plus répandus parmi les browsers sont JavaScript
(qui n'a rien à voir avec Java ; le nom a été choisi uniquement pour bénéficier de l'engouement
marketing pour Java du moment), VBScript (qui ressemble à Visual Basic), et Tcl/Tk, qui vient du
fameux langage de construction d'interfaces graphiques. Il y en a d'autres bien sûr, et sans doute
encore plus en développement.
|
 |
 |
 |
JavaScript is probably the most commonly
supported. It comes built into both Netscape Navigator and the Microsoft
Internet Explorer (IE). In addition, there are probably more JavaScript books
available than there are for the other browser languages, and some tools
automatically create pages using JavaScript. However, if you’re already
fluent in Visual Basic or Tcl/Tk, you’ll be more productive using those
scripting languages rather than learning a new one. (You’ll have your
hands full dealing with the Web issues already.)
|
 |
JavaScript est certainement le plus commun d'entre eux. Il est présent dès
l'origine dans Netscape Navigator et Microsoft Internet Explorer (IE). De plus, il y a certainement
plus de livres disponibles sur JavaScript que sur les autres langages, et certains outils créent
automatiquement des pages utilisant JavaScript. Cependant, si vous parlez couramment Visual Basic
ou Tcl/Tk, vous serez certainement plus productif en utilisant ces langages qu'en en apprenant un
nouveau (vous aurez déjà largement de quoi faire avec les problèmes soulevés par le
Web).
|
 |
 |
 |
Java
|
 |
Java
|
 |
 |
 |
If a scripting language can solve 80
percent of the client-side programming problems, what about the other 20
percent—the “really hard stuff?” The most popular solution
today is Java. Not only is it a powerful programming language built to be
secure, cross-platform, and international, but Java is being continually
extended to provide language features and libraries that elegantly handle
problems that are difficult in traditional programming languages, such as
multithreading, database access, network programming, and distributed computing.
Java allows client-side programming via the applet.
|
 |
Si un langage de script peut résoudre 80 pour cent des problèmes de la
programmation côté client, qu'en est-il des 20 pour cent restants ? La solution la plus
populaire aujourd'hui est Java. C'est non seulement un langage de programmation puissant conçu pour
être sur, interplateformes et international, mais Java est continuellement étendu pour fournir un
langage proposant des caractéristiques et des bibliothèques permettant de gérer de manière élégante
des problèmes traditionnellement complexes dans les langages de programmation classiques, tels que
le multithreading, les accès aux bases de données, la programmation réseau, l'informatique répartie
Java permet la programmation côté client via les applets.
|
 |
 |
 |
An applet is a mini-program that will run
only under a Web browser. The applet is downloaded automatically as part of a
Web page (just as, for example, a graphic is automatically downloaded). When the
applet is activated it executes a program. This is part of its beauty—it
provides you with a way to automatically distribute the client software from the
server at the time the user needs the client software, and no sooner. The user
gets the latest version of the client software without fail and without
difficult reinstallation. Because of the way Java is designed, the programmer
needs to create only a single program, and that program automatically works with
all computers that have browsers with built-in Java interpreters. (This safely
includes the vast majority of machines.) Since Java is a full-fledged
programming language, you can do as much work as possible on the client before
and after making requests of the server. For example, you won’t need to
send a request form across the Internet to discover that you’ve gotten a
date or some other parameter wrong, and your client computer can quickly do the
work of plotting data instead of waiting for the server to make a plot and ship
a graphic image back to you. Not only do you get the immediate win of speed and
responsiveness, but the general network traffic and load on servers can be
reduced, preventing the entire Internet from slowing down.
|
 |
Une applet est un mini-programme qui ne tourne que dans un browser Web.
L'applet est téléchargée automatiquement en temps que partie d'une page Web (comme, par exemple,
une image est automatiquement téléchargée). Quand l'applet est activée elle exécute un programme.
Là se trouve la beauté de la chose : cela vous permet de distribuer le logiciel client à
partir du serveur au moment où l'utilisateur en a besoin et pas avant. L'utilisateur récupère
toujours la dernière version en date du logiciel et sans avoir besoin de le réinstaller. De par la
conception même de Java, le programmeur n'a besoin de créer qu'un seul programme, et ce programme
tournera automatiquement sur tous les browsers disposant d'un interpréteur interne (ce qui inclut
la grande majorité des machines). Puisque Java est un langage de programmation complet, on peut
déporter une grande partie des traitements sur le client avant et après avoir envoyé les requêtes
au serveur. Par exemple, une requête comportant une erreur dans une date ou utilisant un mauvais
paramètre n'a plus besoin d'être envoyée sur Internet pour se voir refusée par le serveur ; un
client peut très bien aussi s'occuper de gérer l'affichage d'un nouveau point sur un graphe plutôt
que d'attendre que le serveur ne s'en occupe, crée une nouvelle image et l'envoie au client. On
gagne ainsi non seulement en vitesse et confort d'utilisation, mais le trafic engendré sur le
réseau et la charge résultante sur les serveurs peut être réduite, ce qui est bénéfique pour
l'Internet dans son ensemble.
|
 |
 |
 |
One advantage a Java applet has over a
scripted program is that it’s in compiled form, so the source code
isn’t available to the client. On the other hand, a Java applet can be
decompiled without too much trouble, but hiding your code is often not an
important issue. Two other factors can be important. As you will see later in
this book, a compiled Java applet can comprise many modules and take multiple
server “hits” (accesses) to download. (In Java 1.1 and higher this
is minimized by Java archives, called JAR files, that allow all the required
modules to be packaged together and compressed for a single download.) A
scripted program will just be integrated into the Web page as part of its text
(and will generally be smaller and reduce server hits). This could be important
to the responsiveness of your Web site. Another factor is the all-important
learning curve. Regardless of what you’ve heard, Java is not a trivial
language to learn. If you’re a Visual Basic programmer, moving to VBScript
will be your fastest solution, and since it will probably solve most typical
client/server problems you might be hard pressed to justify learning Java. If
you’re experienced with a scripting language you will certainly benefit
from looking at JavaScript or VBScript before committing to Java, since they
might fit your needs handily and you’ll be more productive
sooner.
|
 |
L'un des avantages qu'une applet Java a sur un programme écrit dans un
langage de script est qu'il est fourni sous une forme précompilée, et donc le code source n'est pas
disponible pour le client. D'un autre côté, une applet Java peut être rétroingéniérée sans trop de
problèmes, mais cacher son code n'est pas souvent une priorité absolue. Deux autres facteurs
peuvent être importants. Comme vous le verrez plus tard dans ce livre, une applet Java compilée
peut comprendre plusieurs modules et nécessiter plusieurs accès au serveur pour être téléchargée (à
partir de Java 1.1 cela est minimisé par les archives Java ou fichiers JAR, qui permettent de
paqueter tous les modules requis ensemble dans un format compressé pour un téléchargement unique).
Un programme scripté sera juste inséré dans le texte de la page Web (et sera généralement plus
petit et réduira le nombre d'accès au serveur). Cela peut être important pour votre site Web. Un
autre facteur à prendre en compte est la courbe d'apprentissage. Indépendamment de tout ce que vous
avez pu entendre, Java n'est pas un langage trivial et facile à apprendre. Si vous avez l'habitude
de programmer en Visual Basic, passer à VBScript sera beaucoup plus rapide et comme cela permet de
résoudre la majorité des problèmes typiques du client/serveur, il pourrait être difficile de
justifier l'investissement de l'apprentissage de Java. Si vous êtes familier avec un langage de
script, vous serez certainement gagnant en vous tournant vers JavaScript ou VBScript avant Java,
car ils peuvent certainement combler vos besoins et vous serez plus productif plus tôt.
|
 |
 |
 |
ActiveX
|
 |
ActiveX
|
 |
 |
 |
To some degree, the competitor to Java is
Microsoft’s ActiveX, although it takes a completely different approach.
ActiveX was originally a Windows-only solution, although it is now being
developed via an independent consortium to become cross-platform. Effectively,
ActiveX says “if your program connects to its environment just so, it can
be dropped into a Web page and run under a browser that supports ActiveX.”
(IE directly supports ActiveX and Netscape does so using a plug-in.) Thus,
ActiveX does not constrain you to a particular language. If, for example,
you’re already an experienced Windows programmer using a language such as
C++, Visual Basic, or Borland’s Delphi, you can create ActiveX components
with almost no changes to your programming knowledge. ActiveX also provides a
path for the use of legacy code in your Web pages.
|
 |
A un certain degré, le compétiteur de Java est ActiveX de Microsoft, bien
qu'il s'appuie sur une approche radicalement différente. ActiveX était au départ une solution
disponible uniquement sur Windows, bien qu'il soit actuellement développé par un consortium
indépendant pour devenir interplateformes. Le concept d'ActiveX clame : « si votre
programme se connecte à son environnement de cette façon, il peut être inséré dans une page Web et
exécuté par un browser qui supporte ActiveX » (IE supporte ActiveX en natif et Netscape
utilise un plug-in). Ainsi, ActiveX ne vous restreint pas à un langage particulier. Si par exemple
vous êtes un programmeur Windows expérimenté utilisant un langage tel que le C++, Visual Basic ou
Delphi de Borland, vous pouvez créer des composants ActiveX sans avoir à tout réapprendre. ActiveX
fournit aussi un mécanisme pour la réutilisation de code dans les pages Web.
|
 |
 |
 |
Security
|
 |
La sécurité
|
 |
 |
 |
Automatically downloading and running
programs across the Internet can sound like a virus-builder’s dream.
ActiveX especially brings up the thorny issue of security in client-side
programming. If you click on a Web site, you might automatically download any
number of things along with the HTML page: GIF files, script code, compiled Java
code, and ActiveX components. Some of these are benign; GIF files can’t do
any harm, and scripting languages are generally limited in what they can do.
Java was also designed to run its applets within a “sandbox” of
safety, which prevents it from writing to disk or accessing memory outside the
sandbox.
|
 |
Le téléchargement automatique et l'exécution de programmes sur Internet
ressemble au rêve d'un concepteur de virus. ActiveX en particulier pose la question épineuse de la
sécurité dans la programmation côté client. Un simple click sur un site Web peut déclencher le
téléchargement d'un certain nombre de fichiers en même temps que la page HTML : des images, du
code scripté, du code Java compilé, et des composants ActiveX. Certains d'entre eux sont sans
importance : les images ne peuvent causer de dommages, et les langages de script sont
généralement limités dans les opérations qu'ils sont capables de faire. Java a été conçu pour
exécuter ses applets à l'intérieur d'un périmètre de sécurité (appelé bac à sable), qui l'empêche
d'aller écrire sur le disque ou d'accéder à la mémoire en dehors de ce périmètre de
sécurité.
|
 |
 |
 |
ActiveX is at the opposite end of the
spectrum. Programming with ActiveX is like programming Windows—you can do
anything you want. So if you click on a page that downloads an ActiveX
component, that component might cause damage to the files on your disk. Of
course, programs that you load onto your computer that are not restricted to
running inside a Web browser can do the same thing. Viruses downloaded from
Bulletin-Board Systems (BBSs) have long been a problem, but the speed of the
Internet amplifies the difficulty.
|
 |
ActiveX se trouve à l'opposé du spectre. Programmer avec ActiveX est comme
programmer sous Windows - on peut faire ce qu'on veut. Donc un composant ActiveX téléchargé en même
temps qu'une page Web peut causer bien des dégâts aux fichiers du disque. Bien sûr, les programmes
téléchargés et exécutés en dehors du browser présentent les mêmes risques. Les virus téléchargés
depuis les BBS ont pendant longtemps été un problème, mais la vitesse obtenue sur Internet accroît
encore les difficultés.
|
 |
 |
 |
The solution seems to be “digital
signatures,” whereby code is verified to show who the author is. This is
based on the idea that a virus works because its creator can be anonymous, so if
you remove the anonymity individuals will be forced to be responsible for their
actions. This seems like a good plan because it allows programs to be much more
functional, and I suspect it will eliminate malicious mischief. If, however, a
program has an unintentional destructive bug it will still cause
problems.
|
 |
La solution semble être les « signatures digitales », où le code
est vérifié pour montrer qui est l'auteur. L'idée est basée sur le fait qu'un virus se propage
parce que son concepteur peut rester anonyme, et si cet anonymat lui est retiré, l'individu devient
responsable de ses actions. Mais si le programme contient un bug fatal bien que non intentionnel
cela pose toujours problème.
|
 |
 |
 |
The Java approach is to prevent these
problems from occurring, via the sandbox. The Java interpreter that lives on
your local Web browser examines the applet for any untoward instructions as the
applet is being loaded. In particular, the applet cannot write files to disk or
erase files (one of the mainstays of viruses). Applets are generally considered
to be safe, and since this is essential for reliable client/server systems, any
bugs in the Java language that allow viruses are rapidly repaired. (It’s
worth noting that the browser software actually enforces these security
restrictions, and some browsers allow you to select different security levels to
provide varying degrees of access to your system.)
|
 |
L'approche de Java est de prévenir ces problèmes via le périmètre de
sécurité. L'interpréteur Java du browser Web examine l'applet pendant son chargement pour y
détecter les instructions interdites. En particulier, les applets ne peuvent écrire sur le disque
ou effacer des fichiers (ce que font la plupart des virus). Les applets sont généralement
considérées comme sûres ; et comme ceci est essentiel pour bénéficier d'un système
client/serveur fiable, les bugs découverts dans Java permettant la création de virus sont très
rapidement corrigés (il est bon de noter que le browser renforce ces restrictions de sécurité, et
que certains d'entre eux permettent de sélectionner différents niveaux de sécurité afin de
permettre différents niveaux d'accès au système).
|
 |
 |
 |
You might be skeptical of this rather
draconian restriction against writing files to your local disk. For example, you
may want to build a local database or save data for later use offline. The
initial vision seemed to be that eventually everyone would get online to do
anything important, but that was soon seen to be impractical (although low-cost
“Internet appliances” might someday satisfy the needs of a
significant segment of users). The solution is the “signed applet”
that uses public-key encryption to verify that an applet does indeed come from
where it claims it does. A signed applet can still trash your disk, but the
theory is that since you can now hold the applet creator accountable they
won’t do vicious things. Java provides a framework for digital signatures
so that you will eventually be able to allow an applet to step outside the
sandbox if necessary.
|
 |
On pourrait s'interroger sur cette restriction draconienne contre les accès
en écriture sur le disque local. Par exemple, on pourrait vouloir construire une base de données
locale ou sauvegarder des données pour un usage futur en mode déconnecté. La vision initiale
obligeait tout le monde à se connecter pour réaliser la moindre opération, mais on s'est vite rendu
compte que cela était impraticable. La solution a été trouvée avec les « applets signées » qui
utilisent le chiffrement avec une clef publique pour vérifier qu'une applet provient bien de là où
elle dit venir. Une applet signée peut toujours endommager vos données et votre ordinateur, mais on
en revient à la théorie selon laquelle la perte de l'anonymat rend le créateur de l'applet
responsable de ses actes, il ne fera donc rien de préjudiciable. Java fournit un environnement pour
les signatures digitales afin de permettre à une applet de sortir du périmètre de sécurité si
besoin est.
|
 |
 |
 |
Digital signatures have missed an
important issue, which is the speed that people move around on the Internet. If
you download a buggy program and it does something untoward, how long will it be
before you discover the damage? It could be days or even weeks. By then, how
will you track down the program that’s done it? And what good will it do
you at that point?
|
 |
Les signatures digitales ont toutefois oublié un paramètre important, qui
est la vitesse à laquelle les gens bougent sur Internet. Si on télécharge un programme buggué et
qu'il accomplisse ses méfaits, combien de temps se passera-t-il avant que les dommages ne soient
découverts ? Cela peut se compter en jours ou en semaines. Et alors, comment retrouver le
programme qui les a causés ? Et en quoi cela vous aidera à ce point ?
|
 |
 |
 |
 |
 |
 |
 |
 |
|
 |
 |
 |
|
 |