Ceci est une ancienne révision du document !
Table des matières
Une page JSP
avec l'utilisation de la librairie JSTL
et des EL
(Element Language) utilise du code HTML
dans lequel est mis des tags provenant de la librairie JSTL
. Ce sont ces tags qui appellent les fonctions Java
. Le code généré par les appels aux fonctions JSP
et JSTL
est du HTML 4.01
.
<note>Tous les exemples ci-dessous utilisent le BeanPersonne ainsi que la librairie JSTL 2 qui supportent les EL.</note>
Cycle de vie
Voir JSP.
Création du projet
Nécessite un projet de type Dynamic Web Project et l'installation de la librairie JSTL (bien installer les 2 parties API et Implementation).
Element Language
Les objets implicites sont (Source, Archive) :
pageContext
: Accès à l'objet PageContext de la page JSP.pageScope
: Map permettant d'accéder aux différents attributs du scope 'page'.requestScope
: Map permettant d'accéder aux différents attributs du scope 'request'.sessionScope
: Map permettant d'accéder aux différents attributs du scope 'session'.applicationScope
: Map permettant d'accéder aux différents attributs du scope 'application'.param
: Map permettant d'accéder aux paramètres de la requête HTTP sous forme de String.paramValues
: Map permettant d'accéder aux paramètres de la requête HTTP sous forme de tableau de String.header
: Map permettant d'accéder aux valeurs du Header HTTP sous forme de String.headerValues
: Map permettant d'accéder aux valeurs du Header HTTP sous forme de tableau de String.cookie
: Map permettant d'accéder aux différents Cookies.initParam
: Map permettant d'accéder aux init-params du web.xml.
Exemple 1 - La base
<note important>Bien importer la JSTL 2 avec uri=“http://java.sun.com/jsp/jstl/core”
et non pas la JSTL 1 qui s'importe avec uri=“http://java.sun.com/jstl/core”
</note>
- indexjsp-jstl.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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> <c:if test="${15 % 2 == 0}"> <c:out value="15 est un nombre pair."></c:out> </c:if> <c:if test="${15 % 2 == 1}"> <c:out value="15 est un nombre impair."></c:out> </c:if> <br /> <c:choose> <c:when test="${16 % 2 == 0}"> <c:out value="16 est un nombre pair."></c:out> </c:when> <c:otherwise> <c:out value="16 est un nombre impair."></c:out> </c:otherwise> </c:choose> </p> </body> </html>
Rendu :
15 est un nombre impair. 16 est un nombre pair.
Exemple 2 - Utilisation d'un Bean
- indexjsp-jstl2.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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 <c:if test="${!perso1.yeuxBleus}"> n'a pas </c:if> <c:if test="${perso1.yeuxBleus}"> <c:out value="a" /> </c:if> les yeux bleus.<br /> La personne 2 possède une taille de ${perso2.taille} cm et <c:if test="${!perso2.yeuxBleus}"> n'a pas </c:if> <c:if test="${perso2.yeuxBleus}"> <c:out value="a" /> </c:if> 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
Voir JSP
Exemple 4 - context-param et init-param
Ajout de :
- un
servlet
et sonservlet-mapping
s'appliquant àindexjsp-jstl4.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>JSP2</servlet-name> <jsp-file>/indexjsp-jstl4.jsp</jsp-file> <init-param> <param-name>user2</param-name> <param-value>utilisateurServlet</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>JSP2</servlet-name> <url-pattern>/indexjsp-jstl4.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>
- indexjsp-jstl4.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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> nom : ${initParam['user']}<br /> pass : ${initParam['password']}<br /> driver : ${initParam['driver']}<br /> nom2 : <%=config.getInitParameter("user2")%><br /> </p> </body> </html>
<note warning>Il se semble pas possible de pouvoir accéder aux init-param
qui sont contenus dans le bloc servlet
sans passer par des scriptlets
. Il convient donc d'utiliser de préférence les context-param
qui sont accessibles via initParam['nom']
Source, Archive.</note>
Rendu :
nom : utilisateur pass : mot de passe driver : com.mysql.jdbc.Driver nom2 : utilisateurServlet
Exemple 5 - Cookies
Tout comme pour l'exemple 4, il n'est pas possible de modifier les cookies sans passer par des commandes Java. Il est donc nécessaire de passer par l'intermédiaire d'une servlet
.
- ServletJSP5.java
package com.llgc; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * Servlet implementation class ServletJSP5 */ @WebServlet ("/ServletJSP5") public class ServletJSP5 extends HttpServlet { /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setCharacterEncoding ("UTF-8"); String value = getCookie (request.getCookies (), "compteur"); response.setContentType ("text/html"); int compteur = 0; if (value != null) { compteur = Integer.parseInt (value); } compteur++; Cookie c = new Cookie ("compteur", "" + compteur); c.setMaxAge (3600); response.addCookie (c); this.getServletContext ().getRequestDispatcher ("/WEB-INF/indexjsp-jstl5.jsp").forward (request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet (request, response); } // Renvoie la valeur d'un cookie. protected static String getCookie (Cookie[] cookies, String cookieName) { if (cookies == null) { return null; } for (int i = 0; i < cookies.length; i++) { if (cookieName.equalsIgnoreCase (cookies[i].getName ())) { return cookies[i].getValue (); } } return null; } }
Le fichier .jsp
est mis dans le dossier WEB-INF
. Ainsi, seulement la servlet
a accès au fichier.
- indexjsp-jstl5.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> <!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> <c:if test="${not empty cookie.compteur}">compteur : ${cookie.compteur.value}</c:if> <c:if test="${empty cookie.compteur}">Pas de cookie, allez cuisiner !!!</c:if> </p> </body> </html>
Rendu 1 :
Pas de cookie, allez cuisiner !!!
Rendu 2 :
compteur : 1