3-Cours 3
3-Cours 3
3-Cours 3
Pages dynamiques
– Pages HTML générées par le serveur
– Le serveur construit la réponse en fonction de la requête de
l’utilisateur
Le serveur Web a besoin d’aide pour gérer tous ce qui est dynamique
src WebContent
WEB-INF
Imposé par
la spécification
Clock.java des servlets
Et la mettre dans
%TOMCAT_HOME%\webapps\myProject Web.xml
Prof. M. Achkari Begdouri - Dép. Informatique - FP Larache 11
Servlet en 4 étapes (2/4)
import java.io.*;
import javax.servlet.http.*;
import javax.servlet.*;
1. Chargement de la classe
2. Instanciation du servlet
• constructeur par défaut
3. Appel de init()
4. Appel(s) de service()
• 1 thread par requête
5. Appel de destroy()
• response.sendRedirect(String url)
C’est laid !
out.println(docType);
out.println("<html>");
out.println("<head>\n<title>Clock</title>\n</head>");
out.println("<body>\n" +
"<h1>Time on server</h1>\n" +
"<p>" + today + "</p>\n" +
"</body>");
out.println("</html>");
webContent
out.println("<html><head><title>"+title+"</title>…");
Les JSP permettent d’intégrer du code java dans une page HTML
<p><%= new java.util.Date() %></p>
• JSP d’origine
Deux options
Ecrire 25 lignes de code directement dans une JSP
Ecrire ces 25 lignes dans une classe Java à part et 1 ligne dans
une JSP pour l’invoquer
Texte HTML
<h1>Blah</h1>
Passé au client. Réellement traduit en servlet par le code
out.print("<h1>Blah</h1>");
Commentaires HTML
<!-- Commentaire -->
Envoyés au client
Commentaires JSP
<%-- Commentaires --%>
Ne sont pas envoyés au client
Expressions
Format : <%= expression %>
Evaluée et insérée dans la sortie du servlet se traduit par
out.print(expression)
Scriptlets
Format : <% code %>
Inséré tel quel dans la méthode _jspService du servlet
(appelée par service() )
Déclarations
Format : <%! Expression %>
Insérée telle quelle dans le corps de la classe servlet, en
dehors de toute méthode existante
Résultat
Expression évaluée, convertie en String, et placée dans la page HTML à la place qu’elle
occupe dans la JSP
L’expression est placée dans _jspService en paramètre du out.print()
Exemples
Heure courante : <%= new java.util.Date() %>
On ne peut pas mixer les deux versions dans une même page. Il faut
utiliser XML pour la page entière si on utilise jsp:expression
response.setContentType("text/html");
JspWriter out = response.getWriter();
out.println("<h1>Un nombre aléatoire</h1>");
out.println(Math.random());
}
request
Instance de HttpServletRequest (1e argument de service/doGet)
response
Instance de HttpServletResponse (2e argument de service/doGet)
out
Intance de JspWriter (une version bufferisée de Writer) utilisée pour
envoyer des donnés sur la sortie vers le client
session
Instance de HttpSession associée à la requête
application
Instance de ServletContext (pour partager des données) telle que
obtenue via getServletContext()
<!DOCTYPE …>
<html>
<head>
<title>Reading Three Request Parameters</title>
</head>
<body>
<h1>Reading Three Request Parameters</h1>
<ul>
<li><b>param1</b>: <%= request.getParameter("param1") %></li>
</ul>
</body>
</html>
Résultat
Code inséré tel quel dans _jspService()
Exemple
<%
String queryData = request.getQueryString();
out.println("Attached GET data: " + queryData);
%>
<% response.setContentType("text/plain"); %>
Syntaxe XML
<jsp:scriptlet>Code Java</jsp:scriptlet>
JSP d’origine
<h2>foo</h2>
<%= bar() %>
<% baz(); %>
Format
<%! Java Code %>
Résultat
Insérées telle quelle dans la définition de la classe du servlet, en
dehors de toute méthode existante
Exemples
<%! private int someField = 5; %>
<%! private void someMethod(...) {...} %>
Remarque de conception
Les attributs sont clairement utiles. Pour les méthodes, il est la
plupart du temps préférable de les définir dans une classe Java
séparée
Syntaxe XML
<jsp:declaration>Code Java</jsp:declaration>
JSP d’origine
<h1>Some Heading</h1>
<%!
private String randomHeading() {
return("<h2>" + Math.random() + "</h2>");
}
%>
<%= randomHeading() %>
response.setContentType("text/html");
HttpSession session = request.getSession();
JspWriter out = response.getWriter();
out.println("<h1>Some Heading</h1>");
out.println(randomHeading());
}
}
Prof. M. Achkari Begdouri - Dép. Informatique - FP Larache 44
Déclarations JSP : Exemple
<!DOCTYPE …>
<html>
<head>
<title>JSP Declarations</title>
</head>
<body>
<h1>JSP Declarations</h1>
<%! private int accessCount = 0; %>
<h2>Accesses to page since server reboot:
<%= ++accessCount %></h2>
</body>
</html>
Remarque : Problème
– Les variables prédéfines (request, response, out, session, etc.)
sont locales à la méthode _jspService.
Ainsi, elles ne sont pas disponibles pour les méthodes définies
par des déclarations JSP et les méthodes des classes externes.
– Que peut-on faire ?
Solution : les passer en paramètres. Ex :
<%!
private void someMethod(HttpSession s) {
doSomethingWith(s);
}
%>
<% someMethod(session); %>
Format
<%@ page import="paquetage.classe" %>
<%@ page import="paquetage.classe1,...,paquetage.classeN" %>
But
Générer les instructions d’importation