Vous êtes sur la page 1sur 87

Java EE

Programmation Web

JavaServer Pages (JSP)

Préparé par : Larbi Hassouni


Partie I

Java Server Page(JSP)


Introduction
Introduction A JavaServer Pages (JSP)
• JavaServer Page (JSP) est une extension de
la technologie Servlet.
• Il fournit un moyen simplifié et rapide pour
générer du contenu web dynamique.
• Il permet de mélanger du HTML statique avec
du HTML généré dynamiquement
• Il Permet ainsi de séparer la logique métier de
la présentation.

Larbi Hassouni 3
Avantages de JSP
• Séparation des contenus statiques et dynamiques:
• JSP permet la séparation des contenus statiques et dynamiques.
• Le contenu dynamique est générés par la logique de
programmation et inséré dans le cadre statique.
• Ceci simplifie énormément la création et la maintenance des
contenus web.
• Réutilisation des composants et des librairies tags:
• Le contenu dynamique peut être généré par des composants
réutilisables tells que:
• JavaBeans,
• Enterprise JavaBean (EJB)
• Libraries tag.
• Puissance et portabilité de Java
Larbi Hassouni 4
Page JSP est transformée en une Servlet Java
qui transforme une page jsp a une servelette : c’est tomcat
• Tout ce que vous pouvez faire avec JSP peut être fait
avec les servlets.
• Cependant, il est important de noter que servlets et
JSPs sont complémentaires, et non que l’un peut
remplacer l’autre.
• Servlet peut être vue comme "HTML dans Java", qui
est meilleur pour implémenter la logique métier,
puisque Java est dominant.
• JSP, au contraire d’une servlet, peut être vue comme
"Java dans HTML", qui est plus pratique pour créer
des présentations- puisque HTML est dominant.

Larbi Hassouni 5
JSPs sont transformés en des Servlets Java

• Une application Web doit généralement respecter le


modèle MVC (Model-View-Control):
control en general la requette
✓ servlets jouent le role de Controller (C), qui implique
une logique de programmation
Texte
complexe.
✓ JSPs jouent le role de (V), qui s’occupe
principalement de la présentation
✓ Le Model (M) est implémenté en utilisant les
JavaBeans et les EJBs.

Larbi Hassouni 6
Larbi Hassouni 7
Larbi Hassouni 8
c’est quoi l’ORM????

Larbi Hassouni 9
Exemple1 : Première page jsp : first.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head><title>First JSP</title></head>
<body>
<%
double num = Math.random();
if (num > 0.95) {
%>
<h2>You'll have a luck day!</h2><p>(<%= num %>)</p>
<%
} else {
%>
<h2>Well, life goes on ... </h2><p>(<%= num %>)</p>
<%
}
%>
<a href="<%= request.getRequestURI() %>"><h3>Try Again</h3></a>
</body>
</html>
Larbi Hassouni 10
Code source reçu par le navigateur qui affiche
first.jsp
Random number >0,95

<html>
<h2>You'll have a luck day!</h2>
<p>(0.987)</p>
<a href="first.jsp"><h3>Try Again</h3></a>
</html>
==========================
Random number <0,9

<html>
<h2> Well, life goes on ... </h2>
<p>(0.501)</p>
<a href="first.jsp"><h3>Try Again</h3></a>
</html>

Larbi Hassouni 11
Il est important de noter que le client ne

peut pas voir le script JSP original

(autrement, la sécurité de votre site sera

menacée), mais uniquement le résultat

généré par le script.


Larbi Hassouni 12
Derrière la scène
Lorsqu’on accède à une JSP pour la première fois,
Tomcat convertit JSP en une servlet; compile la
servlet, et exécute la servlet.
Pour “ first.jsp”, la servlet générée est
"first_jsp.java“ et stockée dans le repertoire de Tomcat:
"work\Catalina\localhost\<contextpath>\org\
apache\jsp" .

Larbi Hassouni 13
Code simplifié de la servlet générée
out.write("\n");
out.write("\n");
out.write("\n");
out.write("<!DOCTYPE html>\n");
out.write("<html>\n");
out.write("<head><title>First JSP</title></head>\n");
out.write("<body>\n");
out.write(" ");
double num = Math.random();
if (num > 0.95) {
out.write("\n");
out.write(" <h2>You'll have a luck day!</h2><p>(");
out.print( num );
out.write(")</p>\n");
out.write(" ");
} 14
Code simplifié de la servlet générée
else {
out.write("\n");
out.write(" <h2>Well, life goes on ... </h2><p>(");
out.print( num );
out.write(")</p>\n");
out.write(" ");
}
out.write("\n");
out.write(" <a href=\"");
out.print( request.getRequestURI() );
out.write("\"><h3>Try Again</h3></a>\n");
out.write("</body>\n");
out.write("</html>\n");
out.write("\n");

