Vous êtes sur la page 1sur 38

INSA - ASI

TechnoWeb : Les JSP

1/38

Technologie Web
Les Java Servlet Pages (JSP)

Alexandre Pauchet
INSA Rouen - Dpartement ASI
BO.B.RC.18, pauchet@insa-rouen.fr

INSA - ASI

TechnoWeb : Les JSP

2/38

Plan

Introduction Fonctionnement Inclusion/Dlgation JSP&JavaBeans Standard Tag Library

INSA - ASI

TechnoWeb : Les JSP

3/38

Introduction

(1/4)

Description dune JSP

JSP = Java Servlet Page Les JSP sont comparables PHP Langage de script ct serveur

Une page JSP contient : Du contenu statique (texte simple, XHTML, XML, . . . ) Du code JSP qui produit dynamiquement du contenu

INSA - ASI

TechnoWeb : Les JSP

4/38

Introduction
Premier exemple

(2/4)

hello.jsp
<%@ page contentType="text/html; charset=utf-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head> < title >Ma premire page JSP</title> </head> <body> <% String prenom=request.getParameter("prenom"); %> <h1>Bonjour <%=(prenom!=null && prenom.length()!=0)?prenom:"bel(le) inconnu(e)"%></h1> <% if (prenom!=null && prenom.equals("le monde")) { %> <h2>Bien jou !!!!</h2> <% } %> <form action="hello.jsp" method="post"> <label>Prnom : </label><input type="text" name="prenom" size="30"> <input type="submit" value="envoyer"> </form> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

5/38

Introduction

(3/4)

Traduction, compilation, instanciation, . . .

Une JSP est transforme en servlet Fonctionnement :


1 2

Requte sur une JSP Une servlet compare les dates de la JSP et de sa servlet Si la servlet de la JSP est plus ancienne que la page :
Traduction de la JSP en servlet (drivation) Compilation de la servlet (cf. rpertoire work)

Si la servlet de la page na pas encore t charge


Chargement de la servlet Instanciation Initialisation de la servlet avec la mthode jspInit

4 5

Invocation de la mthode _jspService Appel de jspDestroy lors du dchargement de la servlet

INSA - ASI

TechnoWeb : Les JSP

6/38

Introduction

(4/4)

Quelques lments JSP

<%@ ... %> : directives (validit : page) <%! ... %> : dclarations <% ... %> : scriptlet (i.e. script : tests, itration, . . . ) <%= ... %> : rcupration dune valeur dexpression (i.e. valuation) <jsp: include ... /> : inclusion lexcution <jsp:forward ... /> : dlgation un autre composant <jsp:useBean ... /> : utilisation dun java bean

INSA - ASI

TechnoWeb : Les JSP

7/38

Fonctionnement
Directives de page

(1/12)

Ces directives sappliquent la page

Syntaxe
<%@ page directive %>

Exemples
<%@ page contentType="text/plain; charset=UTF-8" %> <%@ page import="java.io.*, java.util.*" %> <%@ page isThreadSafe="false" %> // 1 seule requte la fois entre le conteneur // et la JSP

INSA - ASI

TechnoWeb : Les JSP

8/38

Fonctionnement

(2/12)

Paramtres dexcution dune page JSP

Lexcution dune JSP est paramtrable via la directive page <%@ page buer="none|xxxkb"%> Spcie la taille du buer o est renvoye la rponse. Un petit buer allge en charge le serveur dapplication et envoie la rponse plus rapidement. <%@ page errorPage="le_name"%> Spcie la page (JSP ou non) vers laquelle le serveur dapplication renvoie lorsquune exception non gre est lance par la JSP. La directive <%@ page isErrorPage="true|false" %> permet de spcier si la page de renvoi est une page derreur et lui autorise ainsi la transmission de lexception pour un ventuel traitement.

INSA - ASI

TechnoWeb : Les JSP

9/38

Fonctionnement
page-HTML.jsp

(3/12)

Redirection derreur vers une page statique

