1. Les Java Server Pages (JSP)
Pr Abderrahim Marzouk
Département de Mathématiques et
Informatique
Master RSI 2019-2020
1
2. JSP ?
• JSP permet d’insérer du code Java directement
dans une page HTML en utilisant des balises
(tags):
Scriptlets : <%code Java %>
Expressions : <%=expression Java%>
Déclarations : <%!code Java %>
Directives : <%@directive %>
2
• Une page JSP est enregistrée comme un fichier texte avec l’extension .jsp
• Une JSP est transformée en servlet par Tomcat
3. JSP Servlet
Une page JSP (exemple.jsp) devient le Servlet
suivant:
public class exemple_jsp extends HttpServlet
{ //méthode de service
public void _jspService(HttpServletRequest request, HttpServletResponse
response) throws IOException,ServletException
{
---------------------------------------------
}
}
3
4. Balise de scriptlets : <% code Java %>
Permet d’insérer des morceaux de code (blocs
d’instructions) Java dans la page JSP.
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Ma Première Page JSP</title>
</head>
<body>
<% System.out.println("Soyez prudents et restez à la maison"); %>
<% System.out.println(new java.util.Date()); %>
</body>
</html>
4
5. Création d'une JSP
1. Créer à l’aide d’Eclipse un nouveau projet web
dynamique.
2. Faites un clic-droit sur le dossier WebContent de
votre projet, puis choisissez New > JSP File, et dans
la fenêtre qui apparaît renseignez le nom de votre
page JSP.
5
6. Balise d’expressions : <%=expression %>
Où expression peut être soit un objet Java , soit
une expression numérique, soit un appel à une
méthode qui retourne une valeur, etc...
L’expression est évaluée et insérée dans la méthode
de service de la servlet
// datePage.jsp
Date courante: <%=new java.util.Date()%> <br>
<%=2 * 5%><br>
<%=Math.random()%>
6
7. Balise d’expressions : <%=code %>
On a :
<%=expression %> < % out.println(expression) ;%>
Lorsque le conteneur web voit :
<%= expression %>
Il le transforme en:
<% out.print(expression); %>
Remarque: Il ne faut surtout pas mettre de (;) à la
fin d’une expression.
Comme dans l’expression: <%= (3*7); %>
7
8. Balise de déclarations : <%! code java %>
Permet de définir des méthodes ou des variables qui seront
insérées dans le corps de la servlet générée par Tomcat.
8
Voici un exemple de compteur de visites de pages JSP
//compteur.jsp
<%! private int compteur = 0 ; %>
Nombre de visites à la page depuis le démarrage du serveur Tomcat est:
<%= ++compteur %>
9. Balise de déclarations
Dans le code ci-dessus, nous avons utilisé la
balise de déclaration pour déclarer la
variable compteur. La page JSP est traduite en
servlet ci-dessous, nous pouvons voir que la
variable compteur est déclarée en dehors de
la méthode _jspservice(). Si nous déclarons la
même variable en utilisant la balise scriptlet, elle
entrera dans la méthode de service
9
10. Balise de déclarations
public class compteur_jsp extends HttpServlet{
int compteur=0;
public void _jspService(HttpServletRequest request, HttpServletResponse
response) throws IOException,ServletException {
PrintWriter out = response.getWriter();
response.setContenType("text/html");
out.write("<html><body>");
out.write("Nombre de visites à la page depuis le démarrage du serveur
Tomcat est: ") ;
out.print(++compteur);
out.write("</body></html>");
}}
10
11. Balise déclaration ou balise Scriptlet ?
• Si vous souhaitez inclure une méthode dans
votre fichier JSP, vous devez utiliser la balise
de déclaration, car pendant la phase de
traduction de JSP, les méthodes et variables à
l'intérieur de la balise de déclaration
deviennent des méthodes et des attributs du
servlet généré à partir du fichier JSP
11
12. Exemple
//compteur.jsp
<%! int compteur = 0;
int getCompteur() {
return ++compteur;
}
%>
Nombre de visites:
<%=getCompteur()%>
12
Le code ci-dessus sera traduit dans le servlet suivant:
13. Exemple(suite)
public class compteur_jsp extends HttpServlet
{
int compteur = 0;
int getCompteur () {
return ++compteur ;
}
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException
{
PrintWriter out = response.getWriter();
response.setContenType("text/html");
out.write("<html><body>");
out.write("Nombre de visites:");
out.print(getCompteur ());
out.write("</body></html>");
}}
13
14. Balise de directives: <%@ directive %>
Informations globales relatives à la page
Trois principaux types de directives:
1) page: modifier les données de la page (import de packages,
spécification d’un type de contenu, gestion des sessions)
<%@ page import="java.util.*" %>
2) include: inclure des fichiers ou autres servlets/JSP
<%@ include page="/monJSP.jsp" flush="true" %>
3) taglib: utiliser des bibliothèques de balises personnalisées
<%@ tagliburi="..." prefix="..." %>
14
15. Balise de directives: <%@ directive %>
//includePage.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding = "utf-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h4> La date d'aujourd'hui est :
<jsp:include page="datePage.jsp" flush="true" /> </h4>
<%
out.println("<h4> la sortie de la page datePage.jsp est affichée au-dessus</h3>");
%>
</body>
</html>
15
16. Objets Implicites/ Variables prédéfinies dans
les scriptlets
Objet implicite Son type
request HttpServletRequest
response HttpServletRequest
out JspWriter
session HttpSession
16
Plusieurs objets sont automatiquement disponibles dans une page
JSP. Ils sont appelés objets implicites.
17. Variables prédéfinies request
L’objet request est principalement utilisé lorsque
on veut traiter les données envoyées par un
client soit à partir de la barre d’adresses d’un
navigateur, soit en cliquant sur un hyperlien ou
soit à partir de la soumission de formulaires
dans l’application, etc.
<% String str = request.getParameter("uname"); %>
17
18. Variables prédéfinies response
L’objet response représente la réponse au client. Grâce à
cet objet, le programmeur JSP peut ajouter de nouveaux
cookies, codes d'état HTTP, effectuer une redirection, etc.
Cookie cookie = new Cookie("key","value");
cookie.setMaxAge(60*60*24);
response.addCookie(cookie);
response.sendError(404, "Page non trouvée");
response.sendRedirect("success.jsp");
response.setContentType("text/html");
18
19. Variable prédéfinie out
L’objet out est utilisé pour écrire du contenu sur
le client (un navigateur).
<% out.println("Bonjour");
out.println("Comment vas-tu ?");
%>
Affichage côté navigateur:
Bonjour
Comment vas-tu ?
19
20. Variable prédéfinie session
L’objet session permet de faire le lien entre les requêtes
d’un même utilisateur. En utilisant l'objet session, le
programmeur peut invoquer ses méthodes déclarées
dans l'interface HttpSession pour définir, obtenir ou
supprimer un attribut ou pour obtenir des informations
sur la session.
• session.setAttribute (String name, Object value): Cette
méthode est utilisée pour définir la valeur d'attribut
pour l'utilisateur dans cette session.
• session.getAttribute (String name): Cette méthode est
utilisée pour obtenir la valeur d'attribut définie à l'aide
de la méthode setAttribute () dans cette session.
20
21. Exemple d’utilisation de la variable
session (1)
index.html
<form action="session-un.jsp" method="get">
Nom: <input type="text" name="nom"><br>
Prenom: <input type="text" name="prenom"><br>
<input type="submit" value="Envoyer">
</form>
21
22. Exemple d’utilisation de la variable
session (2)
session-un.jsp
<%String nom=request.getParameter("nom");
String prenom=request.getParameter("prenom");
session.setAttribute("nom", nom);
session.setAttribute("prenom", prenom);
out.print("Bonjour"+nom);
out.print("<br>");
out.print("Les données sont enregistrées avec succès dans la Session.
SVP cliquez sur le lien suivant pour le vérifier.");
%><br>
<a href="session-deux.jsp">Verifier</a>
22
23. Exemple d’utilisation de la variable
session (3)
session-deux.jsp
<%String nom=(String)session.getAttribute("nom");
String prenom=(String)session.getAttribute("prenom");
out.print("Nom:"+nom);
out.print("<br>");
out.print("Prenom:"+prenom);
%>
23
24. Mélange de balises de scriptlet et de
HTML
Nous allons inclure le code java dans la balise scriptlet <% ….. %>, et
toute la partie HTML est en dehors de celle-ci.
<table border="2">
<%
for (int i = 0; i <10; i++) {
%>
<tr>
<td>Nombre</td>
<td><%=i+1%></td>
</tr>
<%}%>
</table>
HTML
<% JAVA %>
HTML
<%= Expression %>
etc
24