Présentation des servlets et des JavaServer Pages

Transcription

Présentation des servlets et des JavaServer Pages
1
Présentation des servlets
et des JavaServer Pages
Au sommaire de ce chapitre
✔ Qu’est-ce qu’un servlet
✔ Quand et pourquoi peut-on utiliser des servlets
✔ Que sont les JavaServer Pages
✔ Quand et pourquoi peut-on utiliser des JSP
✔ Se procurer les logiciels de servlets et de JSP
✔ Installation et configuration des logiciels
Ce chapitre constitue une présentation rapide des servlets et des JavaServer
Pages (JSP), mettant en évidence les principaux avantages de ces deux techniques. Il montre ensuite comment obtenir et configurer les logiciels nécessaires à
l’écriture de servlets et au développement de documents JSP.
Servlets
Les servlets représentent l’alternative de la technologie Java à la programmation
avec CGI (Common Gateway Interface). Il s’agit de programmes exécutés sur un
serveur Web, qui servent de couche intermédiaire entre une requête provenant
14
Partie I
Servlets
d’un navigateur Web et un autre client HTTP, comme des bases de données ou
des applications du serveur HTTP. Leur tâche est de :
1. Lire toutes les données envoyées par l’utilisateur. Ces données sont typiquement saisies dans un formulaire sur une page Web, mais elles peuvent également
provenir d’une applet Java ou d’un programme client HTTP particulier.
2. Chercher d’autres informations sur la requête, à l’intérieur de cette
requête HTTP. Ces informations contiennent des détails sur les capacités du
navigateur, sur les cookies, sur le nom de l’hôte du programme envoyant la
requête, etc.
3. Générer les résultats. Ce processus peut nécessiter une communication avec
la base de données, en exécutant un appel RMI ou CORBA, ou en invoquant
une ancienne application, ou encore en calculant directement la réponse.
4. Formater le résultat dans un document. Dans la plupart des cas, cela implique l’incorporation des informations dans une page HTML.
5. Définir les paramètres de la réponse HTTP appropriés. Cela signifie qu’il
faut indiquer au navigateur le type de document renvoyé (c’est-à-dire HTML),
définir les cookies, mémoriser les paramètres, ainsi que d’autres tâches.
6. Renvoyer le document au client. Ce document peut être envoyé au format
texte (HTML), au format binaire (comme pour des images GIF), ou même
dans un format compressé comme gzip, qui est en fait une couche venant
recouvrir un autre format sous-jacent.
Certaines requêtes de clients peuvent être satisfaites en renvoyant des documents
préconstruits. Ce type de requête est géré par le serveur sans invoquer de servlets.
Cependant, dans un certain nombre de cas, un résultat statique n’est pas suffisant,
et il faudra alors générer une page particulière pour chaque requête. Il existe
plusieurs raisons expliquant la nécessité de construire des pages en temps réel :
m
m
La page Web est fondée sur des données envoyées par l’utilisateur. Par
exemple, les pages de résultats des moteurs de recherche et des pages de
confirmation de commande dans des magasins en ligne sont spécifiques à des
requêtes particulières d’utilisateurs.
La page Web est calculée à partir d’informations qui sont fréquemment
modifiées. Par exemple, un bulletin météo ou une page résumant les dernières
Chapitre 1
Présentation des servlets et des JavaServer Pages
15
nouvelles quotidiennes peut construire la page de manière dynamique, éventuellement en renvoyant une page déjà construite si elle est toujours valable.
m
La page Web se sert d’informations provenant de bases de données appartenant à des entreprises ou à d’autres sources situées au niveau d’un
serveur. Par exemple, un site de commerce électronique peut utiliser un servlet
pour construire une page Web qui établit la liste des prix et la disponibilité de
chaque article en vente.
En principe, les servlets ne sont pas restreints au Web ou à des serveurs d’applications qui gèrent des requêtes HTTP. Ils peuvent également être utilisés par
d’autres types de serveurs. Ainsi, les servlets peuvent être intégrés dans des
serveurs mail ou FTP, afin d’en accroître les capacités. Cependant, dans la pratique, cette utilisation des servlets n’est pas très courante, et nous nous contenterons d’aborder les servlets HTTP.
Avantages des servlets par rapport aux CGI "traditionnels"
Les servlets Java sont plus efficaces, plus simples à utiliser, plus puissants, plus
portables, plus sûrs, et moins chers que les CGI traditionnels et que plusieurs
autres technologies comparables aux CGI.
Efficacité
Avec un CGI traditionnel, un nouveau processus est exécuté pour chaque requête
HTTP. Si le programme CGI est assez grand, son chargement peut nécessiter
plus de temps que son exécution. Avec les servlets, la machine virtuelle Java est
exécutée en permanence et traite chaque requête grâce à un thread Java plus
simple, et non selon un processus complexe du système d’exploitation. De la
même manière, avec des CGI traditionnels, s’il existe n requêtes simultanées
demandant le même programme CGI, le code de ce programme sera chargé n fois
dans la mémoire. En revanche, avec des servlets, il y aurait uniquement n threads
et une seule copie de la classe du servlet. Enfin, lorsqu’un programme CGI a fini
de traiter une requête, ce programme se termine. Cela complexifie de manière
significative les calculs de mise en mémoire, la conservation d’une connexion
ouverte vers une base de données ainsi que d’autres optimisations fondées sur les
données persistantes. Cependant, comme les servlets restent en mémoire même
16
Partie I
Servlets
après le traitement d’une requête, ils peuvent facilement enregistrer des données
complexes entre deux requêtes.
Simplicité
Les servlets disposent d’une infrastructure complète pour analyser et décoder
automatiquement les données d’un formulaire HTML, pour lire et définir des entêtes HTTP, gérer les cookies, conserver une trace des sessions, ainsi que pour
bien d’autres outils de haut niveau. De plus, vous connaissez déjà le langage de
programmation Java. Pourquoi apprendre aussi le langage Perl ? Vous savez déjà
que la technologie Java produit du code plus fiable, dont la maintenance est plus
simple qu’avec le C++. Pourquoi en revenir à une programmation en C++ au
niveau du serveur ?
Puissance
Les servlets disposent de plusieurs facultés qui seraient difficiles, voire impossibles à implémenter avec des CGI classiques. Les servlets peuvent communiquer
directement avec le serveur Web, ce qui est impossible pour des CGI classiques,
du moins sans avoir recours à une API spécifique au serveur. Par exemple, la
communication avec le serveur Web simplifie la traduction d’URL relatives en
chemins complets. Plusieurs servlets peuvent également partager des données, ce
qui permet de réunir facilement plusieurs connexions de bases de données et
d’implémenter d’autres types d’optimisations fondées sur le partage de ressources. Les servlets peuvent aussi conserver des informations d’une requête à
l’autre. Cette technique simplifie l’implémentation de l’enregistrement des
sessions et la conservation en mémoire de calculs précédemment effectués.
Portabilité
Les servlets sont écrits dans le langage de programmation Java et respectent
l’API standard. Par conséquent, des servlets écrits pour I-Planet Enterprise
Server peuvent être exécutés a priori sans modification sur Apache, Internet
Information Server de Microsoft (IIS), WebSphere d’IBM, ou WebStar de StarNine. Par exemple, presque tous les servlets et pages JSP de ce livre ont été
exécutés sur le serveur Web Java de Sun, Apache Tomcat ainsi que sur le JavaServer Web Development Kit (JSWDK), sans aucune modification du code. La
plupart d’entre eux ont été également testés sur WebLogic de BEA et sur
Chapitre 1
Présentation des servlets et des JavaServer Pages
17
WebSphere d’IBM. En fait, les servlets sont supportés soit directement soit par
l’intermédiaire d’un composant logiciel fourni pour tous les principaux serveurs
Web. Ils font désormais partie de la plate-forme Java 2, édition Entreprise (J2EE ;
voir le site http://java.sun.communication/j2ee/), c’est pourquoi le support des
servlets dans le monde industriel se répand de plus en plus.
Sécurité
L’une des principales sources de vulnérabilité des programmes CGI traditionnels
provient du fait qu’ils sont souvent exécutés par des interpréteurs de commandes
généraux. Par conséquent, le programmeur d’un CGI doit être très prudent pour
filtrer certains caractères comme les guillemets inversés et les points-virgules, qui
sont interprétés d’une manière spéciale par l’interpréteur de commandes. Ce
processus reste assez complexe et les sources d’erreurs qui en émanent ne sont
généralement pas abordées dans la plupart des bibliothèques CGI courantes. Une
seconde source d’erreurs provient de ce que certains programmes CGI sont traités
par des langages qui ne vérifient pas automatiquement les limites des tableaux et
des chaînes. Par exemple, en C et en C++, il est parfaitement autorisé d’allouer un
tableau de 100 éléments et d’écrire dans le 999-ième élément, qui peut correspondre à une partie quelconque de la mémoire du programme. Par conséquent, les
programmeurs qui oublient de vérifier explicitement ce type d’accès autorisent
indirectement des attaques volontaires ou involontaires par dépassement de
mémoire. Les servlets ne souffrent d’aucun de ces problèmes. Même si un servlet
exécute un appel sur un système distant pour invoquer un programme sur le
système d’exploitation local, il ne passe par aucun interpréteur de commandes. Et
naturellement, la vérification des limites d’un tableau et les autres techniques de
protection de la mémoire font partie intégrante du langage de programmation Java.
Economique
De nombreux serveurs Web gratuits ou très bon marché sont disponibles, qui sont
parfaitement adaptés pour une utilisation personnelle ou pour des sites Web de
faible importance. Cependant, à l’exception d’Apache, qui est gratuit, la plupart
des serveurs Web de qualité commerciale sont relativement chers. Néanmoins, une
fois que vous possédez un serveur Web, quel qu’en soit le prix, l’ajout des fonctionnalités permettant de supporter les servlets est très économique. Il se peut même
que ce support soit directement intégré dans le serveur Web. Cette solution
18
Partie I
Servlets
contraste avec les options offertes par les CGI, qui nécessitent un investissement
initial non négligeable pour acheter des bibliothèques propriétaires.
JavaServer Pages
La technologie JavaServer Pages (JSP) permet de mélanger du code HTML classique et statique avec du code généré dynamiquement par des servlets. La plupart
des pages Web construites par des CGI sont relativement statiques. Les zones
dynamiques de ces pages sont restreintes à certains emplacements réduits. Par
exemple, la page d’accueil de la plupart des sites d’achat en ligne reste la même
pour tous les visiteurs, à l’exception peut-être d’un message de bienvenue indiquant le nom du visiteur, s’il est connu. Mais la plupart des technologies provenant des CGI, y compris les servlets, doivent créer chaque fois l’intégralité d’une
page grâce à un programme, même si la majeure partie de cette page n’est jamais
modifiée. JSP permet de définir deux zones bien distinctes. Le Listing 1.1 en
montre un bon exemple. L’essentiel de cette page est composé de code HTML
classique, qui est affiché dans le navigateur du visiteur sans aucune modification.
Les parties générées dynamiquement sont désignées par des étiquettes spéciales
ressemblant à des étiquettes HTML. Ces parties sont ensuite intégrées directement dans la page.
Listing 1.1 : Un exemple de page JSP
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD><TITLE>Welcome to Our Store</TITLE></HEAD>
<BODY>
<H1>Welcome to Our Store</H1>
<SMALL>Welcome,
<!-- User name is "New User" for first-time visitors -->
<%= Utils.getUserNameFromCookie(request) %>
To access your account settings, click
<A HREF="Account-Settings.html">here.</A></SMALL>
<P>
Regular HTML for all the rest of the on-line store’s Web page.
</BODY>
</HTML>
Chapitre 1
Présentation des servlets et des JavaServer Pages
19
Avantages des JSP
JSP possède plusieurs
ques-uns :
avantages
par rapport à ses concurrents. En voici quel-
Active Server Pages (ASP)
ASP est une technologie concurrente de Microsoft, par rapport à laquelle JSP
possède deux avantages. Tout d’abord, la partie dynamique est écrite en Java, et
non en VBScript ou en un autre langage spécifique à ASP. Ainsi, JSP est plus
puissant et mieux adapté à des applications complexes nécessitant des composants réutilisables. De plus, JSP est portable vers d’autres systèmes d’exploitation ou d’autres serveurs Web. Vous n’êtes donc pas contraint de vous servir de
Windows NT/2000 et de IIS. Cet argument est également valable pour comparer
JSP et ColdFusion. Avec JSP, vous pouvez utiliser Java, et vous n’êtes pas lié à
un logiciel particulier.
PHP
PHP est un langage à base de scripts, gratuit, inclus dans HTML, dont les sources
sont disponibles, et qui est d’une certaine manière comparable à la fois à JSP et
à ASP. L’avantage de JSP par rapport à PHP est que la partie dynamique est écrite
en Java, que vous connaissez probablement déjà, et qui comporte une API
complète pour l’utilisation des réseaux, des objets distribués, l’accès à des bases
de données, et bien d’autres choses encore, alors que PHP nécessite l’apprentissage d’un langage entièrement nouveau.
Servlets
En principe, tout ce qui peut être réalisé à l’aide de JSP peut aussi l’être avec un
servlet. En fait, les documents JSP sont automatiquement transformés en servlets.
Mais il est plus simple d’écrire et de modifier du code HTML classique plutôt que
de gérer les milliers d’instructions println permettant de générer le code HTML.
De plus, en séparant la présentation et le contenu d’une page, il devient possible
d’affecter différentes personnes à diverses tâches : les experts de conception de
pages Web peuvent construire le code HTML avec leurs outils préférés, et laisser
les programmeurs de servlets insérer le contenu dynamique de la page.
20
Partie I
Servlets
Inclusions au niveau du serveur
Les inclusions au niveau du serveur (SSI, ou Server-Side Includes) sont une technique très répandue pour insérer des éléments externes dans une page Web statique. Une fois encore, JSP est plus intéressant parce qu’il fournit un ensemble
plus riche d’outils pour construire ces éléments externes, et des options plus
nombreuses sur l’insertion de ces éléments dans la réponse HTTP. De plus, SSI
a été conçu uniquement pour des inclusions simples, et non pour celles qui sont
utilisées par des programmes réels faisant intervenir des formulaires, des
connexions à des bases de données, etc.
JavaScript
JavaScript, qu’il ne faut pas confondre avec le langage de programmation Java,
est normalement utilisé pour générer le code HTML dynamique renvoyé au
client, et pour construire des parties de la page Web au fur et à mesure que le
navigateur la charge. Cette capacité est assez utile, mais elle ne permet de gérer
que des situations dans lesquelles les informations dynamiques sont fondées sur
l’environnement du client. Hormis pour les cookies, les données de la requête
HTTP ne sont pas disponibles pour les routines JavaScript au niveau du client.
De plus, comme JavaScript ne dispose d’aucune routine pour la programmation
réseau, le code JavaScript du client ne peut pas accéder aux ressources du
serveur, comme des bases de données, des catalogues, des informations de
prix, etc. JavaScript peut également être utilisé au niveau du serveur, en particulier sur des serveurs Netscape, et en tant que langage de script pour IIS. Java est
bien plus puissant, plus souple, plus fiable et portable.
HTML statique
Naturellement, le code HTML classique ne peut contenir aucune information
dynamique, c’est pourquoi les pages HTML statiques ne peuvent pas être
adaptées en fonction des données saisies par l’utilisateur ou de sources de
données résidant sur le serveur. JSP est tellement simple d’emploi qu’il est
raisonnable de l’ajouter même aux pages HTML qui n’ont pas franchement
besoin de données dynamiques. Auparavant, la difficulté inhérente à l’utilisation
de données dynamiques bannissait celles-ci de la plupart des pages.
Chapitre 1
Présentation des servlets et des JavaServer Pages
21
Installation
Avant de commencer, vous devez charger le logiciel nécessaire et configurer
votre système pour qu’il en tire profit. Voici une présentation des étapes
nécessaires. Cependant, bien que votre code de servlet doive respecter l’API
standard, il n’existe aucun standard pour charger ou configurer des serveurs Web
ou des serveurs d’applications. Par conséquent, et contrairement aux autres
sections de ce livre, les méthodes présentées ici peuvent varier de manière significative d’un serveur à un autre, et les exemples de cette section ne doivent être
considérés que comme des exemples didactiques. Vérifiez la documentation de
votre serveur pour des instructions plus précises.
Obtenir le logiciel de servlets et de JSP
La première étape consiste à charger un logiciel qui implémente les spécifications Java Servlet 2.1 ou 2.2, et JavaServer Pages 1.0 ou 1.1. Si vous exploitez la
dernière version d’un serveur Web ou d’un serveur d’applications, il est probable
qu’il possède déjà tout ce dont vous aurez besoin. Consultez la documentation de
votre serveur, ou la dernière liste de serveurs qui supportent les servlets sur le site
http://java.sun.com/products/servlet/industry.html. Même si vous avez l’intention de développer un serveur de qualité commerciale, il est intéressant dans un
premier temps de disposer d’un système gratuit que vous pourrez installer sur
votre ordinateur personnel pour le développement et les tests. Voici la liste des
logiciels les plus répandus :
m
m
Tomcat d’Apache. Tomcat est l’implémentation de référence officielle des
spécifications JSP 1.1 et servlet 2.2. Il peut être utilisé comme un petit serveur
autonome permettant de tester des servlets et des pages JSP. Il peut également
être intégré dans le serveur Web Apache. Cependant, plusieurs autres serveurs
ont annoncé qu’ils allaient prochainement supporter ces spécifications, c’est
pourquoi nous les étudierons en détail dans ce livre. Tomcat, tout comme
Apache, est gratuit. Néanmoins, et toujours comme Apache (qui est très
rapide, très fiable, mais assez complexe à configurer et à installer), l’installation de Tomcat nécessite une attention plus poussée que pour un moteur de
servlets commercial. Pour plus d’informations, consultez le site http://
jakarta.apache.org/.
JavaServer Web Development Kit (JSWDK). Le JSWDK est l’implémentation de référence officielle des spécifications JSP 1.0 et servlet 2.1. Il est
22
Partie I
Servlets
utilisé comme un petit serveur autonome permettant de tester des servlets et
des pages JSP avant qu’elles soient portées sur un serveur Web complet
supportant ces technologies. Il est gratuit et fiable, mais son installation et sa
configuration sont assez ardues. Pour plus d’informations, consultez le site
http://java.sun.com/products/servlet/download.html.
m
m
m
m
JRun de Allaire. JRun est un moteur de servlets et de JSP qui peut être intégré
dans des serveurs Netscape Enterprise ou FastTrack, dans IIS, Microsoft Personal Web Server, les anciennes versions d’Apache, de WebSite de O’Reilly, ou de
StarNine WebSTAR. Une version limitée supportant jusqu’à cinq connexions
simultanées est disponible gratuitement. La version commerciale ne comporte
pas cette restriction et renferme d’autres caractéristiques intéressantes, comme
une console d’administration à distance. Pour plus d’informations, consultez le
site http://www.allaire.com/products/jrun/.
ServletExec de New Atlanta. ServletExec est un moteur de servlets et de
JSP qui peut être intégré dans la plupart des serveurs Web classiques pour
Solaris, MacOS, HP-UX et Linux. Vous pouvez le charger et l’utiliser gratuitement, mais plusieurs de ses caractéristiques avancées ou de ses outils
d’administration resteront désactivés tant que vous n’achèterez pas de licence.
Pour plus d’informations, consultez le site http://newatlanta.com/.
LiteWebServer (LWS) de Gefion Software. LWS est un petit serveur Web
gratuit dérivé de Tomcat, qui supporte les spécifications JSP 1.1 et servlets 2.2.
Gefion dispose également d’un module logiciel gratuit appelé WAICoolRunner, qui ajoute les spécifications JSP 1.1 et servlets 2.2 aux serveurs
Netscape FastTrack et Enterprise. Pour plus d’informations, consultez le site
http://www.gefionsoftware.com/.
Java Web Server de Sun. Ce serveur a été entièrement écrit en Java et il fait
partie des premiers serveurs à supporter les spécifications JSP 1.0 et servlets 2.1.
Bien qu’il ne soit actuellement plus beaucoup développé par Sun, qui se consacre davantage au serveur Netscape/I-Planet, il constitue toujours une bonne
alternative pour apprendre la technologie des servlets et des JSP. Pour une
version d’évaluation gratuite, consultez le site http://www.sun.com/software/
jwebserver/try/. Pour une version gratuite sans date d’expiration, destinée à
des institutions publiques, consultez le site http://freeware.thesphere.com/.
Chapitre 1
Présentation des servlets et des JavaServer Pages
23
Installer la documentation de l’API servlet et JSP
De même qu’aucun programmeur sérieux ne devrait développer des applications
Java sans accéder à la documentation de l’API du JDK 1.1 ou 1.2, aucun programmeur sérieux ne devrait développer de servlets ou de pages JSP sans accéder à
l’API des classes des bibliothèques javax.servlet. Voici un résumé des sites
fournissant cette API :
m
m
m
http://java.sun.com/products/jsp/download.html. Ce site permet de charger
soit l’API 2.1/1.0 ou l’API 2.2/1.1. Il se peut que vous ayez à charger l’intégralité de l’implémentation de référence avant d’en extraire la documentation.
http://java.sun.com/products/servlet/2.2/javadoc/. Ce site permet de parcourir en ligne l’API 2.2.
http://www.java.sun.com/j2ee/j2sdkee/techdocs/api/. Ce site permet de parcourir l’API complète de la plate-forme Java 2, Enterprise Edition (J2EE), qui
contient les bibliothèques JSP 1.1 et servlets 2.2.
Si Sun ou Apache ajoutent de nouvelles documentations en ligne (c’est-à-dire un
site pour parcourir l’API 2.1/1.0), elles seront listées au Chapitre 1 de l’archive
de sources de ce livre, sur le site http://www.coreservlets.com/.
Installer les classes pour le compilateur Java
Après avoir chargé le logiciel nécessaire, vous devez encore indiquer au compilateur Java (javac) l’emplacement des fichiers de classes JSP et servlet, pour
qu’il puisse compiler vos servlets. Vérifiez la documentation de votre bibliothèque pour plus de détails, mais de manière générale, les fichiers de classes se trouvent dans le dossier lib du dossier d’installation du serveur, les classes de
servlets se trouvant dans servlet.jar et les classes JSP dans jsp.jar, jspengine
.jar ou jasper.jar. Il existe plusieurs manières d’indiquer à javac l’emplacement de ces classes, la plus simple d’entre elles étant de placer les fichiers JAR
dans votre CLASSPATH. Si vous n’avez jamais modifié votre CLASSPATH, il s’agit de
la variable qui spécifie l’emplacement des classes utilisées par le compilateur
pendant la compilation. Si cette variable n’est pas spécifiée, javac cherche dans
le dossier actuel et dans les bibliothèques systèmes standard. Si vous avez défini
vous-même votre CLASSPATH, n’oubliez pas d’y ajouter ".", qui représente le
dossier courant.
24
Partie I
Servlets
Voici un résumé rapide présentant les différentes manières de définir cette variable d’environnement sur diverses plates-formes. Nous supposerons que dir
représente le dossier contenant les classes JSP et servlet.
Unix (C Shell)
setenv CLASSPATH .:dir/servlet.jar:dir/jspengine.jar
Ajoutez :$CLASSPATH à la fin de la ligne setenv si votre CLASSPATH actuel contient
déjà des dossiers et que vous souhaitiez y ajouter d’autres dossiers, sans effacer
les dossiers qui y figurent déjà. Vous remarquerez que sous Unix, les dossiers
sont séparés par des slashs et les différentes entrées par un deux-points. A titre de
comparaison, Windows se sert d’antislashs et de points-virgules. Pour que cette
modification soit permanente, il convient de placer cette instruction dans votre
fichier .cshrc.
Windows
set CLASSPATH=.;dir\servlet.jar;dir\jspengine.jar
Ajoutez ;%CLASSPATH% à la fin de cette ligne si votre CLASSPATH contient déjà des
dossiers que vous souhaitez conserver. Notez que Windows se sert de pointsvirgules et d’antislashs pour séparer les entrées et les dossiers, alors que les
systèmes Unix se servent de deux-points et de slashs. Pour que cette modification
soit permanente sous Windows 95/98, il suffit de placer cette instruction dans
votre fichier autoexec.bat. Sous Windows NT ou 2000, il faut cliquer sur le
bouton Démarrer, sélectionner Paramètres, Panneau de configuration, Système,
Environnement, puis saisir la valeur de cette variable.
Rassembler les classes dans des bibliothèques
Comme vous le verrez au prochain chapitre, vous choisirez probablement de
placer vos servlets dans des bibliothèques, pour éviter les conflits de noms avec
les servlets écrits par d’autres personnes, pour le même serveur Web ou serveur
d’applications. Dans ce cas, il peut être intéressant d’ajouter le dossier principal
de votre bibliothèque dans votre CLASSPATH. Pour plus de détails, voir la section
"Rassembler les servlets dans des bibliothèques", Chapitre 2.
Chapitre 1
Présentation des servlets et des JavaServer Pages
25
Configurer le serveur
Avant de démarrer le serveur, vous pouvez choisir de définir certains paramètres
comme le port sur lequel il écoute, les dossiers dans lesquels il cherche les
fichiers HTML, etc. Ce processus est spécifique à chaque serveur, et les serveurs
Web sérieux devraient toujours fournir une documentation précise sur ce processus d’installation. Cependant, pour les petits serveurs autonomes fournis par Sun
et par Apache comme implémentation de référence des spécifications JSP 1.1/
servlet 2.2 (Tomcat d’Apache), ou 1.0/2.1 (JSWDK de Sun), il existe plusieurs
paramètres importants, mais peu documentés, que nous allons décrire dans les
sections suivantes.
Numéro de port
Tomcat et JSWDK se servent tous les deux par défaut d’un port non standard afin
d’éviter les conflits avec d’autres serveurs Web existants. Si vous commencez par
utiliser l’un de ces deux logiciels pour vos premiers développements et pour les
tester, et que vous ne possédiez aucun autre serveur Web, vous pouvez choisir le
port 80, le port HTTP standard. Avec Tomcat 3.0, vous pouvez apporter cette
modification en éditant le fichier dossier_installation/server.xml et en
remplaçant 8080 par 80 dans la ligne suivante :
<ContextManager port="8080" hostName="" inet="">
Avec le JSWDK 1.0.1, éditez le fichier dossier_installation/webserver.xml et
remplacez 8080 par 80 dans la ligne suivante :
port NMTOKEN "8080"
Java Web Server 2.0 se sert également d’un numéro de port non standard. Pour le
modifier, utilisez l’interface d’administration à distance, disponible sur le site
http://somehostname:9090/, où somehostname peut être remplacé soit par le
nom réel de l’hôte exécutant le serveur, soit par localhost si le serveur est
exécuté sur l’ordinateur local.
Paramètre JAVA_HOME
Si vous vous servez du JDK 1.2 ou 1.3 avec Tomcat ou avec le JSWDK, vous
devez définir la variable d’environnement JAVA_HOME pour qu’elle fasse référence
au dossier d’installation du JDK. Ce paramètre n’est pas nécessaire avec le JDK 1.1.
La méthode la plus simple pour définir cette variable est d’insérer une ligne pour
26
Partie I
Servlets
la définir en haut du script startup (pour Tomcat) ou startserver (pour le
JSWDK). Par exemple, voici le début de la version modifiée des fichiers startup
.bat et startserver.bat que nous utilisons :
rem Marty Hall: added JAVA_HOME setting below
set JAVA_HOME=C:\jdk1.2.2
Paramètres de mémoire DOS
Si vous exécutez Tomcat ou le JSWDK sous Windows 95 ou 98, vous devrez
probablement modifier la quantité de mémoire DOS allouée pour les variables
d’environnement. Pour cela, ouvrez une nouvelle fenêtre DOS, cliquez sur
l’icône MS-DOS dans le coin supérieur gauche de la fenêtre, et sélectionnez
Propriétés. Ensuite, choisissez l’onglet Mémoire, sélectionnez le champ Environnement initial, et saisissez 2816 à la place de Auto. Cette configuration n’a
besoin d’être effectuée qu’une seule fois.
Paramètres CR/LF de Tomcat 3.0
Les premières versions de Tomcat souffraient d’un inconvénient majeur : les
fichiers texte étaient enregistrés au format Unix, dans lequel les fins de lignes
sont désignées par le caractère LF, et non en format Windows, dans lequel une fin
de ligne est représentée par les caractères CR et LF. Par conséquent, les scripts de
démarrage et d’arrêt ne fonctionnaient pas sous Windows. Vous pouvez déterminer facilement si votre version possède ce problème en ouvrant le fichier
install_dir/startup.bat dans un Bloc-notes. Si ce fichier a une apparence
normale, vous possédez une version corrigée. En revanche, si l’intégralité de ce
fichier apparaît sur une seule ligne avec des caractères étranges, quittez le Blocnotes, ouvrez et enregistrez les fichiers suivants sans les modifier, avec Wordpad
(et surtout pas avec le Bloc-notes) :
install_dir/startup.bat
install_dir/tomcat.bat
install_dir/shutdown.bat
install_dir/tomcatEnv.bat
install_dir/webpages/WEB-INF/web.xml
install_dir/examples/WEB-INF/web.xml
Démarrer le serveur
Pour démarrer l’un des "vrais" serveurs Web, consultez sa documentation. Dans
la plupart des cas, vous devrez exécuter une commande appelée httpd, soit à
Chapitre 1
Présentation des servlets et des JavaServer Pages
27
partir de la ligne de commande, soit en demandant au système d’exploitation de
le faire automatiquement lors du premier démarrage de l’ordinateur.
Avec Tomcat 3.0, vous pouvez démarrer le serveur en exécutant un script appelé
startup, situé dans le dossier d’installation. Avec le JSWDK 1.0.1, il suffit
d’exécuter un script similaire appelé startserver.
Compiler et installer vos servlets
Après avoir défini correctement votre CLASSPATH, comme nous venons de le voir
dans cette section, il suffit d’employer la commande "javac ServletName.java"
pour compiler un servlet. Le fichier de classe résultant doit se trouver dans un
emplacement connu du serveur, pour qu’il puisse s’en servir. Comme vous
pouvez vous y attendre, cet emplacement n’est pas le même d’un serveur à un
autre. Voici un petit résumé des dossiers utilisés par les dernières versions de
Tomcat, du JSWDK et du Java Web Server. Dans chacun de ces trois cas, nous
supposerons que install_dir correspond au dossier d’installation du serveur.
Tomcat
m
install_dir/webpages/WEB-INF/classes. Dossier standard des classes de
servlets.
m
install_dir/classes. Dossier de remplacement des classes de servlets.
m
install_dir/lib. Emplacement des fichiers JAR contenant les classes.
Tomcat 3.1
Juste avant l’impression de ce livre, Apache a diffusé une version beta de Tomcat
3.1. S’il existe une version finale de cette version lorsque vous chargez Tomcat,
nous vous conseillons de l’utiliser. Voici la nouvelle organisation des dossiers de
Tomcat 3.1 :
m
install_dir/webapps/ROOT/WEB-INF/classes. Dossier standard des classes de servlets.
m
install_dir/classes. Dossier de remplacement des classes de servlets.
m
install_dir/lib. Emplacement des fichiers JAR contenant les classes.
28
Partie I
Servlets
JSWDK
m
install_dir/webpages/WEB-INF/servlets. Dossier standard des classes de
servlets.
m
install_dir/classes. Dossier de remplacement des classes de servlets.
m
install_dir/lib. Emplacement des fichiers JAR contenant les classes.
Java Web Server 2.0
m
m
m
install_dir/servlets. Ce dossier renferme les classes de servlets qui sont
modifiées régulièrement. Le serveur détecte automatiquement lorsque des
servlets de ce dossier sont modifiés, et il les recharge en cas de besoin. Ce
comportement n’existe pas avec Tomcat ou le JSWDK, avec lesquels il faut
redémarrer le serveur lorsqu’un servlet déjà chargé dans la mémoire du
serveur est modifié. La plupart des serveurs commerciaux possèdent une
option similaire.
install_dir/classes. Emplacement des classes de servlets qui ne sont pas
souvent modifiées.
install_dir/lib. Dossier des fichiers JAR contenant les classes.
Si tout cela peut sembler un peu déconcertant, ne vous inquiétez pas, car au
chapitre suivant nous aborderons ce processus en détail sur plusieurs serveurs
différents, lorsque nous présenterons le code d’un servlet réel.

Documents pareils