<%@ page contentType="text/html; charset=UTF-8" %> <%@ page errorPage="erreur.html" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head><title>Ma premire page jsp</title></head> <body><h1>1/0 = <%=1/0 %></h1></body> </html>

erreur.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> < title >Page derreur</title> </head> <body><h1>Il doit y avoir une erreur dans la JSP...</h1></body> </html>

INSA - ASI

TechnoWeb : Les JSP

10/38

Fonctionnement
page-JSP.jsp

(4/12)

Redirection derreur vers une JSP

<%@ page contentType="text/html; charset=UTF-8" %> <%@ page errorPage="erreur.jsp" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head><title>Ma premire page jsp</title></head> <body><h1>1/0 = <%=1/0 %></h1></body> </html>

erreur.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <%@ page isErrorPage="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head><title>Page derreur</title></head> <body> <h1>Il doit y avoir une erreur dans la JSP...</h1> <p>(mais cette fois cest une JSP)</p> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

11/38

Fonctionnement
Dclarations

(5/12)

Les dclarations permettent de dnir des classes, des variables, . . . Elles seront utilisables dans toute la JSP

Syntaxe
<%! dclarations %>

Ces dclarations sont places dans la classe au moment de la traduction de la JSP en Servlet les variables sont donc des attributs de la Servlet

INSA - ASI

TechnoWeb : Les JSP

12/38

Fonctionnement

(6/12)

Initialisation/Finalisation dune JSP

Paramtrage de linitialisation et de la nalisation Initialisation lors du chargement par le serveur dapplication : public void jspInit() Finalisation lors du dchargement par le serveur dapplication : public void jspDestroy()

Rdnition dans les dclarations JSP


<%! public void jspInit() { ... } public void jspDestroy() { ... } %>

Utilit : ouverture persistante dune connexion une BD, . . .

INSA - ASI

TechnoWeb : Les JSP

13/38

Fonctionnement
Scriptlets (scripts)

(7/12)

Utilisation des objets, variables, structures de contrle, . . .

Syntaxe
<% script %>

Les scriptlets seront placs dans la mthode _jspService() qui excute la requte (GET, POST, . . . ) eectue sur la page JSP

INSA - ASI

TechnoWeb : Les JSP

14/38

Fonctionnement
Expressions

(8/12)

Insertion de valeurs dans la page rsultat

Syntaxe
<%= expression %>

Lexpression doit retourner une valeur

INSA - ASI

TechnoWeb : Les JSP

15/38

Fonctionnement
Exemple

(9/12)

compteur.jsp
<%@ page isThreadSafe="false" %> <%@ page contentType="text/plain; charset=UTF-8" %> <%@ page import="java.io.*" %> <%! int compteur=0; String fichier; public void jspInit() { try { fichier=getServletContext().getRealPath("/compteur.txt"); FileReader file = new FileReader(fichier); BufferedReader reader = new BufferedReader(file); compteur = Integer.parseInt(reader.readLine()); reader.close(); } catch (FileNotFoundException exception) {} catch (IOException exception) {} catch (NumberFormatException exception) {} }

...

INSA - ASI

TechnoWeb : Les JSP

16/38

Fonctionnement
Exemple

(10/12)

compteur.jsp (suite)
...
public void jspDestroy() { try { FileWriter file = new FileWriter(fichier); PrintWriter writer = new PrintWriter(file); writer.println(compteur); writer.close(); } catch (IOException exception) { log("ErreurServlet : enregistrement de letat impossible pour la JSP compteur2.jsp"); log(""+exception); } } %> <% compteur+=1; %> Le compteur : <%=compteur%>

INSA - ASI

TechnoWeb : Les JSP

17/38

Fonctionnement
Objets disponibles

(11/12)

Objets directement disponibles dans une JSP request : httpServlet : correspondant la requte response : httpServlet : correspondant la rponse session : permet de grer une session out : le ot de sortie de la rponse application : Servlet application ; contient, entre autres, la mthode log() pour crire dans le chier log pageContext : gestion du contexte et des attributs de la JSP ...