Larbi Hassouni 15
Explication

• Les instructions HTML sont passeés tells quelles en


argument à out.write() pour faire partie de la réponse.
• Le scriptlets JSP <% ... %> sont gardées telles quelles,
dans la servlet et constituent la logique du programme.
• Les expression JSP <%= ... %> sont placées dans
out.print(). Puisque, l’expression sera évaluée, et le
résultat de l’évaluation sera écrit comme partie de la
réponse.

Larbi Hassouni 16
Rappel sur les servlets
• Une servlet java typique contient trois types de
methodes: init(), destroy(), et une methode service()
ou plus tel que doGet() et doPost().
• init() s’exécute lorsque la servlet est chargée.
• destroy() s’exécute lorsque la servlet est déchargée.
• service() s’exécute à chaque requette HTTP. Les
méthodes service() prennent deux
arguments: request et response, correspondant
respectivement aux requêtes et réponses HTTP.
• Un objet PrintWriter est créé pour écrire la réponse
dans le réseau.

Larbi Hassouni 17
Exemple 2 : Utilisation d’un objet request
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Traitement des paramètres d'un formulaire</title>
</head>
<body>
<h3>Sélectionner un auteur:</h3>
<form method="get">
<input type="checkbox" name="auteur" value="Cay Horstman">Horstmann <br />
<input type="checkbox" name="auteur" value="David Flanagan">Flanagan<br />
<input type="checkbox" name="auteur" value="Bertrand Meyer">Meyer <br />
<input type="submit" value="Query">
</form>
<%
String[] authors = request.getParameterValues("auteur");
if (authors != null) {
%>
<h3>Vous avez sélectionné les auteurs suivants:</h3>
<ul>
<% for (int i = 0; i < authors.length; ++i) { %>
<li><%= authors[i] %></li>
<% } %>
</ul>
<a href="<%= request.getRequestURI() %>">Retour</a>
<% } %>
</body>
</html>
Larbi Hassouni 18
Composants JSP
• JSP contient quatre types de composants:
difference entre directive et instruction: instruction est par le cpu et directive est pour compilateur comm
1. Directives: messages pour le conteneur include JSP (serveur qui exécute JSP)
qui permettent au programmeur de modifier les paramètres page,
inclure du contenu à partir d’autres ressources, et spécifier les
librairie tag à utiliser dans JSP.
2. Actions: Permettent de créer des objets Java qu’on peut utiliser dans
les scriptlets JSP.
3. Eléments de Script: Permettent au programmeur d’insérer du code
Java .
4. Tag libraries: Font partie du mécanisme d’extension des tags qui
permet au programmeur de créer des tags personnalisés. Ces tags
sont très utiles pour les développeurs web qui ont peu de
connaissances en Java.

Larbi Hassouni 19
Partie II

Java Server Page(JSP)


Eléments de Script
Stratégie de conception des pages JSPs:
Limiter l’utilisation du code Java
• Imaginez que vous avez deux options:
1. Mettre directement 25 lignes du code Java dans une
page JSP
2. Mettre ces 25 lignes dans une classe Java séparée et
mettre 1 ligne qui invoque cette classe dans la page
JSP

• Laquelle selon vous est la meilleur?


la meilleur est la dexieme car editeur html ne permet pas de trouver les erreurs sinon avec java ide il aide a
trouver les erreurs

Larbi Hassouni 21
Stratégie de conception des pages JSPs:
Limiter l’utilisation du code Java
• Pourquoi la 2ème option est la meilleur?
– Facilité de développement : vous écrivez la classe séparée dans un
IDE Java et non dans un environnement HTML;
– Facilité de débogage: Une erreur de syntaxe est immédiatement
signalée lors de la compilation. Vous pouvez aussi utiliser les
techniques de débogage de votre IDE (point d’arrêts, affichage des
valeurs des variables, etc.),
– Facilité de Test. Vous pouvez tester très facilement votre classe.
– Réutilisation : vous pouvez utilizer votre classe dans plusieurs pages
JSPs.

