Projet du cours de Systeme de la filière Informatique et Réseaux de 5ème année. Université de Marne la Vallée.

 

 

JSP (Java Server Page) à l'avantage d'intéresser deux communautés différentes de développeurs. Les développeurs de sites Internet qui utilisent JSP cherchent à générer du contenu dynamique de façon efficace et rapide. Les programmateurs Java implémentent du code en arrière plan pour les applications qui traiteront toutes les données.

L'objectif de cette page est de vous présenter JSP et de le comparer à d'autres langages de génération de contenu dynamiques, comme PHP.

1. Présentation

Les pages web JSP sont une technologie développée par Sun basée sur Java qui simplifie le processus de développement de sites web dynamiques. L'utilisation du langage de programmation Java permet aux concepteurs de pages qui utilisent JSP d'incorporer rapidement des éléments dynamiques dans les pages web en intégrant du code Java et en utilisant quelques balises (tags) simples.
Ces balises fournissent aux développeurs HTML la possibilité d'utiliser la logique objet Java sans pour autant devoir maîtriser toute la complexité de développement de programmes Java.

JSP est un langage script côté serveur. Le code de la page est exécuté par le serveur web. Les pages JSP sont des fichiers texte munis de l'extension .jsp, qui remplacent les pages HTML traditionnelles. Les fichiers JSP contiennent du code HTML et du code imbriqué en Java.

Le mélange d'HTML et de code Java dans les pages JSP permet de séparer la présentation (en HTML) des aspects procéduraux contenus dans le code. On a ainsi une grande souplesse dans le développement de sites web.

2. Autres langages dynamiques

2.1 CGI

Les premiers serveurs HTTP ne comportaient pas de programmes pour générer des réponses de façon dynamiques. Des interfaces étaient utilisées pour appeler d'autres programmes capables de traduire les requêtes en un contenu exécutable. Le premier standard utilisé a été CGI (Common Gateway Interface), c'est une norme qui définit un mécanisme qui permet au serveur HTTP de transmettre les informations d'une requête à des programmes externes.
Le langage Perl est le langage le plus utilisé pour écrire des scripts CGI, mais on peut écrire des langages scripts dans bien d'autres langages.
L'inconvénient de ces scripts est qu'ils sont très gourmant en ressources systèmes. Chaque scripts utilisent un processus différent ce qui demande beaucoup de mémoire et d'utilisation processeur.

2.1 ASP

L'équivalent de JSP chez Microsoft est ASP (Avtive Server Pages), il est exécuté du côté serveur et supporte divers langages scripts tels que PerlScript, Jscript et VBScript. Le langage par défaut qui est utilisé et VBScript qui est un sous ensemble de Visual Basic (langage de programmation très utilisé par Microsoft). VBScript permet d'accéder aux composants ActiveX. Ces composants sont des codes objets compilés pouvant, dans la pratique, encapsuler toutes sortes de fonctionnalités telles que l'accès à une base de donnée ou à la manipulation de fichiers…
L'inconvénient majeur de ASP est qu'il n'est disponible qu'avec un serveur de Microsoft (IIS) qui s'exécute que sous le système d'exploitation Windows 2000.

2.1 PHP

Un des plus important concurrent de JSP est PHP (Personal Home Page) créé en 1994.
PHP est un langage interprété (un langage de script) exécuté du côté serveur et non du côté client. La syntaxe du langage provient de celles du langage C, du Perl et de Java. Ses principaux atouts sont:

  • La gratuité et la disponibilité du code source (PHP3 est distribué sous licence GNU GPL)
  • L'intégration au sein de nombreux serveurs web (Apache, Microsoft IIS, ...)
  • La simplicité d'écriture de scripts
  • la possibilité d'inclure le script PHP au sein d'une page HTML (contrairement aux scripts CGI, pour lesquels il faut écrire des lignes de code pour afficher chaque ligne en langage HTML)
  • La simplicité d'interfaçage avec des bases de données (de nombreux SGBD sont supportés)

Exécution des scripts PHP par le serveur:

On se rend compte que l'interprétation et l'exécution d'un script est très coûteux pour le serveur. Un nombre important et simultané de requêtes peux ralentir fortement les temps de réponses.

3. Fonctionnement de JSP

JSP présente de nombreux avantages par rapport aux autres langages de génération de contenu. Comme il s'agit d'une technologie basée sur Java, JSP profite de tous ce qu'offre ce langage pour le développement et le déploiements d'applications. En effet Java est un langage orienté objet fortement typé, permettant l'encapsulation, le traitement des exceptions et la gestion automatique de la mémoire.

