< Programmation JEE

Java Server Pages ou JSP est une technologie basée sur Java permettant de créer des pages web dynamiques à l'aide du langage java en l'intégrant au contenu HTML de la page à l'aide de scriptlets. Le code source est ensuite pré-compilé en Java Applets, puis converti en fichier HTML par le serveur d'applications. Ainsi le code n'est pas diffusé et devient difficilement téléchargeable depuis un navigateur web à moins d'en avoir l'accès. De ce fait, les risques de piratage en sont réduits. On compare souvent cette technologie à PHP, mais son fonctionnement se rapproche bien plus d'ASP .NET car le code est compilé et non interprété.

Installation

Windows et Ubuntu ne permettent pas de lire les fichiers .jsp par défaut. Il faut donc télécharger et installer un serveur d'application Java EE tel que :

  1. Apache Tomcat
  2. Glassfish
  3. JBoss Application Server

et bien d'autres encore.

Pour Tomcat, une fois lancé (dans Windows : démarrer, exécuter..., services.msc, ou bien en commande DOS : net start "Tomcat7") il suffit de placer les fichiers .jsp dans le répertoire adéquat pour qu'ils soient interprétés par le serveur (par défaut sur Windows 7 dans C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\examples\). L'URL pointant vers ce répertoire est http://localhost:8080/examples/.

Directives JSP

@page

Définit le code généré durant le traitement de la page JSP

<%@page contentType="text/html"
        pageEncoding="UTF-8"
        errorPage="erreur.jsp"
        import="java.util.*"
%>


Attributs :

  • language="language" : langage à utiliser dans la jsp
  • extends="package.nomDeClasse" : nom de la classe dont la page JSP va hériter
  • import="nomDePackage1, nomDePackage2..." : noms des packages importés dans le code
  • session="booléen" : détermine si la session est accessible depuis la JSP
  • buffer="taille" : détermine la taille du buffer utilisé par JspWriter de la JSP
  • autoFlush="booléen" : indique si le contenu du buffer doit être envoyé automatiquement vers le client une fois plein
  • isThreadSafe="booléen" : indique le modèle de thread utilisé pour le traitement de la requête HTTP concernant la page JSP
  • errorPage="url relative" : ressource appelée quand une exception est déclenchée et qu'il n'y a pas de try{}catch{} dans la page
  • isErrorPage="booléen" : indique si la page gère les exceptions
  • contentType="type Mime" : indique le type de documents contenus dans la réponse HTTP généré par la JSP
  • pageEncoding="type d'encodage" : détermine le type d'encodage des caractères de la réponse HTTP

@include

Permet d'inclure une autre ressource dans la page JSP

  <%@include file="./chunk.jsp" %>

@taglib

Permet d'utiliser une bibliothèque de balises JSP en utilisant un espace de nom.

<%-- Défini l'espace de nom "fmt" pour utiliser une bibliothèque de balises --%>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>

<%-- Par la suite on utilise l'espace de nom fmt pour les balises de la bibliothèque --%>
<fmt:setBundle basename="informatique.ressources" />
<fmt:message key="service" />

Scriptlets

Les scriptlets permettent l'injection de scripts interprétables dans une pile HTML.

<%! %>

Déclaration de variables ou de méthodes

<%!
   double tva=1.21;
   double calculTarif(double prix)
   {
      return prix*tva;
   }
%>

<% %>

Insertion d'instructions de code

<%
   double tva=1.21;
   out.println(Double.parseDouble(request.getParameter("prix"))*tva);
%>

<%= %>

Evaluation d'expression, le résultat est retourné en out.println()

<%=new Date().toLocalString() %>

<%-- --%>

Commentaires

<%-- Ceci est un commentaire --%>

Contrairement à un commentaire HTML standard entre <!-- et -->, les commentaires JSP entre <%-- et --%> ne sont pas écrits dans la page HTML générée.

Exemple

<%-- index.jsp --%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"
    errorPage="erreur.jsp"
    %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  <title>Insert title here</title>
 </head>
 <body>
  <%! 
    String[] langages = {"Java", "CLisp", "Scheme", "OCaml"};
  %>
  <%
    // levée d'une ArrayIndexOutOfBoundsException
    for (int i=0; i < 4; i++) {
      out.println(langages[i]);
    }
  %>
 </body>