INSA - ASI

TechnoWeb : Les JSP

18/38

Fonctionnement
Exemple

(12/12)

log.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head> < title >Ecriture dans le fichier log</title> </head> <body> <% String phrase = ""; if(request.getParameter("phrase")!=null) phrase = request.getParameter("phrase"); application.log(phrase); %> <form action="log.jsp" method="post"> <label>Phrase a crire dans le fichier log : </label><input type="text" name="phrase" size="30"> <% out.println("<input type=\"submit\" value=\"envoyer\">"); %> </form> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

19/38

Inclusion/Dlgation
Inclusion

(1/5)

Inclusion dune page statique ou dynamique dans une JSP

Inclusion la traduction en servlet (= inclusion de texte)


<%@ include file="fichier " %>

Inclusion lexcution (= inclusion du rsultat)


<jsp:include page="fichier " /> ou <jsp:include page="fichier "> <jsp:param name="nom " value="valeur "/> ... </jsp:include>

INSA - ASI

TechnoWeb : Les JSP

20/38

Inclusion/Dlgation
Exemple

(2/5)

inclusion.jsp
<%@ page contentType="text/html; charset=UTF-8" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1strict.dtd"> <html> <head><title>JSP avec inclusion</title></head> <body><%@ include file="titre.txt" %> <p><jsp:include page="texte.jsp" /></p> <p><jsp:include page="parametre.jsp"> <jsp:param name="nom" value="Bob" /> </jsp:include> </p> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

21/38

Inclusion/Dlgation
Exemple

(3/5)

titre.txt
<h1>Titre de la JSP, inclus a partir dun fichier texte</h1>

texte.jsp
<%@ page contentType="text/plain; charset=UTF-8" %> <% out.println("Texte genere par la JSP texte.jsp"); %>

parametre.jsp
<%@ page contentType="text/plain; charset=UTF-8" %> <% String nom = request.getParameter("nom"); out.println("Salut " + nom); %>

INSA - ASI

TechnoWeb : Les JSP

22/38

Inclusion/Dlgation
Dlgation

(4/5)

Dlgation un autre composant web

Syntaxe
<jsp:forward page="fichier " /> ou <jsp:forward page="fichier " > <jsp:param name="nom " value="valeur "/> ... </jsp:forward>

INSA - ASI

TechnoWeb : Les JSP

23/38

Inclusion/Dlgation
Exemple

(5/5)

delegation.jsp
<html> <head><title>JSP avec dlgation</title></head> <body> <jsp:forward page="parametre.jsp"> <jsp:param name="nom" value="Bob" /> </jsp:forward> </body> </html>

parametre.jsp
<html> <head><title>Affichage delegue</title></head> <body> <% String nom = request.getParameter("nom"); out.println("<p>Salut " + nom + " !</p>"); %> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

24/38

JSP&JavaBeans
Dnition

(1/8)

Denition (JavaBean)
Classe java respectant certaines conventions (API) faisant delle un composant java rutilisable et facilement intgrable dans des applications. Les JSP orent des tags pour interagir avec un JavaBean

INSA - ASI

TechnoWeb : Les JSP

25/38

JSP&JavaBeans

(2/8)

Contraintes de conception

Pour tre un JavaBean, une classe doit : tre Serializable, Possder un constructeur sans argument, Avoir des accesseurs sur ses attributs respectant des conventions de nommage ; par exemple pour un attribut String name : public void setName(String) public String getName() Contenir les mthodes dinterception dvnements ncessaires.

INSA - ASI

TechnoWeb : Les JSP

26/38

JSP&JavaBeans

(3/8)

Utilisation dans les JSP


<jsp:useBean id="nom" class="classbean" scope="porte"/>

avec

porte = request / page / session / application

<jsp:setProperty name="nom" property="proprit" value="valeur"/>