D'aute part, grâce aux API normalisées pour les JSP et à la portabilité du bytecode compilé Java, on n'est pas limité à un seul type de plate-forme, de système d'exploitation. On peut changer les composants d'une page JSP comme on le souhaite.
De plus, JSP utilise l'ensemble de la plate forme JAVA sous-jacente ; par conséquent, les JSP peuvent directement tirer avantage de toutes les API Java.

JSP n'est pas rattaché à un éditeur particulier, les développeurs peuvent donc choisir les solutions de leurs choix.

Lorsque la page est demandée par un utilisateur en HTTP, alors le serveur web HTTP va transmettre sa requête à un moteur de JSP qui va interpréter le page, compiler le code et générer la réponse. L'utilisateur ne verra aucune ligne de code Java dans les sources de la page qu'il aura reçu.

Etapes d'une demande de page JSP:

4. Syntaxe

  • Exemple de code dans une page HTML

Il s'agit d'une page JSP qui génère dynamiquement un contenu en utilisant un couple de balises JSP qui supporte le script :

<html>
<body>
<% String visitor = request.getParameter("name");
if (visitor == null) visitor = " World"; %>
Hello, <%= visitor %>!
</body>
</html>

Ce code déclare une variable Java de type String appelée visitor et essaie ensuite de l'initialiser à partir de la requête HTTP courante. Si aucune valeur n'est présente pour cette variable dans la requête, une valeur par défaut lui est attribuée. Une expression JSP est ensuite utilisée pour insérer la valeur de cette variable dans la sortie HTML de la page.

 

  • Affichage

“Hello, World !” pour une requête http://serveur.fr/helloScript.jsp
“Hello, Java !” pour une requête http://serveur.fr/helloScript.jsp?name=Java

Les paramètres de la requête sont transmis aux pages JSP en utilisant le mécanisme HTTP classique de passage de paramètres. Ici on utilise les requêtes HTTP GET, les valeurs de paramètres codé sont simplement ajoutées à la fin de l'URL.

Le langage de script par défaut pour JSP est naturellement Java. Comme les pages JSP sont compilées en Servlets Java, la transformation des scripts en code Servlet est immédiate.

JSP fournit quatre catégories de balises :

4.1. Les Directives

Il s'agit d'un ensemble de balises qui fournissent au conteneur de JSP des instructions spécifiques à une page pour lui indiquer comment doit être traité le document contenant les directives.

<%@ page attribut1="valeur1" attribut2="valeur2" %>

Les attributs pris en charge par la directive page ("<jsp:directive.page ...>") :

Attribut
Valeur
Par défaut
Exemple <%@ page ... %>
info Chaîne de caractères Néant info="Registration form."
langage Nom du langage de script "Java" langage="java"
contentType Type MINE ou un ensemble de caractères "text/html" contentType="text/xml"
extends Nom d'une classe Néant extends="com.lib.div.MyClass"
import Noms de classe et/ou de paquetage Néant import="java.net.URL"
session Booléen "true" session="true"
buffer Taille du tampon ou 'false' "8Kb" buffer="12kb"
autoFlush Booléen "true" autoFlush="false"
isThreadSafe Booléen "true" isThreadSafe="true"
errorPage URL locale Néant errorPage="dir/error.jsp"
isErrorPage Booléen "false" isErrorPage="false"

4.2. Les Eléments Scripts

Ils sont utilisés pour intégrer les instructions de programmation, écrites dans le langage script désigné pour la page. Ces instructions doivent être exécutées chaque fois que la page est traitée pour une requête donnée.

Les développeurs peuvent intégrer directement du code dans la page JSP et, plus précisément, un code générant les sorties qui doivent apparaître dans le résultat envoyé au navigateur.

  • Les déclarations

Les déclarations sont utilisés pour définir des variables et des méthodes spécifiques à la page JSP.

<%%! String Chaine = "hello";
int num = 10;

public void exemple() {
// instructions;
}
%>

  • Les expressions

Les déclarations sont utilisées pour ajouter des variables et des méthodes à une page JSP, mais elles ne peuvent pas contribuer directement aux sorties de la page qui, en définitive, constituent l'objectif de la génération de contenus dynamiques.
L'élément expression des JSP est conçu pour la génération des sorties.
Sa syntaxe est :

<%= expression %>

  • Les sciptlets

Pour les scripts multi-usages, la construction JSP appropriée est la scriptlet. Les scriptlets peuvent contenir des instructions d'un langage de script quelconque qui, comme dans le cas des déclarations, sont uniquement évaluées pour leur effet de bord. Cependant elles n'ajoutent pas automatiquement des contenus aux sorties des pages JSP.
La syntaxe est :

<% scriptlet %>

4.3. Les Actions

Elles permettent de réaliser plusieurs comportements différents. Elles peuvent transférer le contrôle entre les pages, spécifier des applets et interagir avec des composants JavaBean côté serveur.

