Programmation JEE/JSP
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
[modifier | modifier le wikicode]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 :
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
[modifier | modifier le wikicode]@page
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Permet d'inclure une autre ressource dans la page JSP
<%@include file="./chunk.jsp" %>
@taglib
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Les scriptlets permettent l'injection de scripts interprétables dans une pile HTML.
<%! %>
[modifier | modifier le wikicode]Déclaration de variables ou de méthodes
<%!
double tva=1.21;
double calculTarif(double prix)
{
return prix*tva;
}
%>
<% %>
[modifier | modifier le wikicode]Insertion d'instructions de code
<%
double tva=1.21;
out.println(Double.parseDouble(request.getParameter("prix"))*tva);
%>
<%= %>
[modifier | modifier le wikicode]Évaluation d'expression, le résultat est retourné en out.println()
<%=new Date().toLocalString() %>
<%-- --%>
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]<%-- 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
[modifier | modifier le wikicode]Ensemble de variables prédéfinies pour accéder directement à certains objets
request
[modifier | modifier le wikicode]permet d'avoir une référence à HttpServletRequest utilisé pour contacter la JSP
response
[modifier | modifier le wikicode]permet d'avoir une référence à HttpServletResponse qui transfert le résultat du traitement de la JSP au client
pageContext
[modifier | modifier le wikicode]permet d'avoir un accès à pageContext de la JSP.
session
[modifier | modifier le wikicode]permet d'avoir une référence à HttpSession associé au client.
application
[modifier | modifier le wikicode]référence ServletContext associé à l'application contenant la JSP.
out
[modifier | modifier le wikicode]référence le flux de sortie de JspWriter permettant d'écrire dans la réponse HTTP.
config
[modifier | modifier le wikicode]permet de référencer ServletConfig associé à la JSP.
exception
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]jsp:useBean
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Prend la valeur d'une propriété d'un javabean.
Attributs :
- name :
- property :
Exemple :
<jsp:getProperty name="leManager" property="nom" />
jsp:setProperty
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Forward une requête client.
Exemple :
<jsp:forward page="/servlet/login">
<jsp:param name="username" value="jsmith" />
</jsp:forward>
jsp:plugin
[modifier | modifier le wikicode]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
[modifier | modifier le wikicode]Syntaxe JSP | Syntaxe XML | Commentaires |
---|---|---|
<%@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 correspondance | utiliser xmlns:XXX de la balise <jsp:root> |
<%! %> | <jsp:declaration></jsp:declaration> | // |
<% %> | <jsp:scriptlet></jsp:scriptlet> | // |
<%= %> | <jsp:expression></jsp:expression> | // |
<%-- --%> | pas de correspondance | // |