JavaServer Pages


JavaServer Pages

Le JavaServer Pages ou JSP est une technique basée sur Java qui permet aux développeurs de générer dynamiquement du code HTML, XML ou tout autre type de page web. Cette technique permet au code Java et à certaines actions prédéfinies d'être ajoutés dans un contenu statique. Depuis la version 2.0 des spécifications, la syntaxe JSP est complètement XML.

La syntaxe du JSP ajoute des balises XML, appelées actions JSP, qui peuvent être utilisées pour appeler des fonctions. De plus, cette technique permet la création de bibliothèques de balises JSP (taglib) qui agissent comme des extensions au HTML ou au XML. Les bibliothèques de balises offrent une méthode indépendante de la plate-forme pour étendre les fonctionnalités d'un serveur HTTP. Il existe aussi un langage de script particulier, appelé Expression Language (EL) destiné à réduire l'injection de code java au sein des pages JSP ainsi qu'à étendre les possibilités des taglibs.

Les JSP sont compilées par un compilateur JSP pour devenir des servlets Java. Un compilateur JSP peut générer un servlet Java en code source Java qui peut à son tour être compilé par le compilateur Java, ou peut générer le pseudo-code Java interprétable directement. Dans les deux cas, il est bon de comprendre comment le compilateur JSP transforme la page en servlet Java. Voir l’exemple de page JSP fourni en fin d’article, avec le servlet généré et la page HTML résultante.

Sommaire

Syntaxe JSP

Une page JSP peut être séparée en plusieurs parties :

  • les données statiques comme le HTML,
  • les directives,
  • les scripts et variables,
  • les actions,
  • les balises personnalisées.

Données statiques

Les données statiques sont écrites dans la réponse HTTP exactement comme elles apparaissent dans le fichier source. Un fichier JSP sans code Java et sans action est donc un fichier valide. Dans ce cas, les mêmes données sont envoyées à chaque fois que la page est demandée par le serveur HTTP. Bien sûr, l’intérêt des JSP est d'insérer des données dynamiques à l’intérieur de ce contenu statique.

Directives JSP

Les directives contrôlent la manière dont le compilateur doit générer la servlet. Elles sont placées entre les symboles <%@ et %>, ou par les balises XML de la forme <jsp:directive.nom_directive … /> en JSP 2.0. Les directives suivantes sont disponibles :

Directive Description et exemple d'utilisation
include Cette directive indique au compilateur d’inclure un autre fichier dans la page. C’est comme si le contenu du fichier à inclure était directement copié dans le fichier courant. Cette fonctionnalité est similaire à celle offerte par le préprocesseur C.
<%@ include file="unAutreFichier" %>
ou en JSP 2.0
<jsp:directive.include file="unAutreFichier" />
page

Il y a plusieurs options à cette directive :

import Importe un paquetage (package) Java. Cette directive résulte en une instruction import dans la servlet.
contentType Définit le type de contenu de la page générée. Par exemple, ce peut être text/html pour du HTML.
errorPage Indique la page à afficher si une exception se produit pendant le traitement de la requête HTTP.
isErrorPage Si cette valeur est à true, la page est une page d'erreur.
isThreadSafe Indique si la servlet résultante est protégée pour les threads (fils d’exécution).
<%@ page import="java.util.*" %> // import
<%@ page contentType="text/html" %> // contentType
<%@ page isErrorPage=false %> // pas une page d'erreur
<%@ page isThreadSafe=true %> //JSP sécuritaire aux threads
ou en JSP 2.0
<jsp:directive.page import="java.util.*" />// import
<jsp:directive.page contentType="text/html"
  isErrorPage="false" isThreadSafe="true" />
taglib Directive qui indique qu’une bibliothèque de balises doit être utilisée. Elle requiert qu’un préfixe soit utilisé (comme un namespace en C++) et l’URI de la description de la bibliothèque.
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
ou en JSP 2.0
<jsp:root xmlns:myprefix="urn://to/taglib" …></jsp:root>

Éléments de scripts JSP et variables

Variables de script standard

Les variables suivantes sont toujours disponibles dans une page JSP :

out 
Le JSPWriter utilisé pour envoyer la réponse HTTP au client.
page 
La servlet elle-même.
pageContext 
Une instance PageContext qui contient les données associées à la page entière. Une page HTML donnée peut être passée entre plusieurs JSP.
request 
Objet représentant la requête HTTP.
response 
Objet représentant la réponse HTTP.
session 
La session HTTP, qui peut être utilisée pour conserver de l'information à propos d'un utilisateur d'une requête à une autre.

Éléments de script

Il y a 3 types basiques d'éléments qui permettent d'insérer du code Java dans la jsp.

Élément Description et exemple
Déclaration (!) Une déclaration permet d'insérer du code directement dans la classe de la servlet. Elle peut être utilisée pour définir une variable globale à la classe ou pour créer des méthodes Java.
<%! int variableDeClasse = 0; %>

Ou

<jsp:declaration> 
        int variableDeClasse = 0; 