Larbi Hassouni 22
Syntaxe de base
• Texte HTML
– <H1>xxxxxxxxx</H1>
– Envoyé au client.
– Transformé dans la servlet en
o out.print("<H1>xxxxxxxxxxx</H1>");
• Commentaires HTML
– <!-- Comment -->
– Identique aux commentaires HTML: envoyé au client
• Commentaires JSP
– <%-- Comment --%>
– N'est pas envoyé au client
• Obtenir en sortie <%
– Pour obtenir <% en sortie, utiliser <\%
Larbi Hassouni 23
Types d’éléments de scripts JSP
• Expressions
– Format: <%= expression java %>
– Evaluée et le résultat est affiché à l’endroit où elle se trouve
– Insérée dans la méthode _jspService de la servlet _jsp en
– out.print(expression)
• Scriptlets
– Format: <% code java %>
– Insérée mot pour mot dans la méthode _jspService de la servlet _jsp
• Declarations
– Format: <%! Code java %>
– Insérée mot pour mot dans le corps de la servlet _jsp à l’extérieur de toute
méthode existante,
• Syntaxe XML
– Ces trois éléments de scripts peuvent être écrits en utilisant une notation
XML.

Larbi Hassouni 24
Expressions JSP:
<%= expression %>

Larbi Hassouni 25
Expressions JSP
• Format
– <%= Expression Java %>
• Resultat
– Expression est évaluée, convertie en une String, placée dans la page
HTML à l’endroit où elle est rencontrée dans la page JSP
– Insérée dans la méthode _jspService de la servlet _jsp et transformée en
– out.print(expression);
• Exemples
– Date et Heure: <%= new java.util.Date() %>
– Le nom de votre machine est: <%= request.getRemoteHost() %>
• Syntaxe compatible XML
– <jsp:expression>Java Expression</jsp:expression>
– Vous ne devez pas mélanger les deux notations. Si vous utilisez la
syntaxe XML, il faut l’utiliser pour la page entière.
Larbi Hassouni 26
Correspondance JSP/Servlet
• JSP Original
<H1>A Random Number</H1>
<%= Math.random() %>
• Code correspondant dans la méthode _jspService de la servlet _jsp
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
HttpSession session = pageContext.getSession();
…………….
JspWriter out = pageContext.getOut();
out.println("<H1>A Random Number</H1>");
out.println(Math.random());
...
}
Larbi Hassouni 27
Expressions JSP : Exemple
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Scripting Elts</title>
</head>
<body>
<H2>JSP Expressions</H2>
<UL>
<LI>Current time: <%= new java.util.Date() %></li>
<LI>Server: <%= application.getServerInfo() %></li>
<LI>Session ID: <%= session.getId() %></li>
<LI>The <CODE>testParam</CODE> form parameter:
<%= request.getParameter("testParam") %></li>
</UL>