</html>


Lorsqu'une erreur est levée par exemple en remplaçant le nombre d'itérations de 4 à 5, la directive page renvoie sur erreur.jsp


<%-- erreur.jsp --%>
<%@ page isErrorPage="true"%>
<html>
  <body>
    exception levée <b> <%= exception %> </b>
    <hr>
    <h3>trace de la pile</h3>
    <pre>
      <%
         java.io.PrintWriter pw = new java.io.PrintWriter(out);
         exception.printStackTrace(pw);
      %>
    </pre>
  </body>
</html>

Objets implicites

Ensemble de variables prédéfinies pour accéder directement à certains objets

request

permet d'avoir une référence à HttpServletRequest utilisé pour contacter la JSP

response

permet d'avoir une référence à HttpServletResponse qui transfert le résultat du traitement de la JSP au client

pageContext

permet d'avoir un accès à pageContext de la JSP.

session

permet d'avoir une référence à HttpSession associé au client.

application

référence ServletContext associé à l'application contenant la JSP.

out

référence le flux de sortie de JspWriter permettant d'écrire dans la réponse HTTP.

config

permet de référencer ServletConfig associé à la JSP.

exception

est disponible seulement dans une page dédiée aux erreurs et permet de référencer Exception qui redirige sur cette page de gestion d'erreur.

Balises JSP

jsp:useBean

Crée une instance d'un objet javabean.

Attributs :

  • id :
  • scope :
  • class :
  • type :
  • beanName :


Exemple :

<jsp:useBean>
   id="leManager"
   type="pack.Personne"
   class="pack.Manager"
   scope="request"
</jsp:useBean>

jsp:getProperty

Prend la valeur d'une propriété d'un javabean.

Attributs :

  • name :
  • property :


Exemple :

<jsp:getProperty name="leManager" property="nom" />

jsp:setProperty

Assigne une valeur à la propriété d'un javabean.

Attributs :

  • name :
  • property :
  • value :


Exemple :

<jsp:useBean id="manager" scope="session" class="pack.Manager" type="pack.Manager" />
<jsp:setProperty name="manager" property="heureConnexion" value="<%=new Date().toLocaleString()%>" />

jsp:include

Inclut une ressource statique ou dynamique et possède la balise <jsp:param> permettant de transmettre des paramètres à la ressource par l'attribut name (nom du paramètre) et l'attribut value (valeur du paramètre).

Attributs :

  • page :
  • flush :


Exemple :

<jsp:include page="/NbColis">
   <jsp:param name="code" value="<%=request.getParameter("codeClient") %>" />
</jsp:include>

jsp:forward

Forward une requête client.


Exemple :

<jsp:forward page="/servlet/login"> 
  <jsp:param name="username" value="jsmith" /> 
</jsp:forward>

jsp:plugin

Gère l'insertion d'un applet dans une page JSP.

Attributs :

  • type :
  • code :
  • codebase :
  • archive :
  • name :
  • align :
  • width :
  • height :
  • vspace / hspace :
  • jreversion :
  • nspluginurl :
  • iepluginurl :


Exemple :

<jsp:plugin type=applet code="Molecule.class" codebase="/html"> 
    <jsp:params> 
          <jsp:param name="molecule" value="molecules/benzene.mol" /> 
    </jsp:params> 
    <jsp:fallback> 
          <p>Impossible de charger l'applet</p> 
    </jsp:fallback> 
</jsp:plugin>

Syntaxe XML

Syntaxe JSPSyntaxe XMLCommentaires
<%@page %><jsp:directive.page></jsp:directive.page>attributs identiques pour les deux versions
<%@include %><jsp:directive.include></jsp:directive.include>attributs identiques pour les deux versions
<%@taglib %>pas de correspondanceutiliser xmlns:XXX de la balise <jsp:root>
<%! %><jsp:declaration></jsp:declaration>//
<% %><jsp:scriptlet></jsp:scriptlet>//
<%= %><jsp:expression></jsp:expression>//
<%-- --%>pas de correspondance//

Voir aussi

Cet article est issu de Wikibooks. Le texte est sous licence Creative Commons - Attribution - Partage dans les Mêmes. Des conditions supplémentaires peuvent s'appliquer aux fichiers multimédias.