0% ont trouvé ce document utile (0 vote)
8 vues49 pages

Introduction aux Servlets et JSP en Java

Le document décrit les pages JSP et leur fonctionnement. Les pages JSP permettent d'inclure du code Java dans des pages web pour générer dynamiquement du contenu. Le document explique comment les pages JSP sont traitées par le serveur web et converties en servlets Java.

Transféré par

Oumaima Ziat
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
8 vues49 pages

Introduction aux Servlets et JSP en Java

Le document décrit les pages JSP et leur fonctionnement. Les pages JSP permettent d'inclure du code Java dans des pages web pour générer dynamiquement du contenu. Le document explique comment les pages JSP sont traitées par le serveur web et converties en servlets Java.

Transféré par

Oumaima Ziat
Copyright
© All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

les pages JSP Le langage Java

Résumé de l'épisode précédent


(Les Servlets)

XVII-1 JMF
les pages JSP Le langage Java

servlet = ?
• Une servlet est un programme (plug-in) à
ajouter à un serveur (quel qu'il soit).
• Ce cours a trait à la programmation Java
coté serveur (Java EE )
• Pour l'instant les serveurs acceptant des
servlets sont plutôt des serveurs Web.

XVII-2 JMF
les pages JSP Le langage Java

Comment ça marche ?
• Le serveur (Web) possède désormais un
interpréteur Java (JVM)
• => il n'y a pas de processus créé lors de
l'exécution de code Java
• Cf. les clients Web possèdent un
interpréteur Java permettant de lancer des
applets.
• D'où le nom de servlets.

XVII-3 JMF
les pages JSP Le langage Java
Moteurs de servlets (et de JSP) :
Tomcat
• Plug-in de Apache v1.3 ou plus, Microsoft IIS
v4.0 ou plus, …
• Est aussi un mini-serveur Web.

XVII-4 JMF
les pages JSP Le langage Java

Une servlet : code complet


import [Link].*;
import [Link].*;
import [Link].*;

public class MaPremiereServlet extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {

// Etape 1. Spécifier le type MIME du contenu de la réponse


[Link]("text/html");

// Etape 2. Récupère le PrintWriter pour envoyer des données au client


PrintWriter out = [Link]();

// Step 3. Envoyer l’information au client


[Link]("<html>");
[Link]("<head><title>Bonjour Servlet</title></head>");
[Link]("<body>");
[Link]("<h1> Bonjour à tous </h1>");
[Link]("Il est : " + new [Link]());
[Link]("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}

XVII-5 JMF
les pages JSP Le langage Java
Démonstration
• On lance le serveur Web
• La servlet est rangée sous
REP_INSTAL_TOMCAT\webapps\examples\WEB-
INF\classes
• correspond à l'URL : [Link]
8080/examples/servlet/MaPremiereServlet

Euh + bidouilles dans le fichier


REP_INSTAL_TOMCAT\webapps\exam
XVII-6
ples\WEB-INF\[Link] JMF
les pages JSP Le langage Java

application web = ?
• "Une application web est une extension
dynamique d'un serveur web ou applicatif.
• Par exemple :
– les application web orientées présentation qui
génèrent des pages web (HTML, XML)
dynamiquement

XVII-7 JMF
les pages JSP Le langage Java

Architecture d'une application web


1/3
❚ Une bonne référence est :
[Link]
doc/appdev/[Link]
❚ Depuis la version 2.2 des spécifications des servlets, les
ressources doivent être rangées comme indiqué diapo
suivante :

XVII-8 JMF
les pages JSP Le langage Java
Architecture d'une application
web 2/3
❚ Les fichiers .html et .jsp doivent être rangés à partir de la
racine de votre site web (= application web).
❚ /WEB-INF/[Link] : le fichier descripteur de déploiement de
votre application web
❚ /WEB-INF/classes/ : le répertoire racine de rangement
des .class (servlets compilés, etc.). Si les classes sont dans des
packages, la hiérarchie des packages doit être respectée à partir
de /WEB-INF/classes/. Par exemple la classe
[Link] doit être mise dans
/WEB-INF/classes/cnam/ihm/[Link]

XVII-9 JMF
les pages JSP Le langage Java
Architecture d'une application
web 3/3
❚ /WEB-INF/lib/ : le répertoire contenant les .jar nécessaires
à votre application web (driver JDBC, etc.)

RACINE

WEB-INF [Link]

classes

lib

*.html, *.jsp

❚ On peut mettre tout cela dans un fichier compressé : un .war

XVII-10 JMF
les pages JSP Le langage Java

Bibliographie

• Page de départ de la technologie servlets :


[Link]
[Link]
• Java servlets, Jason Hunter, ed O'Reilly
traduit en français

XVII-11 JMF
les pages JSP Le langage Java

Fin du résumé de l'épisode


précédent

XVII-12 JMF
les pages JSP Le langage Java

JavaServer Pages
(JSP)

XVII-13 JMF
les pages JSP Le langage Java

ssi : la technique server side include


• Une page ssi (shtml) est demandée par un
client web
• Le serveur Web passe la main au
programme adéquat qui traite la partie de la
page le concernant.
• Ce programme génère la partie dynamique
• La page HTML créée dans son ensemble est
retournée au serveur puis au client Web.

XVII-14 JMF
les pages JSP Le langage Java

JavaServer Pages
• = JSP = la technique des ssi en Java
• = une page HTML contenant du code Java
• => meilleure division des tâches :
– présentation générale par les graphistes
– coté dynamique par des programmeurs (Java)

XVII-15 JMF
les pages JSP Le langage Java

Comment ça marche ?
• Concrêtement :
– toute la page HTML est convertie en une servlet
– cette servlet est traitée par le moteur Java
intégré au serveur Web (technologie des
servlets) et retourne la page HTML construite

XVII-16 JMF
les pages JSP Le langage Java

JSP vs. Servlets


• Servlet = du code Java contenant de
l'HTML
• JSP = une page HTML contenant du code
Java
• Concrètement avec les JSP :
– les parties statiques de la page HTML sont
écrites en HTML
– les parties dynamiques de la page HTML sont
écrites en Java

XVII-17 JMF
les pages JSP Le langage Java

Notre première JSP

• fichier [Link]
<html><head><title>Obtenu par une JSP</title></head>
<body>

<h3>Bonjour de ma part </h3> <hr>


La date courante est : <%= new [Link]() %>
</body>
</html>

• Traité quand le client demande l’URL de la JSP :


[Link]

XVII-18 JMF
les pages JSP Le langage Java

Tomcat et JSP
• Des exemples de JSP (code + liens pour
l'exécution) sont disponibles à partir de
REP_INSTALL_TOMCAT/webapps/examples/jsp
pour Tomcat 6.0

XVII-19 JMF
les pages JSP Le langage Java

Exécution de JSP
• Il faut mettre les pages JSP dans un endroit
particulier du serveur Web
• Cet endroit dépend du serveur Web et de sa
configuration
• Pour tomcat en configuration standard,
[Link]
8080/examples/jsp/[Link]
~
REP_INSTAL_TOMCAT\webapps\examples\jsp\
[Link]
pour tomcat 6.0 • Et sans bidouille !!
XVII-20 JMF
les pages JSP Le langage Java

Exécution de JSP (suite)


• Une démo:
• Le résultat de [Link]
est :

• Une autre exécution donne une


autre date => dynamicité

XVII-21 JMF
les pages JSP Le langage Java

Que s'est il passé ?


• Le moteur de JSP a construit une servlet
(MaDate_jsp.java sous l'arborescence
work pour Tomcat 6.0)
• Cette phase est parfois appelée la
traduction de la JSP (en servlet)
• Puis a compilé et exécuté la servlet

XVII-22 JMF
les pages JSP Le langage Java

La servlet construite
package [Link];
...
public class MaData_jsp extends HttpJspBase {
...
public void _jspService(HttpServletRequest request, HttpServletResponse
response) throws IOException, ServletException {
...
pageContext = _jspxFactory.getPageContext(...);
session = [Link]();
out = [Link]();
// HTML
// begin [file="C:\\...\\examples\\jsp\\[Link]";from=(0,0);to=(4,24)]
[Link]("<html><head><title>Obtenu par une JSP</title></head>\r\n
<body>\r\n\r\n<h3>Bonjour de ma part</h3> <hr>\r\n
La date courante est : ");
// end
//begin [file="C:\\...\\examples\\jsp\\[Link]";from=(4,27)to=(4,49)]
[Link]( new [Link]() );
// end
// HTML
// begin [file="C:\\...\\examples\\jsp\\[Link]";from=(4,51);to=(6,7)]
[Link]("\r\n</body>\r\n</html>"); // end
...
}
}

XVII-23 JMF
les pages JSP Le langage Java

Algorithme d'exécution de la JSP


La servlet associée à la
JSP demandée est-elle Oui
Requête client chargée en mémoire
du moteur de
servlets ?

Non
Non
Conteneur de JSP

Oui servlet à jour


précompilée
disponible?

Non Le fichier JSP a-


t-il été modifié
Oui depuis la
Traduire en servlet et dernière
compiler traduction en
servlet ?

Charger la servlet Non

Réponse au client Exécuter la servlet

XVII-24 JMF
les pages JSP Le langage Java

3 parties d'une JSP

• scriptlets <% %>


• déclarations <%! %>
• expressions <%= %>

XVII-25 JMF
les pages JSP Le langage Java

Scriptlets <% %>


• contient du code Java
• insérer dans _jspService() de la
servlet, donc peut utiliser out, request,
response, etc.
• Exemple :

<%
String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"};
[Link]("<h3>Principaux langages orientés objets : </h3>");
for (int i=0; i < [Link]; i++) {
[Link]("<p>" + langages[i] + "</p>");
}
%>

XVII-26 JMF
les pages JSP Le langage Java

Déclarations <%! %>


• Sont des déclarations Java.
• Seront insérées comme des membres de la
servlet
• Permet de définir des méthodes ou des
données membres
• Exemples :
<%!
int random4() { <%!
return (int)([Link]() * 4); int nombreFetiche = 2;
} %>
%>

XVII-27 JMF
les pages JSP Le langage Java

Expressions <%= %>


• En fait expression Java qui renvoie un
objet String ou un type primitif.
• Un raccourci pour <% [Link](…);%>
• <%= XXX %> ~ <% [Link](XXX); %>
• attention au ;
• est donc converti en [Link](…) dans
la méthode _jspService(…) de la servlet.
La somme est: <%= (195 + 9 + 273) %>

Je vous réponds à l'adresse : <%= [Link]("email_address") %>

XVII-28 JMF
les pages JSP Le langage Java

Objets prédéfinis dans une JSP


• 3 objets peuvent être immédiatement
utilisés dans une expression ou une scriptlet
d'une JSP :
– out : le canal de sortie
– request (HttpServletRequest) : l'objet requête
– response (HttpServletResponse) : l'objet réponse

• Il y en a d'autres
• Cf. ces mêmes objets dans une servlet

XVII-29 JMF
les pages JSP Le langage Java

Un exemple complet :
[Link]
<html><head><title>JSP complet</title></head>
<body>
<%! String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"};
int random4() {
return (int) ([Link]() * 4);
}
%>
<p>Parmi tous les langages orientés objets :</p>
<ol>
<%
for (int i=0; i < [Link]; i++) {
[Link]("<li>" + langages[i] + "</li>");
}
%>
</ol>
<p>Le prochain que j'apprends est <b><%= langages[random4()] %> </b></p>
</body>
</html>

XVII-30 JMF
les pages JSP Le langage Java

[Link]

XVII-31 JMF
les pages JSP Le langage Java

Déboguer les JSP


• La fenêtre de lancement du serveur Web
donne des indications. Suivant les serveurs,
une page HTML est retournée avec des
indications.
• Ces éléments sont très souvent relatifs à la
servlet et pas à la page JSP.
• Directives <%@ page errorPage= ...%>
et
<%@ page isErrorPage="true"%>

XVII-32 JMF
les pages JSP Le langage Java

Déboguer les JSP (suite)

• Un page JSP peut référencer une page


erreur par <%@ page
errorPage="[Link]"%>
• La page erreur est indiquée par l'entête
<%@ page isErrorPage="true"%>
• Si une exception est levée le traitement est
dérouté vers la page erreur qui connaît la
référence exception qui repère l'exception

XVII-33 JMF
les pages JSP Le langage Java

Déboguer les JSP : exemple

[Link]
<%@ page errorPage="[Link]"%>
<%! String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"};
%>
<p>Parmi tous les langages orientés objets :</p>
<ol>
<%
// levée d'une ArrayIndexOutOfBoundsException
for (int i=0; i < 7; i++) {
[Link]("<li>" + langages[i] + "</li>");
}
%>

XVII-34 JMF
les pages JSP Le langage Java

Déboguer les JSP : exemple


(suite)
[Link]
<%@ page isErrorPage="true"%>
<html><body>
exception levée <b> <%= exception %> </b>
<hr>
<h3>trace de la pile</h3>
<pre>
<%
[Link] myWriter = new [Link](out);
[Link](myWriter);
%>
</pre>
</body></html>

XVII-35 JMF
les pages JSP Le langage Java

Déboguer les JSP : exemple (fin)


• Charger la page [Link] amène à :

XVII-36 JMF
les pages JSP Le langage Java

Enchaîner les pages


• Un page JSP peut en appeler une autre par
la directive : <jsp:forward>
• Syntaxe :
<jsp:forward page="pageDeRedirection" />

[Link]
<% String repUtilisateur = [Link]("repTextField");
int rep = [Link](repUtilisateur);
if ((rep % 2) == 0) {
%>
<jsp:forward page="[Link]"/>
<% } else { %>
<jsp:forward page="[Link]"/>
<% } %>
On n'affiche jamais cela

XVII-37 JMF
les pages JSP Le langage Java

Enchaîner les pages (suite)

• Après un <jsp:forward>, le traitement


est entièrement pris en charge par nouvelle
page
Serveur Web [Link]
Navigateur
1. [Link]
<jsp:forward
page="[Link]"/>

3. Retourner [Link] [Link]


[Link]
Transmis à [Link]

XVII-38 JMF
les pages JSP Le langage Java

Inclusion de fichiers par


<%@ include file="…" %>
• Utilisé pour faire des inclusions statiques de
fichiers : en-tête ou pied de page ...
• Syntaxe :
<%@ include file="path to relative URL" %>
• Le fichier est inclus au moment de la traduction
[Link]

[Link]

<%@ include file="[Link]" %>

<h3>Bienvenue en GLG 203</h3>

<%@ include file="[Link]" %> [Link]

JMF
les pages JSP Le langage Java
Inclusion de pages
<jsp:include page="…" />
• Pour inclure des sorties de servlets ou JSPs
– Le contenu du servlet ou de la JSP est traité avant l’inclusion
– La page est incluse au moment de la requête
• Syntaxe :
<jsp:include page="path to relative URL" />
• Le traitement de la page courante continue après l’inclusion des
ressources
[Link]

[Link]

<jsp:include …>
Components
… [Link]

<jsp:include …>

• Permet aussi d’inclure du HTML


– On préférera <%@ include %> pour inclure du HTML
JMF
les pages JSP Le langage Java

JSP et Java beans


• But : avoir le moins de code Java possible
dans une page JSP (HTML)
• Sous-traiter le code à un Java bean
• balise XML : <jsp:useBean>

XVII-41 JMF
les pages JSP Le langage Java

JSP et Java beans (suite)


• Syntaxe générale :
<jsp:useBean id="nomInstanceJavaBean"
class="nomClasseDuBean"
scope="request|session|application|
page">
</jsp:useBean>
• Le bean est alors utilisable par
nomInstanceJavaBean
• balise sans corps donc utilisation de
<jsp:useBean … />

XVII-42 JMF
les pages JSP Le langage Java

l'attribut scope
• Il indique la portée du bean.
valeur Description
request Le bean est valide pour cette requête. Il est utilisable dans les pages de redirection
de la requête (<jsp:forward>). Il est détruit à la fin de la requête.
page Similaire à request, mais le bean n'est pas transmis aux pages de redirection
<jsp:forward>. C'est la portée par défaut
Le bean est valide pour la session courante. S’il n’existe pas encore dans la session
session courante, il est créé et placé dans la session du client. Il est réutilisé jusqu’à ce que
la session soit invalidée
application Le bean est valide pour l’application courante. Il est créé une fois et partagé par
tous les clients de l'application web.

XVII-43 JMF
les pages JSP Le langage Java

JSP et Java beans : exemple


• Soit le bean :
package cnam;

public class SimpleBean implements [Link] {


private int compter;
public SimpleBean() {
compter = 0;
}
public void setCompter(int theValue) {
compter = theValue;
}
public int getCompter() {
return compter;
}
public void increment() {
compter++;
}
}

• Remarque : il faut mettre le bean dans un


XVII-44
package JMF
les pages JSP Le langage Java

Utilisation du bean dans une JSP


• Utilisation à l'aide de son nom
• Récupération des propriétés :
– Par appel de méthode getXXX() :
– Par la balise <jsp:getProperty …>
<p> on repere le bean par le nom nomBean<br>
<jsp:useBean id="nomBean" class="[Link]"
scope="session" />
<p> On accede a une propriéte avec une expression:
<br> compteur = <%= [Link]() %>
<hr>
On incrémente le compteur <% [Link](); %>
<p>On peut accéder à la propriété par une balise :<br>
<jsp:getProperty name="nomBean" property="compter" />

XVII-45 JMF
les pages JSP Le langage Java

Positionner les propriétés


du bean dans une JSP
• Par appel de méthode setXXX(...) :
• Par la balise <jsp:setProperty …>
<p> on repere le bean par le nom nomBean<br>
<jsp:useBean id="nomBean" class="[Link]"
scope="session" />

<p> On positionne une propriéte avec une expresion:


<br> compteur = <%= [Link](6) %>

<p>ou par une balise :<br>


<jsp:setProperty name="nomBean" property="compter" value="6" />

XVII-46 JMF
les pages JSP Le langage Java

Architecture MVC

• modèle = les données accédées par un code


Java (JDBC, RMI, EJB, etc.)
• vues = JSP
• contrôleur = servlets

XVII-47 JMF
les pages JSP Le langage Java

Architecture MVC (suite)

• Syntaxe dans la servlet pour lancer la JSP :


public void doPost(HttpServletRequest request, HttpServletResponse response){
ServletContext context = getServletContext(); // héritée de GenericServlet
RequestDispatcher dispatcher =
[Link]("/[Link]");
[Link](request, response);
}

XVII-48 JMF
les pages JSP Le langage Java

Architecture MVC (suite)


• La servlet peut passer des valeurs à la JSP
appelée grâce à setAttribute()
public void doPost(HttpServletRequest request, HttpServletResponse response) {
// appelle les méthodes sur les objets métiers
ArrayList theList = // un objet à passer
// ajoute à la requête
[Link]("nomDelObjet", theList);
ServletContext context = getServletContext();
RequestDispatcher dispatcher = [Link]("/[Link]");
[Link](request, response);
}

• La JSP extrait les objets de request grâce à


getAttribute()
<% ArrayList theList = (ArrayList)
[Link]("nomDelObjet");
// maintenant, utiliser l'ArrayList
%>

XVII-49 JMF

Vous aimerez peut-être aussi