</jsp:declaration>
Scriptlet Un Scriptlet est utilisé pour placer du code dans la méthode _jspService() de la Servlet. C'est généralement l'élément utilisé pour placer tout code Java, sauf les méthodes et les variables de classe.
<% int variable = 0;
out.println("On peut aussi écrire des variables : " + variable); %>

Ou

<jsp:scriptlet> 
        int variable = 0;
        out.println("On peut aussi écrire des variables : " + variable); 
</jsp:scriptlet>
Expression (=) Cet élément sert à afficher une expression. Ce code est donc ajouté à la méthode _jspService(), comme paramètre à un appel out.print().
Voici une variable : <%= variable %>

Ou

Voici une variable : <jsp:expression> variable </jsp:expression>
Commentaire (--) Utilisé pour faire un commentaire dans le code JSP. Le texte dans un commentaire JSP ne sera pas envoyé au client ni compilé dans la servlet.
<%-- Voici un commentaire JSP --%>

Actions JSP

Les actions JSP sont des balises XML qui appellent des fonctions sur serveur HTTP. Les actions suivantes sont disponibles :

Action Description et exemple
jsp:include Agit de façon similaire à l'appel d'une sous-routine. Le contrôle est temporairement donné à une autre page, soit un autre fichier JSP, soit un fichier statique. Après le traitement de l'autre page, le contrôle est redonné à la JSP en cours d'exécution. En utilisant cette fonctionnalité, le code Java peut être partagé entre deux pages plutôt que dupliqué.
 <jsp:include page="pageÀInclure.jsp" >

<jsp:param name="paramètre" value="valeur" />

</jsp:include>
jsp:param Peut être utilisé dans un bloc jsp:include, jsp:forward ou jsp:params. Il indique un paramètre à être ajouté aux paramètres actuels de la requête. Pour un exemple, voir celui de jsp:include et jsp:forward.
jsp:forward Donne le contrôle de la requête et de la réponse à une autre page JSP ou à une servlet. Le contrôle est définitivement donné. Pour être appelée, aucune écriture ne doit avoir eu lieu sur la sortie (out) de la servlet.
 <jsp:forward page="pagePrenantContrôle.jsp" >

<jsp:param name="paramètre" value="valeur" />

</jsp:forward>
jsp:plugin Les versions plus vieilles de Netscape et de Internet Explorer utilisaient différents types de balises pour ajouter une applet. Cette action génère le code nécessaire pour le navigateur utilisé par le client.
 <jsp:plugin type="applet" height="100%" width="100%"

codebase="/applets"

code="MonApplet" >

<jsp:params>

<jsp:param name="enableDebug" value="true" />

</jsp:params>

<jsp:fallback>

Votre navigateur ne supporte pas les applets Java.

</jsp:fallback>

</jsp:plugin>
jsp:fallback Le contenu à montrer si le client ne supporte pas l'affichage d'applet (utilisé avec jsp:plugin). Pour un exemple, voir celui de jsp:plugin.
jsp:getProperty Retrouve la valeur d'une propriété provenant d'un Java bean.
 <jsp:getProperty name="nomDeBean" property="derniereModif" />
jsp:setProperty Règle la valeur d'une propriété d'un Java bean.
 <jsp:setProperty name="nomDeBean"
property="derniereModif" value="<%= new Date()%>" />
jsp:useBean Crée ou réutilise un Java bean déjà existant pour pouvoir l'utiliser dans la page.
 <jsp:useBean id="nomDeBean" class="package.Bean" scope="request" />

Bibliothèques de balises JSP

En plus des actions JSP pré-définies, les développeurs peuvent ajouter leurs propres actions personnalisées en utilisant l'API d'extension de balises JSP (JSP Tag Extension API). Pour ce faire, il faut écrire une classe Java qui implémente une des interfaces de balises et écrire le fichier XML de description de balise qui donne les caractéristiques du marqueur et les classes qui l'implémentent.

Exemple

Voici un exemple de code source JSP, suivi du code source de la Servlet Java qui pourrait être générée par un serveur (par exemple Apache Tomcat) et de la page HTML qui en résulterait. Le code Java et HTML de cette page est celui généré par Apache Tomcat 4.

Source

<%-- Ceci est un commentaire JSP --%>
<%@page contentType="text/html"%>
<%@page errorPage="erreur.jsp"%>
<%-- Importation d'un paquetage (package) --%>
<%@page import="java.util.*"%>
<html>
<head><title>Page JSP</title></head>
<body>

<%-- Déclaration d'une variable globale à la classe --%>
<%! int nombreVisites = 0; %>

<%-- Définition de code Java --%>
<% //Il est possible d'écrire du code Java ici
    Date date = new Date();
    // On peut incrémenter une variable globale pour compter le nombre
    // d'affichage, par exemple.
    nombreVisites++;
%>
<h1>Exemple de page JSP</h1>
<%-- Impression de variables --%>
<p>Au moment de l'exécution de ce script, nous sommes le <%= date %>.</p>
<p>Cette page a été affichée <%= nombreVisites %> fois!</p>
</body>
</html>

Servlet Java générée par le compilateur

package org.apache.jsp;
 