</body>
</html>
Larbi Hassouni 28
Servlet résultat de la transformation de la page JSP
public final class _01scripting_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {

private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();

private static java.util.List<String> _jspx_dependants;

private org.glassfish.jsp.api.ResourceInjector _jspx_resourceInjector;

public java.util.List<String> getDependants() {


return _jspx_dependants;
}

public void _jspService(HttpServletRequest request, HttpServletResponse response)


throws java.io.IOException, ServletException {
PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
Object page = this;
JspWriter _jspx_out = null;
PageContext _jspx_page_context = null;
Larbi Hassouni 29
try {
response.setContentType("text/html;charset=UTF-8");
pageContext = _jspxFactory.getPageContext(this, request, response,
null, true, 8192, true);
_jspx_page_context = pageContext;
application = pageContext.getServletContext();
config = pageContext.getServletConfig();
session = pageContext.getSession();
out = pageContext.getOut();

out.write("\n");
out.write("\n");
out.write("\n");
out.write("<!DOCTYPE html>\n");
out.write("<html>\n");
out.write(" <head>\n");
out.write(" <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\n");
out.write(" <title>Scripting Elts</title>\n");

Larbi Hassouni 30
out.write(" </head>\n");
out.write(" <body>\n");
out.write(" <H2>JSP Expressions</H2>\n");
out.write(" <UL>\n");
out.write(" <LI>Current time: ");
out.print( new java.util.Date() );
out.write("</li>\n");
out.write(" <LI>Server: ");
out.print( application.getServerInfo() );
out.write("</li>\n");
out.write(" <LI>Session ID: ");
out.print( session.getId() );
out.write("</li>\n");
out.write(" <LI>The <CODE>testParam</CODE> form parameter:\n");
out.write(" ");
out.print( request.getParameter("testParam") );
out.write("</li>\n");
out.write(" </UL>\n");
out.write("\n");
out.write(" </body>\n");
out.write("</html>\n");
} catch (Throwable t) {
……………………………………;

Larbi Hassouni 31
Objets implicites
(Variables prédéfinies)
• request
– L’objet HttpServletRequest (1st argument de service/doGet)
• response
– L’objet HttpServletResponse (2nd arg de service/doGet)
• out
– Une version avec buffer de l’objet out généré avec
response.getWriter(). Utilisé pour envoyer des sorties au client (il est
du type JspWriter)
• session
– L’objet HttpSession associé avec request (à moins qu’il soit désactivé
avec l’attribut session de la directive page)
• application
– L’objet ServletContext obtenu avec getServletContext() et permet
de partager les données entreLarbi
lesHassouni
différentes servlets et pages JSP 32
de l’application web.
Comparaison entre Servlets et JSP:
Lecture de trois paramètres
(Servlet)

Larbi Hassouni 33
package pkg;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(name = "ThreeParams", urlPatterns = {"/ThreeParams"})
public class ThreeParams extends HttpServlet {
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
try (PrintWriter out = response.getWriter()) {
/* TODO output your page here. You may use following sample code. */
out.println("<!DOCTYPE html>");
out.println("<html>");
out.println("<head>");
out.println("<title>Servlet ThreeParams</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Servlet ThreeParams at " + request.getContextPath() + "</h1>");
out.println("<LI><B>param1</B>: " + request.getParameter("param1") + "</LI>");
out.println("<LI><B>param2</B>: " + request.getParameter("param2") + "</LI>");
out.println("<LI><B>param3</B>: " + request.getParameter("param3") + "</LI></UL>");
out.println("</body>");
out.println("</html>");
}
} Larbi Hassouni 34
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
processRequest(request, response);
}

Larbi Hassouni 35
Comparaison entre Servlets et JSP:
Lecture de trois paramètres
(JSP)

Larbi Hassouni 36
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<H1>Reading Three Request Parameters</H1>
<UL>
<LI><B>param1</B>: <%= request.getParameter("param1") %></LI>
<LI><B>param2</B>: <%= request.getParameter("param2") %></LI>
<LI><B>param3</B>: <%= request.getParameter("param3") %></LI>
</UL>
</body>
</html>

Larbi Hassouni 37
Scriptlets JSP:
<% Code java %>

Larbi Hassouni 38
Scriptlets JSP : <% Code java %>

• Format
– <% Code Java %>
• Resultat
– Le code Java est inséré mot pour mot dans la méthode _jspService
de la servlet _jsp
• Exemple
– <% String queryString = request.getQueryString(); %>
Chaîne requête: <%= queryString %>
– <% response.setContentType("text/html"); %>
• Syntaxe compatible-XML
– <jsp:scriptlet>Java Code</jsp:scriptlet>

Larbi Hassouni 39
Correspondance JSP/Servlet
• JSP Original
<H2>foo</H2>
<%= bar() %>
<% baz(); %>
• Code résultat de la transformation JSP vers Servlet
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
HttpSession session = request.getSession();
JspWriter out = response.getWriter();
out.println("<H2>foo</H2>");
out.println(bar());
baz();
...
Larbi Hassouni 40
Scriptlets JSP : Exemple

• Supposons que vous voulez laisser


des utilisateurs finaux personnaliser
la couleur de fond d'une page
– Qu’est ce qui ne va pas avec ce code?

<BODY BGCOLOR=
"<%= request.getParameter("bgColor") %>">

Larbi Hassouni 41
Scriptlets JSP: Exemple
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Scriptlet JSP</title>
</head>
<%
String bgColor = request.getParameter("bgColor");
if ((bgColor == null) || (bgColor.trim().equals(""))) {
bgColor = "white";
}
%>
<body bgcolor="<%= bgColor %>">
<h2 align="center">Test de la couleur de fond "<%= bgColor %>".</h2> <br />
<form>
Couleur: <input type="text" name="bgColor">
<input type="submit" value="Essayer cette couleur">
</form>
</body>
</html>
Larbi Hassouni 42
Larbi Hassouni 43
Exemple d’utilisation d’une instruction de contrôle du flux dans
une scriptlet : Instruction IF

• Rappel
–Scriplets sont insérées exactement telles quelles sont écrites
–N’est pas obligé qu’elles soient des expressions Java complètes
–Cependant, les expressions Java complètes sont plus claires et
plus faciles à maitenir.
• Exemple
– <% if (Math.random() < 0.5) { %>
Have a <B>nice</B> day!
<% } else { %>
Have a <B>lousy</B> day!
<% } %>
• Code coorespondant dans la servlet
– if (Math.random() < 0.5) {
out.println("Have a <B>nice</B> day!");
} else {
out.println("Have a <B>lousy</B> day!");
} Larbi Hassouni 44
Déclarations JSP:

<%! Code Java%>

Larbi Hassouni 45
Déclarations JSP:<%! Code Java%>
• Format
– <%! Code Java %>
• Resultat
– Code java est inséré exactement tel quel dans la définition de la
classe _jsp à l’extérieur de toute méthode
• Exemples
– <%! private int someField = 5; %>
– <%! private void someMethod(...) {...} %>
• Considération relative à la conception
– Les attributs sont très utiles
– Pour les méthodes au contraire, il est plus utile de les définir dans
une classe Java séparée.
• Syntaxe compatible-XML
– <jsp:declaration>Code Java</jsp:declaration>
Larbi Hassouni 46
Correspondance JSP/Servlet

• JSP Originel
<H1>Some Heading</H1>
<%!
private String randomHeading() {
return("<H2>" + Math.random() + "</H2>");
}
%>
<%= randomHeading() %>

• Meilleur alternative:
– Mettre la méthode randomHeading() comme
une méthode statique dans une clase séparée

Larbi Hassouni 47
Correspondance JSP/Servlet
• Code correspondant dans la servlet _jsp
public class xxxx implements HttpJspPage {
private String randomHeading() {
return("<H2>" + Math.random() + "</H2>");
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html"); HttpSession session
= request.getSession(); JspWriter out =
response.getWriter(); out.println("<H1>Some
Heading</H1>");
out.println(randomHeading());
...
} ...

Larbi Hassouni 48
Declarations JSP : Exemple d’utilsation
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<h1>JSP Declarations</h1>
<%! private int accessCount = 0; %>
<h2>Accesses to page since server reboot:
<%= ++accessCount %></h2>
</body>
</html>

Larbi Hassouni 49
Larbi Hassouni 50
Déclarations JSP et Objets implicites
• Problème
– Les objets implicites ou variables prédéfinies (request, response, out,
session, etc.) sont locales à la méthode _jspService. Par conséquent, ils ne
sont pas accessibles à partir des déclarations JSP et des classes utilitaires.
Comment faire pour les utiliser?
• Solution: Passez-les en arguments
Créer votre classe utilitaire qui contient des méthodes ayant des arguments de type des variables
prédéfinies:
Package somePackage
public class SomeClass {
public static void someMethod(HttpSession s) {
doSomethingWith(s);
}}

Dans la page JSP,
<% somePackage.SomeClass.someMethod(session); %>?

Larbi Hassouni 51
• Notes

– De même si vous utilisez des méthodes dans une déclaration

JSP, vous pouvez utilizer la même solution.

• Cependant les classes séparées sont préférables aux declarations JSP.

– Attention : println de JSPWwriter lance IOException

Larbi Hassouni 52
Partie III

Java Server Page(JSP)


Les Directives

Larbi Hassouni 53
Qu’est ce qu’une directive?
Une directive JSP affecte la structure globale de
la servlet générée à partir de la page JSP
page.
Une directive peut être écrite selon l’un des deux
formats ci-dessous.
<%@ directive attribute="value" %>
<%@ directive attribute1="value1"
attribute2="value2"
...
attributeN="valueN" %>

Larbi Hassouni 54
En JSP, il ya trois directives principales:
1. page,
2. include,
3. taglib.
1. La première directive, page, vous permet de contrôler la structure
de la servlet qui correspond à la page JSP en permettant d’importer des
classs, personnaliser la superclasse de la servlet générée, définir le type
MIME de la sortie de la page, …etc.
La directive page peut être placée n’importe où dans une page JSP
2. La seconde directive, include, vous permet d’insérer un
fichier dans la page JSP lors de la transformation de la page
JSP en la servlet correspondante.
La directive include doit être placée dans la page JSP à
l’endroit où on veut insérer le fichier.
3. La troisième directive, taglib, permet de définir des balises
personnalisées (custom markup tags).
Larbi Hassouni 55
Java Server Page(JSP)
Directive page
(Contrôler la structure de la servlet générée)

Larbi Hassouni 56
La directive page vous permet de définir les attributs, qui
sont sensibles à la casse, ci-dessous:
• import,
• contentType,
• pageEncoding,
• session, booleen
• isELIgnored, par defaut false
• buffer,
• autoFlush,
• info,
• errorPage,
• isErrorPage,
• isThreadSafe,
• language,
• extends. Larbi Hassouni 57
L’attribut import
• Format
– <%@ page import="package.class" %>
– <%@ page import="package.class1,...,package.classN" %>
• Objetctif
–Générer les instructions import dans la définition de
la servlet correspondante,
• Notes
–Les pages JSP peuvent se trouver n’importe où dans
l’application, cependant les classes importées doivent
se trouver dans les répertoire où on place
normalement les servlets
…/WEB-INF/classes or
…/WEB-INF/classes/package
Larbi Hassouni 58
L’emplacement de la servlet générée et qui

correspond à une page JSP dépend du serveur

d’application, par conséquent:

il faut toujours utiliser des packages

pour les classes utilitaires importées

dans une page JSP!


Larbi Hassouni 59
Attributs contentType et pageEncoding

• Format
– <%@ page contentType="MIME-Type" %>
– <%@ page contentType="MIME-Type; charset=Character-Set" %>
– <%@ page pageEncoding="Character-Set" %>
• Objectif
– Spécifier le type MIME de la page générée par la servlet qui
correspond à la page JSP
• Notes
– La valeur d’un attribut ne peut pas être calculé

Larbi Hassouni 60
La valeur d’un attribut ne peut pas être calculée durant le temps d’exécution, de
même qu’une directive page ne peut pas être insérée derrière une condition
comme il est le cas pour un texte.
Ainsi, après le script suivant:

<% boolean usingExcel = checkUserRequest(request); %>


<% if (usingExcel) { %>
<%@ page contentType="application/vnd.ms-excel" %> toujours execute
<% } %>

Le type du contenu sera “application/vnd.ms-excel” quelle que soit la valeur de


usingExcel

Pour résoudre ce problème, utiliser une scriptlet qui fait appel à la méthode
setContentType de l’objet response comme ce qu’on fait dans une servlet:
<%
String format = request.getParameter("format");
if ((format != null) && (format.equals("excel"))) {
response.setContentType("application/vnd.ms-excel");
}
%>

Larbi Hassouni 61
L’attribut session
• Format toute les pages fasse partie au mm si est true
–<%@ page session="true" %> <%-- Default --%>
–<%@ page session="false" %>
• Objectif
–Désigner la page comme ne faisant pas partie de la
session
• Notes
–Par default, une page fait partie d’une session
–Exclure une page de la session sauvegarde de
l’espace mémoire du serveur ce qui est nécessaire
pour un site très sollicité
–Toutes les pages reliées doivent être exclues de la
session pour une meilleur efficacité.
Larbi Hassouni 62
Attribut isELIgnored

• Format
–<%@ page isELIgnored="false" %><%-- Default --%>

–<%@ page isELIgnored="true" %>

• Objectif
–Contrôler si le langage EL (Expression Langage) est ignoré
(true) ou évalué normalement (false = valeur par défaut).

Larbi Hassouni 63
L’attribut buffer
• Format
–<%@ page buffer="taille en ko" %>
–<%@ page buffer="none" %>
• Objectif
–Donner une taille au buffer utilisé par l’objet implicite out.
• Notes
–Bufferiser vous permet de définir les headers HTTP même si
vous avez déjà généré des sorties (mais à condition que le
buffer ne soit pas rempli (donc vidé automatiquement :
autoflushed) ou implicitement vidée (flushed))
–Les serveurs sont autorisés à allouer une plus grande taille
mais pas une taille plus petite.
–Par défaut la taille dépend du système, mais doit être au
moins de 8ko. Larbi Hassouni 64
L’attribut info

• Format
–<%@ page info= "message" %>
• Objectif
définit une string qui peut être retrouvée à partir
de la servlet par la méthode getServletInfo.

Larbi Hassouni 65
L’attribut errorPage
• Format
–<%@ page errorPage="URL relative" %> page qui va traite les exp

• Objectif
–Specifies une page JSP qui peut traiter n’importe quelle
exception lancée mais non attrapée par la page JSP en cours.
• Notes
–L’exception lancée sera automatiquement disponible dans la
page JSP spécifiée par l’intermédiaire de l’objet implicite
"exception".
–L'attribut errorPage désigne les exceptions spécifiques à la
page en cours. Pour désigner une page de traitement des
exceptions qui s'applique à toute une application, ou pour
des erreurs de différentes catégories dans une application,
utiliser l'élément error-page dans web.xml.
Larbi Hassouni 66
fichier de deploiement il contient quoi ?
L’attribut isErrorPage
• Format
–<%@ page isErrorPage="true" %>
–<%@ page isErrorPage="false" %> <%-- Default --%>
• Objectif
–Indiquer si la page en cours peut opérer comme une page
de traitement des exceptions pour une autre page JSP.
• Notes
–Une nouvelle variable prédéfinie appelée « exception » est
créée et accessible depuis la page de traitement des
exceptions.
• N’oubliez pas de toujours tester si une donnée d’une requête est
manquante ou ayant une valeur malformée.

Larbi Hassouni 67
Attributs errorPage et isErrorPage : Exemple

Fichier index.html

<!DOCTYPE html>
<html>
<head>
<title>Attribus errorPage et isErrorPage</title>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,
initial-scale=1.0">
</head>
<body>
<form action="genereException.jsp" method="get">
Numérateur : <input type="text" name="num"><br/>
Dénominateur : <input type="text" name="denom"><br/>
<input type="submit" value ="Envoyer">
</form>
</body>
</html>

Larbi Hassouni 68
Attributs errorPage et isErrorPage : Exemple
Fichier genereException.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="JSP-Styles.css" type="text/css">
<title>Attributs errorPage et isErrorPage</title> </head>
<body>
<%@ page errorPage="/WEB-INF/traiteException.jsp" %>
<table border=5 align="center">
<tr><th class="title"> Génération d'une exception</th></tr></table>
<%!
private int toInteger(String value) {
return(Integer.parseInt(value)); //Peut générer une exception } %>
<% int numerateur = toInteger(request.getParameter("num"));
int denominateur = toInteger(request.getParameter("denom"));
int quotient = numerateur/denominateur; //peut générer une exception %>
<ul>
<li>Numérateur: <%= numerateur %>.</li>
<li>Dénominateur: <%= denominateur %>.</li>
<li>Quotient: <%= quotient %>.</li> </ul>
</body></html>
Larbi Hassouni 69
Attributs errorPage et isErrorPage : Exemple
Fichier traiteException.jsp
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<link rel="stylesheet" href="JSP-Styles.css" type="text/css">
<title>Traitemen des exceptions</title>
</head>
<body>
<%@ page isErrorPage="true" %>
<table border=5 align="center">
<tr><th class="title"> Traitement des exceptions</th></tr></table>
<p>
traiteException.jsp a attrapée l'exception suivante :<I><%= exception %></I>.
Ce problème s'est produit dans :
<pre>
<%@ page import="java.io.*" %>
<% exception.printStackTrace(new PrintWriter(out)); %>
</pre>
</p>
</body>
</html>
Larbi Hassouni 70
Attributs errorPage et isErrorPage : Exemple

Larbi Hassouni 71
Attributs errorPage et isErrorPage : Résultat avec exception

Larbi Hassouni 72
L'attribut extends
• Format
–<%@ page extends="package.class" %>
• Objectif
–Spécifier la classe parent de la servlet
génée qui correspnd à la page JSP
• Notes
–Utiliser avec une extrême précaution
–L'objectif principal est de vous permettre d'étendre
des classes fournies par des éditeurs de serveurs en
vue d'utiliser des caractéristiques spécifiques.

Larbi Hassouni 73
L'attribut isThreadSafe
Format
– <%@ page isThreadSafe="true" %> <%-- Default --%>
– <%@ page isThreadSafe="false" %>
Objectif
L'attribut isThreadSafe contrôle si la servlet générée qui correspond à la
page JSP va autoriser un accès concurrent (par défaut) ou va l'empécher
(false)
• Notes
– Eviter de modifier cet attribut
– Le placer à false peut causer une dégradation des
performances du système dans certaines situations

Larbi Hassouni 74
Java Server Page(JSP)
inclusion de fichier dans
des pages JSP

Larbi Hassouni 75
Inclusion de page
lors de l'exécution
action jsp:include

Larbi Hassouni 76
Inclusion de Pages durant le temps d'exécution
jsp:include
• Format
– <jsp:include page="Addresse relative" />
• Objectif
– Inclure la sortie générée par une page JSP, servlet, page HTML, ou Plain
Texte dans celui d'une page JSP principale
– Permettre au contenu inclus d'être mis à jour sans changer la page
JSP principale
• Notes
– Le contenu JSP du fichier inclus ne peut pas affecter la page
principale. Seul le résultat d'exécution est utilisé
– L'URL du fichier inclus est relative au répertoire ou se trouve la page JSP
principale. Si l'URL commence par un slash, elle est relative au répertoire
racine de l'application.
– Il est permis d'inclure des fichiers qui se trouvent dans le répertoire
WEB-INF
Larbi Hassouni 77
jsp:include
Exemple d'utilisation
Page JSP principale

<body>

<h1>What's New at JspNews.com</h1>


<p>
Here is a summary of our three most recent news stories:
<ol>
<li><jsp:include page="/WEB-INF/includes/Item1.jsp"></li>
<li><jsp:include page="/WEB-INF/includes/Item2.jsp"></li>
<li><jsp:include page="/WEB-INF/includes/Item3.jsp"></li>
</ol>
</body>
</html>
Larbi Hassouni 78
jsp:include
Exemple d'utilisation
1er fichier inclu : item1.jsp du repertoire WEB-INF\includes

<B>Bill Gates acts humble.</B>


In a startling and unexpected development, Microsoft big
wig Bill Gates put on an open act of humility yesterday.
<A HREF="http://www.microsoft.com/Never.html"> More
details...</A>

Remarque :
Noter que le fichier inclus n'est pas une page HTML complete, il
contient uniquement les balises appropriée à la place où il sera
inséré.

Larbi Hassouni 79
Inclusion de fichiers

lors de la translation JSP => Servlet

Directive <%@ include … %>

Larbi Hassouni 80
Inclusion de fichiers lors de la translation JSP => Servlet
Directive <%@ include … %>

• Format
–<%@ include file="Adresse relative" %>
• Objectif
–Réutiliser un fichier JSP dans plusieurs pages, dans le cas
ou le contenu JSP du fichier inclus affecte la page JSP
principale
• Notes
–Les serveurs ne détectent pas les changements apportés aux
fichiers inclus.
–Par conséquent vous êtes tenu à modifier la page JSP
principale à chaque changement d'un fichier inclus. Ceci
parce que la translation n'est effectué que lors du
changement de la page JSP principale.
Larbi Hassouni 81
jsp:include vs. <%@ include …>
1
2 jsp:include <%@ include …%>
Syntaxe de base <jsp:include page="..." /> <%@ include file="..." %>
Quand l'inclusion se Temps d'exécution Temps Translation
produit? JSP=>Servlet
Qu'est ce qui est inclus? Sortie de page Contenu de fichier
Nombre de servlets
Deux Une
résultantes
La page incluse peut elle
définir les headers qui Non Oui
affectent la page principale?
La page incluse peut elle définir
des champs et méthodes que la Non Oui
page principale peut utliser?
La page principale doit-elle être
mise à jour lorsqu'une page Non Oui
incluse est modifiée?
Quel est le code de la servlet Méthode include de l'objet
Non
équivalent? RequestDispatcher

Larbi Hassouni 82
Quand utiliser la directive ou l'action?
• Utiliser l'action jsp:include chaque fois que c'est
possible
–La modification des fichiers inclus ne nécessitent pas
la mise à jour de la page principale
–La différence de vitesse entre l'action (jsp:include) et la
directive (@include) est insignifiant
• Utiliser la directive (<%@ include …%>) lorsque le
code jsp de la page inculse affecte la page
principale
–Page incluse
• <%! int accessCount = 0; %>
–Page principale
• <%@ include file="snippet.jsp" %>
• <%= accessCount++ %>
Larbi Hassouni 83
Exemple d'utilisation de la Directive include
Pied de page réutilisable
<%@ page import="java.util.Date" %>
<%-- Les champs spécifiés dans la déclaration jsp ci-dessous deviendront des
attributs de la servlet qui résultera de la page jsp qui inclut ce fichier. --%>
<%!
private int accessCount = 0;
private Date accessDate = new Date();
private String accessHost = "<I>No previous access</I>";
%>
<p>
<hr>
<% accessHost = request.getRemoteHost(); %>
<% accessDate = new Date(); %>
Cette page &copy; 2014
<A HREF="http//www.my-company.com/">my-company.com</A>.
Cette page a été consultée <%= ++accessCount %> fois depuis que le démarrage
du serveur. Elle a été consulté récemment par
<%= accessHost %> at <%= accessDate %>.

Larbi Hassouni 84
Exemple d'utilisation de la Directive include
Page principale typique


<body>
<h1>Une quelconque pad</h1>
<p>Informations sur nos produits et services.</p>
<p>Blah, blah, blah.</p>
<p>hadda, hadda, hadda.</p>
<%@ include file="/WEB-INF/includes/ContactSection.jsp" %>
</body>
</html>

Larbi Hassouni 85
Comprendre jsp:include vs. <%@ include … %>

• Le pied de page définit l'attribut


accessCount field (instance variable)
• Si la page principale doit utiliser l'attribut
accessCount, seule la directive @include
peut le permettre.
L'action jsp:include ne peut pas être utilisée
puisque accessCount sera indéfinie
• Dans cet exemple la page principale n'utilise pas
l'attribut accessCount
–Alors pourquoi la directive @include est utilisée?

Larbi Hassouni 86
Larbi Hassouni 87

Vous aimerez peut-être aussi