Les actions encapsulent un comportement classique dans des balises simple à utiliser à partir de n'importe quelle page JSP. Elles constituent la base du mécanisme de conception de balises personnalisées, et certaines d'entre elles, dites standard, sont fournies par la spécification de base des JSP.

5. Exécution des JSP

  • Conditions nécessaires à l'exécution de pages JSP :

Les éléments nécessaires pour utiliser JSP sont un serveur HTTP comme Apache (logiciel libre) ou Microsoft Information Serveur par exemple.

En plus du serveur HTTP, un logiciel implémentant le conteneur (ou moteur) de JSP est nécessaire, Tomcat est le plus utiliser, il peut aussi faire office de serveur web. La version 4.0 de Netscape entreprise Server prend déjà en charge les servlets et les pages JSP.

Bien sure, il faudra sur le serveur une Java Virtual Machine tel que JDK (Java Development Kit) qui contient une JVM, un compilateur...

  • Exécution des pages JSP :

Les JSP sont dérivées des servlets (les JSP sont transformées par le conteneur en Servlet), elle sont donc compilées en une classe Java dérivant de la classe HttpServlet (API Java “javax.servlet” et “javax.servlet.http”), et utilisant les méthodes doGet() et doPost pour recevoir les requêtes HTTP.

Ainsi, lorsqu'un navigateur fait appelle une page JSP, le serveur Web appelle le conteneur de JSP qui transforme la page JSP en code source Java et compile la classe afin de fournir un fichier compilé (d'extension .class). Le script JSP est donc devenu une Servlet.

Ce processus est en fait plus compliqué: le conteneur de JSP vérifie si la date du fichier .jsp correspond à celle du fichier .class. Le conteneur de JSP compile le script quand celui-ci a été modifié. Ainsi, le fait que la compilation ne se fasse que lors de la mise à jour du script JSP, fait de cette technologies une des plus rapides pour créer des pages dynamiques. On n'interprète pas à chaque fois la page JSP.

De plus, une fois qu'une page JSP a été demandée, elle reste en mémoire pour que les autre demandes soient plus rapides.

En effet, la plupart des langages scripts de génération de pages dynamiques (ASP, PHP, ...) reposent sur un code interprété, ce qui requiert beaucoup de ressources pour générer la réponse au format HTTP. Etant donné que les JSP sont compilées, elles sont donc beaucoup plus rapides à l'exécution.

 

  • Exemple de déroulement de demande d'une page JSP:

 

Etape 1: client --> serveur + moteur (2 façons:)

1) le client charge une URL http:// www. univ-mlv. fr/ prog.jsp
- le navigateur construit une commande HTTP GET

GET /prog. jsp HTTP/ 1.1

ou 2) le client saisit des informations dans un formulaire et clique sur envoi
- le navigateur construit une commande HTTP POST
avec les données du formulaire (chaîne de caractères)

POST /prog. jsp HTTP/ 1.1
Nom= Jourdan&Prenom= Cedric

Etape 2: serveur + moteur --> JSP

Le "moteur":
- à la 1ère invocation, crée une classe, la compile et l' instancie.
- Si la classe existe déjà et est aussi récente que la page HTML, on l’utilise.
- crée un thread
- invoque une méthode de la classe contenant le code à exécuter

La JSP:
- s'exécute sur le serveur Web

Etape 3: JSP --> serveur + moteur

La JSP:

- produit son résultat

 

Etape 4: Serveur + moteur --> Client

Le serveur:

- propage le résultat au client dans une réponse HTTP

 


6. Mise en cache des sorties

Le protocole HTTP permet au serveur de renvoyer des informations supplémentaires au client sous forme d'en-têtes de réponse, qui sont transmis en même temps que le contenu web demandé. Ce dernier est alors appelé le corps (body) de la réponse. Ces en-têtes de réponse servent pour l'essentiel à préciser le statut de la requête au navigateur. Comme les en-têtes de requêtes, ils peuvent aussi contrôler la mise en cache et initialiser des valeurs de cookies. Cependant, l'inconvénient de ces en-têtes de réponses est que le navigateur s'attend à recevoir toutes les informations de l'en-tête avant de recevoir le corps du message.

Par conséquent, si une page JSP doit renvoyer des données d'en-tête au navigateur, les en-têtes de réponses doivent avoir été spécifiés avant que les sorties JSP soient générées pour être renvoyées en tant que corps de la réponse.
Par exemple, si une page JSP veut initialiser un cookie, il faut q'elle le fasse au tout début de la page. En résumé, puisque les pages JSP sont traitées séquentiellement du haut vers le bas, toute tentative d'initialiser un cookie après avoir généré, statiquement ou dynamiquement, le corps de la réponse serait trop tardive.