import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import org.apache.jasper.runtime.*;
import java.util.*;
 
public class example_jsp extends HttpJspBase {
 
 int nombreVisites = 0; 
  private static java.util.Vector _jspx_includes;
 
  public java.util.List getIncludes() {
    return _jspx_includes;
  }
 
  public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {
 
    JspFactory _jspxFactory = null;
    javax.servlet.jsp.PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;
 
 
    try {
      _jspxFactory = JspFactory.getDefaultFactory();
      response.setContentType("text/html;charset=ISO-8859-1");
      pageContext = _jspxFactory.getPageContext(this, request, response,
                        "erreur.jsp", true, 8192, true);
      application = pageContext.getServletContext();
      config = pageContext.getServletConfig();
      session = pageContext.getSession();
      out = pageContext.getOut();
      _jspx_out = out;
 
 
      out.write("<body>\n\n");
      out.write("\n");
      out.write("\n\n");
      out.write("\n");
 //Il est possible d'écrire du code Java ici
    Date date = new Date();
    // On peut incrémenter une variable globale pour compter le nombre
    // d'affichage, par exemple.
    nombreVisites++;
      out.write("\n");
      out.write("<h1>Exemple de page JSP");
      out.write("</h1>\n");
      out.write("\n");
      out.write("<p>Au moment de l'exécution de ce script, nous sommes le ");
      out.print( date );
      out.write(".");
      out.write("</p>\n");
      out.write("<p>Cette page a été affichée ");
      out.print( nombreVisites );
      out.write(" fois!");
      out.write("</p>\n");
      out.write("</body>\n");
      out.write("</html>\n");
    } catch (Throwable t) {
      out = _jspx_out;
      if (out != null && out.getBufferSize() != 0)
        out.clearBuffer();
      if (pageContext != null) pageContext.handlePageException(t);
    } finally {
      if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext);
    }
  }
}

Code HTML généré par le serveur

<html>
<head><title>Page JSP</title></head>
<body>
 
<h1>Exemple de page JSP</h1>
 
<p>Au moment de l'exécution de ce script, nous sommes le Mon Dec 16 19:31:28 EST 2002.</p>
<p>Cette page a été affichée 5 fois!</p>
</body>
</html>

Voir aussi

Liens externes



Wikimedia Foundation. 2010.

Contenu soumis à la licence CC-BY-SA. Source : Article JavaServer Pages de Wikipédia en français (auteurs)

Regardez d'autres dictionnaires:

  • JavaServer Pages — JavaServer Pages, abgekürzt JSP, ist eine von Sun Microsystems entwickelte, auf JHTML basierende Web Programmiersprache zur einfachen dynamischen Erzeugung von HTML und XML Ausgaben eines Webservers. Sie erlaubt, Java Code und spezielle JSP… …   Deutsch Wikipedia

  • JavaServer Pages — (JSP) is a Java technology that allows software developers to dynamically generate HTML, XML or other types of documents in response to a Web client request. The technology allows Java code and certain pre defined actions to be embedded into… …   Wikipedia

  • JavaServer Pages — Desarrollador Sun Microsystems http://java.sun.com/products/jsp/ Información general Última versión estable 2.1 …   Wikipedia Español

  • JavaServer Pages — …   Википедия

  • JavaServer Pages Standard Tag Library — Desarrollador Sun Microsystems http://java.sun.com/products/jsp/jstl/ Información general Última versión estable …   Wikipedia Español

  • JavaServer Pages compiler — A JavaServer Pages compiler, or JSP compiler, is a program that parses JavaServer Pages (JSPs), and transforms them into executable Java Servlets. A program of this type is usually embedded into an application server and run automatically the… …   Wikipedia

  • JavaServer Pages Standard Tag Library — The JavaServer Pages Standard Tag Library (JSTL), is a component of the Java EE Web application development platform. It extends the JSP specification by adding a tag library of JSP tags for common tasks, such as XML data processing, conditional… …   Wikipedia

  • JavaServer Pages Standard Tag Library — Die JavaServer Pages Standard Tag Library (Abk.: JSTL) ist eine Sammlung von vier Custom Tag Bibliotheken, die für die Erstellung von JSP Seiten hilfreich sind. Die JSTL wird im Rahmen des Java Community Process (JCP) unter JSR 052 verwaltet.… …   Deutsch Wikipedia

  • JavaServer Pages Standard Tag Library — La JavaServer Pages Standard Tag Library (JSTL), est un composant de la plate forme J2EE de développement. Elle étend la spécification JSP en ajoutant une librairie de tags pour les tâches courantes, comme le travail sur des fichiers XML, l… …   Wikipédia en Français

  • JavaServer Faces — (kurz: JSF) ist ein Framework Standard zur Entwicklung von grafischen Benutzeroberflächen für Webapplikationen. Basierend auf Servlets und JSP Technologie, gehört JSF zu den Webtechnologien der Java Platform, Enterprise Edition (Java EE).… …   Deutsch Wikipedia


Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”

We are using cookies for the best presentation of our site. Continuing to use this site, you agree with this.