Table des matières
Une page JSP
utilise du code HTML
dans lequel est mis du code Java
. Le code généré par les appels aux fonctions JSP
est du HTML 4.01
.
Tous les exemples ci-dessous utilisent le BeanPersonne.
Cycle de vie
Servlet avec vue… Archive du 03/10/2017 le 26/04/2020
Sous Eclipse, les .jsp
sont transformés en .java
dans le dossier (ici avec JSTL) workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work/Catalina/localhost/jstl/org/apache/jsp/
.
Création du projet
Syntaxe
<%– –%>
: commentaire JSP;
<%! %>
: déclaration d’une variable;
<% %>
: inclusion de code Java quelconque;
<%= %>
: affichage d'un variable.
<%@ %>
: directives.
<%@ page language="java"%>
: langage Java,<%@ page contentType="text/html;%>
: Contenu HTML,<%@ page pageEncoding="UTF-8"%>
: Encodage UTF-8,<%@ page import="java.util.List, com.llgc.Liste6"%>
: import de package Java,<%@ taglib uri="WEB-INF/tagperso.tld" prefix="tag"%>
: déclaration d'une tag librairie,<%@ include file="header.jsp" %>
: inclusion d'un fichier.
${ }
: évaluation d'une expression en Java, remplace <%= %>
.
Confidentialité
page
: la page JSP qui a créé la donnée,request
: la donnée est transmissible par desforward
ou à d'autresJSP
grâce à la servlet,session
: variable session, communication entre servlet,application
: tout le monde, communication entre les clients.
J2EE JSP Basics Archive du 2012 le 26/04/2020
- Les variables accessibles à une page JSP en fonction des portées sont
pageScope
,requestScope
,sessionScope
etapplicationScope
.
Variables implicites pour toutes les pages JSP
pageContext
: Information sur l'environnement serveur JSP - Implicit Objects Archive du 2010 le 26/04/2020.pageContext.request
: This is the HttpServletRequest object associated with the request.pageContext.response
: This is the HttpServletResponse object associated with the response to the client.pageContext.out
: This is the PrintWriter object used to send output to the client.pageContext.session
: This is the HttpSession object associated with the request.pageContext.application
: This is the ServletContext object associated with application context.pageContext.config
: This is the ServletConfig object associated with the page.pageContext.pageContext
: This encapsulates use of server-specific features like higher performance JspWriters.pageContext.page
: This is simply a synonym for this, and is used to call the methods defined by the translated servlet class.pageContext.exception
: The Exception object allows the exception data to be accessed by designated JSP.
param
: Les paramètres de la requête HTTP s'il n'y a qu'une seule valeur,
paramValues
: Les paramètres de la requête HTTP s'il y a plusieurs valeurs,
header
: Les paramètres de l'en-tête HTTP s'il n'y a qu'une seule valeur,
headerValues
: Les paramètres de l'en-tête HTTP s'il y a plusieurs valeurs,
cookie
: Les cookies,
initParam
: Le fichierweb.xml
,
Exemple 0 - Page non dynamique
- maPage.html
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <p>Ma première page HTML.</p> </body> </html>
Puis consultez la page à http://localhost:8080/nomProjet/maPage.html
Exemple 1 - La base
- indexjsp.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <p> <% if (15 % 2 == 0) { out.print ("15 est un nombre pair."); } else { out.print ("15 est un nombre impair."); } %> <br /> <% switch (16 % 2) { case 0: out.print ("16 est un nombre pair."); break; default: out.print ("16 est un nombre impair."); break; } %> </p> </body> </html>
Rendu :
15 est un nombre impair. 16 est un nombre pair.
Exemple 2 - Utilisation d'un Bean
- indexjsp2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:useBean id="perso1" scope="session" class="com.llgc.BeanPersonne"> <jsp:setProperty property="taille" name="perso1" value="170" /> </jsp:useBean> <jsp:setProperty property="yeuxBleus" name="perso1" value="true" /> <jsp:useBean id="perso2" scope="session" class="com.llgc.BeanPersonne"> <jsp:setProperty property="taille" name="perso2" value="160" /> </jsp:useBean> <jsp:setProperty property="yeuxBleus" name="perso2" value="false" /> <p> La personne 1 possède une taille de ${sessionScope.perso1.taille} cm et <% if (!perso1.isYeuxBleus ()) { out.print ("n'a pas"); } else { out.print ("a"); } %> les yeux bleus.<br /> La personne 2 possède une taille de <jsp:getProperty property="taille" name="perso2"/> cm et <% if (!perso2.isYeuxBleus ()) { out.print ("n'a pas"); } else { out.print ("a"); } %> les yeux bleus. </p> </body> </html>
Rendu :
La personne 1 possède une taille de 170 cm et a les yeux bleus. La personne 2 possède une taille de 160 cm et n'a pas les yeux bleus.
Exemple 3 - Formulaire avec Bean global et session
- index3.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:useBean id="persoloc" scope="session" class="com.llgc.BeanPersonne" /> <jsp:setProperty name="persoloc" property="*" /> <jsp:useBean id="perso" scope="application" class="com.llgc.BeanPersonne" /> Valeur par défaut du bean application : ${perso.taille}.<br /> Valeur en cours du bean session : ${persoloc.taille} <br /> <form method="post" action="index3.jsp"> Taille : <input name="taille" type="text" /> <input type="submit" value="Submit" /> </form> </body> </html>
Exemple 3b - JSP + Servlet
Mettre le code Java dans la page JSP peut être acceptable pour de petits projets mais pas plus (Servlets and JSP Pages Best Practices Archive du 03/2003 le 27/04/2020
- convinput.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Convertisseur de température</title> </head> <body> Vous pouvez convertir une température exprimée en <b>Celsius</b> en une valeur exprimée en <b>Fahrenheit</b>. <hr /> <form method="POST" action="${pageContext.request.contextPath}/convertisseur"> Valeur en Celsius: <input type="text" size="20" name="celsius" /> <br /> <input type="submit" value="Convertir" /> </form> <hr /> </body> </html>
- convoutput.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Résultat de la conversion</title> </head> <body> <p>Vous avez demandé la conversion en Fahrenheit de la valeur en Celsius ${requestScope.temperature.celsius}</p> <p> <b>Et le résultat est: ${requestScope.temperature.fahrenheit} degrés Fahrenheit </b>! </p> </body> </html>
requestScope.temperature
existe grâce à request.setAttribute("temperature", temp);
temperature.celsius
va automatiquement chercher la méthode getCelsuis
(isCelsuis
si la méthode renvoie un boolean). Il est donc impératif de correctement nommer ses méthodes dans les classes Java.
- Temperature.java
package modeles; /** * Une classe permettant d'obtenir une température en Celsius ou Farenheit. */ public class Temperature { /** * La valeur, exprimée en degrés Celsius */ private double celsius; /** * Le constructeur, prend des Celsius en paramètres */ public Temperature(double valeurCelsius) { celsius = valeurCelsius; } /** * Pour obtenir la valeur en Celsius * * @return Valeur de la température en Celsius */ public double getCelsius() { return celsius; } /** * Pour obtenir la valeur en Fahrenheit * * @return Valeur de la température en Farenheit */ public double getFahrenheit() { return (celsius * 9 / 5) + 32; } }
- Convertisseur.java
package controllers; import java.io.IOException; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import modeles.Temperature; /** * Servlet implementation class Convertisseur */ @WebServlet("/convertisseur") public class Convertisseur extends HttpServlet { /** * */ private static final long serialVersionUID = -4407786145652563255L; /** * @see HttpServlet#HttpServlet() */ public Convertisseur() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String maVue = "/convinput.jsp"; RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(maVue); dispatcher.forward(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // On devrait récuperer la valeur saisie par l'utilisateur String valCelsius = request.getParameter("celsius"); if (valCelsius.isEmpty()) { // Pas de valeur: il faudrait afficher un message, etc. valCelsius = "20"; } // Action: appliquons le convertisseur. Espérons que valCelsius // représente // bien un nombre, sinon... Temperature temp = new Temperature(Double.valueOf(valCelsius)); // Enregistrons l'objet dans la requête request.setAttribute("temperature", temp); // Transfert à la vue String maVue = "/convoutput.jsp"; RequestDispatcher dispatcher = getServletContext().getRequestDispatcher(maVue); dispatcher.forward(request, response); } }
Exemple 3c - avec validation des données
Dans le cas d'un JSP
, la vérification des données se fait après la modification des propriétés des Beans, lors de l'appel d'une méthode dédiée. Le Javascript
peut être utilisé en pré-traitement.
Méthode à ajouter au Bean :
- BeanPersonne.java
public boolean validate () { if (taille < 30 || taille > 250) { return false; } return true; }
- index3b.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <jsp:useBean id="persoloc" scope="session" class="com.llgc.BeanPersonne" /> <jsp:setProperty name="persoloc" property="*" /> <% if (!persoloc.validate ()) { %> <jsp:forward page="index3b-fail.jsp" /> <% } %> <br /> <form method="post" action="index3b.jsp"> Taille : <input name="taille" type="text" /> <input type="submit" value="Submit" /> </form> </body> </html>
Exemple 4 - context-param et init-param
Ajout de :
- un
servlet
et sonservlet-mapping
s'appliquant àindexjsp4.jsp
, - trois
context-param
,
- web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <display-name>EL</display-name> <servlet> <servlet-name>Faces Servlet</servlet-name> <servlet-class>javax.faces.webapp.FacesServlet</servlet-class> </servlet> <servlet> <servlet-name>JSP</servlet-name> <jsp-file>/indexjsp4.jsp</jsp-file> <init-param> <param-name>user2</param-name> <param-value>utilisateurServlet</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>JSP</servlet-name> <url-pattern>/indexjsp4.jsp</url-pattern> </servlet-mapping> <context-param> <param-name>user</param-name> <param-value>utilisateur</param-value> </context-param> <context-param> <param-name>password</param-name> <param-value>mot de passe</param-value> </context-param> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>/faces/*</url-pattern> </servlet-mapping> … </web-app>
- indexjsp4.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <p> <% out.println ("nom : " + getServletContext ().getInitParameter ("user") + "<br />"); out.println ("pass : " + getServletContext ().getInitParameter ("password") + "<br />"); out.println ("driver : " + getServletContext ().getInitParameter ("driver") + "<br />"); out.println ("nom2 : " + getServletConfig().getInitParameter ("user2")); %> </p> </body> </html>
Rendu :
nom : utilisateur pass : mot de passe driver : com.mysql.jdbc.Driver nom2 : utilisateurServlet
Exemple 5 - Cookies
- indexjsp5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <p> <% Cookie[] cookies = null; int compteur = 0; // Get an array of Cookies associated with this domain cookies = request.getCookies (); if (cookies != null) { int i; for (i = 0; i < cookies.length; i++) { if (cookies[i].getName ().compareTo ("compteur") == 0) { compteur = Integer.parseInt (cookies[i].getValue ()); out.println ("compteur : " + compteur); break; } } if (i == cookies.length) { out.println ("Pas de cookie, allez cuisiner !!!"); } } else { out.println ("Pas de cookie, allez cuisiner !!!"); } compteur++; Cookie c = new Cookie ("compteur", "" + compteur); c.setMaxAge (3600); response.addCookie (c); %> </p> </body> </html>
Rendu 1 :
Pas de cookie, allez cuisiner !!!
Rendu 2 :
compteur : 1
Exemple 6 - Affichage d'une liste dans un tableau
La liste est générée par une classe Java Liste6 et affiche un type BeanPersonne.
- indexjsp6.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" import="java.util.List, com.llgc.BeanPersonne, com.llgc.Liste6"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <table border="1"> <tr> <td>Taille</td> <td>Yeux bleus</td> </tr> <% List <BeanPersonne> liste = Liste6.getListePersonne (); for (BeanPersonne beanPersonne : liste) { out.println (" <tr>"); out.println (" <td>" + beanPersonne.getTaille () + "</td>"); out.println (" <td>" + beanPersonne.isYeuxBleus () + "</td>"); out.println (" </tr>"); } %> </table> </body> </html>