avec valeur = String / <%= ... %>} identique : <% nom.setProprit(valeur)%>


<jsp:setProperty name="nom" property="proprit" param="parametre_requete"/>

si parametre_requete est absent, param=property ; si parametre_requete=*, rgle toutes les proprits ayant des noms identiques aux paramtres de requte Dnition des attributs la dclaration :
<jsp:useBean id="nom" class="classbean" scope="porte" > <jsp:setProperty name="nom" property="proprit" .../> ... </jsp:useBean>

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

identique :

<%=nom.getProprit()%>

INSA - ASI

TechnoWeb : Les JSP

27/38

JSP&JavaBeans
Exemple

(4/8)

Personne.java
package asi; import java.beans.*; import java.io.*; public class Personne implements Serializable { private String nom; private String prenom; public Personne() { this.nom = "Leponge"; this.prenom = "Bob"; } public String getNom() { return this.nom; } public void setNom(String nom) { this.nom=nom; } public String getPrenom() { return this.prenom; } public void setPrenom(String prenom) { this.prenom=prenom; } }

INSA - ASI

TechnoWeb : Les JSP

28/38

JSP&JavaBeans
Exemple

(5/8)

javabean.jsp
<%@ page contentType="text/html" %> <%@ page language="java" import="asi.*" %> <jsp:useBean id="bob" class="asi.Personne" scope="page" /> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> < title >Un Hello Bob</title> </head> <body> <p>Salut <%= bob.getPrenom() %> <%= bob.getNom() %> !</p> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

29/38

JSP&JavaBeans

(6/8)

JSP, javabeans et formulaires

Mapping requte entrante / javabean


Le parser JSP permet le mapping entre la requte entrante (ensemble des paramtres) et un javabean (proprits) <jsp:setProperty name="aliasBean"property=""/> Utilisation de lintrospection (exposition par une classe de ses proprits par mthodes daccession et de modication) La correspondance peut tre transgresse par un mapping manuel <jsp:setProperty name="aliasBean"param="nomAttribut" property="beanProp"/>"

INSA - ASI

TechnoWeb : Les JSP

30/38

JSP&JavaBeans
Personne.java
package asi; import java.beans.*; import java.io.*;

(7/8)

JSP, javabeans et formulaires

public class Personne implements Serializable { private String nom; public Personne() { this.nom = ""; } public String getNom() { return this.nom; } public void setNom(String nom) { this.nom=nom; } }

Gars.java
package asi; import java.beans.*; import java.io.*; public class Gars implements Serializable { private String nom; public Gars() { this.nom = ""; } public String getNom() { return this.nom; } public void setNom(String nom) { this.nom=nom; } }

INSA - ASI

TechnoWeb : Les JSP

31/38

JSP&JavaBeans

(8/8)

JSP, javabeans et formulaires

hello.jsp
<%@ page contentType="text/html; charset=utf-8" %> <%@ page language="java" import="asi.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head><title>Un autre Hello World !</title></head> <body> <form action="hello.jsp" method="post"> <label>Nom : </label><input type="text" name="nom" size="30"> <input type="submit" value="envoyer"> </form> <jsp:useBean id="personne" class="asi.Personne" scope="page"> <jsp:setProperty name="personne" property="*"/> </jsp:useBean> <jsp:useBean id="gars" class="asi.Personne" scope="page"> <jsp:setProperty name="gars" property="*"/> </jsp:useBean> <p>Personne : <%= personne.getNom() %></p> <p>Gars : <%= gars.getNom() %></p> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

32/38

JSP&JavaBeans
UnMessage.java
package libMessage; import import import import java.beans.*; java.io.*; java.text.*; java.util.*;

(1/6)

Exemple : Livre dor en JSP

public class UnMessage implements Serializable { private static SimpleDateFormat formatter = new SimpleDateFormat("E d MMM yyyy, H:m:s", Locale.FRANCE); private static Date date = new Date(); private String email; private String texte; public UnMessage() { date.setTime(System.currentTimeMillis()); } public String getDate() { return formatter.format(date); } public void setEmail(String email) { this.email=email; } public String getEmail() { return email; } public void setTexte(String texte) { this.texte=texte; } public String getTexte() { return texte; } }