Pour prendre en compte cette restriction au niveau du protocole HTTP, la spécification de JSP exige que toute implémentation des JSP supporte la mise en cache des résultats du traitement des pages JSP. Cela signifie que le traitement de la page est enregistré dans une mémoire tampon (par défaut 8Ko). Lorsque la page a été entièrement traitée, la mémoire tampon est envoyé au navigateur.
On peut ainsi à tout moment dans la page JSP spécifier des informations de l'en-tête.

7. Gestion des sessions

Une des particularités du protocole HTTP est qu'il n'a pas d'état. Cela signifie que, d'une requête à une autre, les serveurs HTTP ne conservent aucune information sur les navigateurs qui se sont connectés. Après la réception d'une requête et le renvoi de la réponse, le serveur oublie tout ce qui concerne l'ordinateur sur lequel s'exécute le navigateur qui a émis cette requête. La prochaine fois qu'il recevra une requête de ce client, il la traitera comme si c'était la première fois qu'une requête provenait de cet hôte.

Par exemple, dans site de commerce électronique, pour la gestion du " caddie " du client il est nécessaire de garder en mémoire ce que le client a commandé pour qu'il puisse finaliser son achat.

Ce processus qui essai de maintenir un état entre différentes requêtes HTTP est appelé la "gestion des sessions". Il s'agit dans une certaine période de temps que toutes les demandes de pages d'un utilisateur fassent partie de la même session interactive.
Les JSP possèdent un support prédéfini pour un tel processus. En effet, les Servlets peuvent utiliser la récriture d'URL ou les cookies pour implémenter le processus de gestion des sessions.

Les JSP fournissent un objet implicite nommé SESSION qui représente la session d'un utilisateur particulier qui interagit avec le serveur web. Chaque page JSP intervenant dans la gestion de session peut mémoriser des éléments dans cet objet SESSION et peut, plus tard, les extraire ou les supprimer.

Cependant, pour les gros sites avec de nombreux utilisateurs connectés simultanément, l'enregistrement d'une grande quantité de données dans l'objet SESSION peut s'avérer problématique. Si, pour chaque session utilisateur, il faut mémoriser 5 Ko, alors la présence de 100 000 utilisateurs simultanés ayant des sessions actives va nécessiter 500 Mo de mémoire. Ainsi, la quantité de données mémorisées dans une session a un impact direct sur le nombre d'utilisateurs simultanés qui peuvent être traités.

Pour réduire l'utilisation de la mémoire de données de session, une autre approche consiste à n'enregistrer que les références à ces données (le numéro ID de l'utilisateur par exemple). Les données réelles spécifiques à une session sont alors enregistrées dans une base de données par exemple.

8. JSP ou PHP?

Les deux langages JSP et PHP sont relativement différents. Si vous débuté en programmation dynamique et que vous ne voulez pas perdre trop de temps à apprendre un langage de programmation, il est alors préférable de s'orienter vers PHP. C'est un langage simple qui offre une infinité de possibilité dans la création de pages web dynamiques.

PHP est plus adapté à la création de petits et moyens sites web qui ne sont pas trop complexes en terme de fonctionnalités.

JSP est une technologie Java, il faut donc une bonne connaissance de ce langage bien que des développeurs web puissent utiliser des balises JSP prédéfinis. Ce langage est bien adapté au développement de sites marchands ou de gros Intranets qui demandent la mise en place d'une architecture 3-tiers.

De plus, du fait de l'utilisation de la Virtual Machine Java, JSP demandera un serveur plus puissant avec plus de mémoire pour avoir des temps de réponses rapides.

Le tableau ci-dessous présente les points importants de chacun de ces langages:

JSP
PHP
Utilise le langage Java qui est totalement objet
Langage procédurale avec la possibilité de faire de l’objet
Grand nombre d’API
Moins de possibilités de développement
Peut ce connecter à tout type de bases de données (avec JDBC)
Peut ce connecter à tout type de bases de données (avec ODBC)
Fonctionne “in process” et “out process”
Ajout d’un module pour supporter le “out process”
Les temps de réponses sont équivalents
Plus gourmand en ressources à cause de la JVM
Langage interprète à chaque appel
Processus léger, utilise les Threads
Nouveaux processus pour l’exécution des scripts
Programmes portables
Problèmes de portabilités

9. Liens

Exposé de Système au format Powerpoint: PresentationJSP.ppt

Comment ça marche? [l'informatique] http://www.commentcamarche.com
JavaServer Pages(TM) Technology http://java.sun.com/products/jsp
JSP Resource Index http://www.jspin.com
PHP: Hypertext Preprocessor http://www.php.net