Outils pour utilisateurs

Outils du site


helloworld:web:java:jsp

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

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

Nécessite un projet de type Dynamic Web Project.

Architecture du projet

The Java EE 5 Tutorial, Archive

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 des forward ou à d'autres JSP grâce à la servlet,
  • session : variable session, communication entre servlet,
  • application : tout le monde, communication entre les clients.

Diagramme de portée

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 et applicationScope.

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 fichier web.xml,

Implicit Objects, Archive, page 161

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>

Rendu du formulaire : Rendu du formulaire

Rendu de la réponse : Rendu de la réponse

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);
	}
 
}

Rendu du formulaire : Rendu du formulaire

Rendu de la réponse : Rendu de la réponse

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 son servlet-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>

Rendu : Rendu exemple 6

helloworld/web/java/jsp.txt · Dernière modification : 2020/05/11 00:25 de root