INSA - ASI

TechnoWeb : Les JSP

33/38

JSP&JavaBeans
LivreOr.java
package libMessage; import java.beans.*; import java.util.*; import java.io.*;

(2/6)

Exemple : Livre dor en JSP

public class LivreOr implements Serializable { private Vector messages; private String nomFichier; public LivreOr() { } public void setFichier(String fichier) throws FileNotFoundException,IOException, ClassNotFoundException { nomFichier = fichier; FileInputStream fis; ObjectInputStream ois = null; try { fis = new FileInputStream(nomFichier); ois = new ObjectInputStream(fis); messages = (Vector) ois.readObject(); } catch (Exception e) { messages = new Vector(); }

...

INSA - ASI

TechnoWeb : Les JSP

34/38

JSP&JavaBeans

(3/6)

Exemple : Livre dor en JSP

LivreOr.java (suite)
...
public void addMessage(UnMessage msg) { messages.add(msg); } public Vector getMessages() { return messages; } public void enregistrer() throws FileNotFoundException, IOException{ FileOutputStream fos = new FileOutputStream(nomFichier); ObjectOutputStream oos = new ObjectOutputStream(fos); oos.writeObject(messages); } }

INSA - ASI

TechnoWeb : Les JSP

35/38

JSP&JavaBeans
livredor.jsp

(4/6)

Exemple : Livre dor en JSP

<%@ page contentType="text/html" %> <%@ page language="java" import="libMessage.*" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> < title >Livre dor</title> </head> <body> <form action=livredor.jsp method=POST> <label>email :</label> <input type=text name=email size=50/><br/> <textarea name=texte rows=10 cols=80>Saisissez votre message ici</textarea><br/> <input type=submit name=submit value=Envoyer/> </form> <jsp:useBean id="msg" class="libMessage.UnMessage" scope="page" > <jsp:setProperty name="msg" property="*"/> </jsp:useBean> <jsp:useBean id="livreor" class="libMessage.LivreOr" scope="page"/> <jsp:setProperty name="livreor" property="fichier" value="/tmp/messages.txt"/>

...

INSA - ASI

TechnoWeb : Les JSP

36/38

JSP&JavaBeans
livredor.jsp (suite)
...

(5/6)

Exemple : Livre dor en JSP

<% if(msg!=null && msg.getEmail()!=null && !msg.getEmail().equals("")) { livreor.addMessage(msg); livreor.enregistrer(); } if(livreor!=null && livreor.getMessages()!=null && !livreor.getMessages().isEmpty()) { for(Object lemsg : livreor.getMessages()) { %> <table border="1pt"> <tr> <td><%= ((UnMessage)lemsg).getEmail() %></td> <td><%= ((UnMessage)lemsg).getDate() %></td> </tr> <tr> <td colspan="2"> <pre> <%= ((UnMessage)lemsg).getTexte() %> <pre> </td> </tr> </table> <% }} %> </body> </html>

INSA - ASI

TechnoWeb : Les JSP

37/38

JSP&JavaBeans

(6/6)

Exemple : Livre dor en JSP

Dploiement
LivredorJSP |_ WEB-INF | |_ classes | |_ libMessage | |_ LivreOr.class | |_ UnMessage.class |_ livredor.jsp

INSA - ASI

TechnoWeb : Les JSP

38/38

Standard Tag Library

Les JSP fournissent une bibliothque de tags standards rpondant des besoins de base Quelques domaines : Core : tags permettant des fonctionnalits de base XML : tags permettant de manipuler des donnes XML I18n : tags permettant de traiter linternationalisation Database : tags permettant deectuer des requtes SQL (travail normalement ddi aux JavaBeans) Il est possible dtendre le langage en crant dautre tags

Vous aimerez peut-être aussi