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''. Tous les exemples ci-dessous utilisent le [[helloworld:design_pattern:bean:java|BeanPersonne]] ainsi que la librairie JSTL 2 qui supportent les EL. =====Cycle de vie===== Voir [[helloworld:web:java:jsp#Cycle_de_vie|JSP]]. =====Création du projet===== Nécessite un projet de type [[ide:eclipse:projet|Dynamic Web Project]] et l'[[ide:eclipse:projet#installation_d_une_librairie]] de la librairie [[https://jstl.java.net/download.html|JSTL]] (bien installer les 2 parties API et Implementation). ====org.apache.jasper.JasperException: L'uri absolue: http://java.sun.com/jsp/jstl/core==== org.apache.jasper.JasperException: L'uri absolue: http://java.sun.com/jsp/jstl/core ne peut être résolu dans le fichier web.xml ou dans les fichiers jar déployés avec cette application org.apache.jasper.compiler.DefaultErrorHandler.jspError(Unknown Source) org.apache.jasper.compiler.ErrorDispatcher.dispatch(Unknown Source) org.apache.jasper.compiler.ErrorDispatcher.jspError(Unknown Source) org.apache.jasper.compiler.TagLibraryInfoImpl.generateTldResourcePath(Unknown Source) org.apache.jasper.compiler.TagLibraryInfoImpl.(Unknown Source) org.apache.jasper.compiler.Parser.parseTaglibDirective(Unknown Source) org.apache.jasper.compiler.Parser.parseDirective(Unknown Source) org.apache.jasper.compiler.Parser.parseElements(Unknown Source) org.apache.jasper.compiler.Parser.parse(Unknown Source) org.apache.jasper.compiler.ParserController.doParse(Unknown Source) org.apache.jasper.compiler.ParserController.parse(Unknown Source) org.apache.jasper.compiler.Compiler.generateJava(Unknown Source) org.apache.jasper.compiler.Compiler.compile(Unknown Source) org.apache.jasper.compiler.Compiler.compile(Unknown Source) org.apache.jasper.compiler.Compiler.compile(Unknown Source) org.apache.jasper.JspCompilationContext.compile(Unknown Source) org.apache.jasper.servlet.JspServletWrapper.service(Unknown Source) org.apache.jasper.servlet.JspServlet.serviceJspFile(Unknown Source) org.apache.jasper.servlet.JspServlet.service(Unknown Source) javax.servlet.http.HttpServlet.service(Unknown Source) org.apache.tomcat.websocket.server.WsFilter.doFilter(Unknown Source) Soit la librairie jstl-1.2.jar est manquante dans le dossier ''WEB-INF/lib'', soit elle n'est pas la bonne version. Il existe aussi une version jar qui contient à la fois l'[[http://central.maven.org/maven2/javax/servlet/jstl/1.2/jstl-1.2.jar|API et l'implémentation]], {{ :helloworld:web:java:jsp_jstl_el:jstl-1.2.jar |Archive JSTL 1.2}}. [[http://stackoverflow.com/questions/4928271/how-to-install-jstl-the-absolute-uri-http-java-sun-com-jstl-core-cannot-be-r|How to install JSTL? The absolute uri: http://java.sun.com/jstl/core cannot be resolved]] {{ :helloworld:web:java:jsp_jstl_el:jsp_-_how_to_install_jstl_the_absolute_uri_http_java.sun.com_jstl_core_cannot_be_resolved_-_stack_overflow_2020-04-26_8_13_32_pm_.html |Archive du 08/02/2011 le 26/04/2020}} =====Element Language===== Rappel de [[:helloworld:web:java:jsp|JSP]], les objets implicites sont ([[http://adiguba.developpez.com/tutoriels/j2ee/jsp/el/|Présentation des Expressions Languages]] {{ :helloworld:web:java:jsp_jstl_el:les_expressions_languages_2020-04-26_8_15_01_pm_.html |Archive du 08/08/2011 le 26/04/2020}}) : * ''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. =====Syntaxe===== ''%%%%'' : affiche le résultat de l'expression ''2+4''. Si l'évaluation échoue, la valeur par défaut sera affichée. Cette balise échappe aussi les caractères spéciaux (&, <, >, …). ''%%%%'' : définie une variable. ''%%%%'' : test conditionnel. Il n'existe pas de else. Pour en simuler un, il faut passer par la balise ''choose'' avec sa sous-balise ''otherwise''. ''%%%%'' : équivalent à ''switch'', ''case'', ''default''. '''' : boucle soit d'une variable variant de ''n'' à ''m'', soit en parcourant tous les éléments de type liste (''HashMap'', ''Collection'', …). ''%%%%'' : ajout avant la base l'équivalent d'un ''#{pageContext.request.contextPath}''. Le rendu sera, par exemple : ''/jstl/urlbase/?param=valeur'' et le lien renverra alors vers ''http://localhost:8080/jstl/urlbase/?param=valeur''. =====Exemple 1 - La base===== Bien importer la JSTL 1.2 (et 1.1) avec ''%%uri="http://java.sun.com/jsp/jstl/core"%%'' et non pas la JSTL 1.0 qui s'importe avec ''%%uri="http://java.sun.com/jstl/core"%%''. [[http://stackoverflow.com/questions/13285826/can-not-find-the-tag-library-descriptor-for-http-java-sun-com-jsp-jstl-core|Can not find the tag library descriptor for “http://java.sun.com/jsp/jstl/core”]] {{ :helloworld:web:java:jsp_jstl_el:eclipse_-_can_not_find_the_tag_library_descriptor_for_http_java.sun.com_jsp_jstl_core_-_stack_overflow_2020-04-26_8_15_17_pm_.html |Archive du 08/11/2012 le 26/04/2020}} <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Insert title here


Rendu : 15 est un nombre impair. 16 est un nombre pair. =====Exemple 2 - Utilisation d'un Bean===== <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Insert title here

La personne 1 possède une taille de ${sessionScope.perso1.taille} cm et n'a pas les yeux bleus.
La personne 2 possède une taille de ${perso2.taille} cm et n'a pas les yeux bleus.

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 [[helloworld:web:java:jsp#exemple_3_-_formulaire_avec_bean_global_et_session|JSP]] =====Exemple 3b - avec validation des données===== Voir [[helloworld:web:java:jsp#exemple_3b_-_avec_validation_des_donnees|JSP]] =====Exemple 4 - context-param et init-param===== Ajout de : * un ''servlet'' et son ''servlet-mapping'' s'appliquant à ''indexjsp-jstl4.jsp'', * trois ''context-param'', EL Faces Servlet javax.faces.webapp.FacesServlet JSP2 /indexjsp-jstl4.jsp user2 utilisateurServlet JSP2 /indexjsp-jstl4.jsp user utilisateur password mot de passe driver com.mysql.jdbc.Driver Faces Servlet /faces/* <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Insert title here

nom : ${initParam['user']}
pass : ${initParam['password']}
driver : ${initParam['driver']}
nom2 : <%=config.getInitParameter("user2")%>

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']'' [[https://coderanch.com/wiki/660120/Init-Params-Expression-Language|Init Params Thru Expression Language]] {{ :helloworld:web:java:jsp_jstl_el:init_params_thru_expression_language_wiki_forum_at_coderanch_2020-04-26_8_20_42_pm_.html |Archive du 03/01/2016 le 26/04/2020}}. 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''. 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. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Insert title here

compteur : ${cookie.compteur.value} Pas de cookie, allez cuisiner !!!

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 [[helloworld:web:java:servlet#exemple_6_-_affichage_d_une_liste_dans_un_tableau|Liste6]] et affiche un type [[helloworld:design_pattern:bean:java#cas_general|BeanPersonne]]. <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%> Insert title here
Taille Yeux bleus