1 / 31

JSTL J SP S tandard T ag L ibrary

JSTL J SP S tandard T ag L ibrary. Par: Bendjaballah Billel Mehdi (Billelmehdi@yahoo.com). Master 2 pro GI – option SRR 2004-2005. Sommaire. Introduction Servlets et JSP Tag Library avec JSP JSTL Expression Language: EL Exemples. Introduction.

harlan
Download Presentation

JSTL J SP S tandard T ag L ibrary

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. JSTLJSP Standard Tag Library Par: Bendjaballah Billel Mehdi (Billelmehdi@yahoo.com) Master 2 pro GI – option SRR 2004-2005

  2. Sommaire • Introduction • Servlets et JSP • Tag Library avec JSP • JSTL • Expression Language: EL • Exemples J S T L

  3. Introduction • Profusion des langages de programmation de pages dynamiques • CGI, PHP, ASP (.NET) • Servlets et JSP (JavaServer Pages) • Conteneur web: Jakarta Tomcat • Caractéristiques des grands projets d’applications Web. • Plusieurs équipes spécialisées. • Séparation des tâches. • Architecture en modèle MVC (Model View Controller) • Model = Logique métier (EJB,DBMS) • View = Présentation (JSP, JSTL,..) • Controller = Servlets J S T L

  4. Servlets • Classes Java • Générer des Pages HTML dynamiques depuis des requêtes • out.println() pour générer du HTML. • Inconvénients: • Code illisible si la page à générer est volumineuse (Maintenance) • Difficulté à faire la mise en page. • Développeur ou web designer? Public class MyServlet extends HttpServlet{ public void doGet(HttpServletRequest req,HttpServletReponse res){ PrintWriter out = res.getWriter(); out.println("<html><head><title>Hello</title></head>"); out.println("<body>Hello Servlet Test</body></html>"); } J S T L

  5. JSP • Création de contenu web dynamique simplifiée avec JSP • Quelques notions sur JSP • Éléments de script: • Scriplets<% code java %> • Déclarations<%! Déclarations %> • Expressions<%= expression %> • Syntaxe XML <jsp:forward page="forward.jsp" /> <jsp:include page="result.jsp" /> • Directives <%@page import="java.util.*"  %> <%@taglib prefix="c" uri="WEB-INF/tld/core.tld" %> J S T L

  6. Model (BL) Servlets (Control) JSP (view) Servlets et JSP • Il est Possible de faire coopérer des Servlets avec les JSP • JSP pour l’affichage = allégée en code java (présentation) • Servlets pour le traitement des requêtes et travail en arrière plan = plus de code HTML • Modèle MVC en Struts et JSF J S T L

  7. Tag Library TLD • Introduites avec la version JSP 1.1 • Avantages • Étendre les balises JSP standards • Balises spécifiques à un cas d’usage • Réduire l’utilisation des scriplets • Améliorer la lisibilité de la page JSP • Libérer les concepteurs de pages du code Java • Mise en oeuvre • Classe Java Handle avec la librairie javax.servlets.jsp.tagext • Fichier file.tld descripteur du tag • Page JSP utilisant la nouvelle balise J S T L

  8. Tag Library ExempleHello World • La classe Java (Class handler) Import javax.servlet.jsp.tagext.*; Publicclass Hello extends TagSupport{ publicint doStartTag() throwsJspException { try { pageContext.getOut().print("Hello World"); } catch (Exception ex) { thrownew JspException("IO problems"); } return SKIP_BODY; } } J S T L

  9. Tag Library ExempleHello World • Le descripteur hello.tld <?xml version="1.0" ?> <!DOCTYPE taglib PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.1//EN" "http://java.sun.com/j2ee/dtds/web-jsptaglib_1_1.dtd"> <taglib> <tlibversion>1.0</tlibversion> <jspversion>1.2</jspversion> <!-- Hello tag --> <tag> <name>hello</name> <tagclass>basic.Hello</tagclass> <bodycontent>empty</bodycontent> <info> Tag that Print Hello World </info> </tag> </taglib> J S T L

  10. Tag Library ExempleHello World • Utilisation • Dans leweb.xml • Dans la pageJSP <web-app> <taglib> <taglib-uri> http://www.ecom.com/taglibs/utilitytags </taglib-uri> <taglib-location> /WEB-INF/tld/utilitytags.tld </taglib-location> </taglib> </web-app> <%@ taglib uri="http://www.ecom.com/taglibs/utilitytags" prefix="h" %> . . . <h:hello/> . . . J S T L

  11. JSTL • Depuis la version JSP 1.2 • Spécification développé par le groupe d’experts JSR 52 • Collection de Tag Librairies personnalisées qui implémentent la plus part des fonctions communes aux pages web: • Itérations et conditions (core) • Formatage des données (format) • Manipulation de XML (xml) • Accès au bases de données (sql) • Utilisation du langage EL (Expression Language) • Avantages • Code simple, lisible et facile à maintenir • Le concepteur de page est libéré de code Java • Évite au développeur d’écrire à chaque fois les fonctions de bases. J S T L

  12. EL: Expression Language • Spécification de EL sous l’autorité du groupe d’expert JSR-152 pour JSP 1.3 • Le JSR-52 et JSR-152 travail ensemble sur la spécification de l’Expression Language • Deux version: une pour JSTL et l’autre pour JSP 1.3 • En JSTL il est utilisé uniquement dans la valeur d’un attribut: <prefix:tag attr1="${ expr }" /> • Il est invoqué exclusivement via la syntaxe ${ expr } J S T L

  13. EL: Expression Languageobjets prédéfinies • Un identificateur dans EL fait référence à une variable retourné par l’appel de pageContext.findAttribute(identificateur) et qui est dans la portée (scope): page, request, session ou application. ${ var } = pageContext.getAttribute("var") • Objets implicites: • pageScope, requestScope, sessionScope, applicationScope • Accès au paramètres d’une requête HTTP viaparam(objet de type Map) etparamValue • Un objet implicitepageContextqui donne accès aux propriétés associés au contexte de la page JSP J S T L

  14. EL: Expression LanguageOpérateurs • Opérateurs relationnels (== != < > <= >=), arithmétiques (+ - * / %) et logiques (&& || !) • L’opérateur [ ] pour accéder au objets de type Map, Array et List Ex: param["p1"]param.get("p1") J S T L

  15. JSTLcore tag library • Fonction de base • Fonction de teste • Fonction itérative • SQL • XML J S T L

  16. JSTLcore tag library Fonctions de base • Affichage <c: out value=" expression " /> <%= expression %> • Affectation <c:set value="value" var=" varName " scope=" application " /> <% pageContext.setAttribute("varName",value,SCOPE) %> • Exception java.lang.Throwable <c:catch [var="varName"] > actions a surveiller </c:catch> <% try{ actions à surveiller }catch(Throwable varName){} %> J S T L

  17. JSTLcore tag library Les conditions 1- simpleif(cond) 2-choix multipleif/else <c:if test="${user.visitCount = = 1}"> <c:out value="Première visite.Bienvenue!" /> </c:if> <% if(user.visitCount == 1){ %> <%= "Prmière visite.Bienvenue" %> <% } %> <c:choose> <c:when test="${count == 0}”> Pas de visite! </c:when> <c:otherwise> <c:out value="${count}"/> visiteurs. </c:otherwise> </c:choose> <% If(count == 0){ %> <%= Votre compte est vide %> <% }else{ %> <%= count+"visiteurs" %> <% } %> J S T L

  18. JSTLcore tag library Les itérations avec la bouclefor/while en JSP <%@page import="java.util.*" %> . . . . <% Member user = null; Collection users = session.getAttribute("members"); Iterator it = users.iterator(); while(it.hasNext()){ user = (Member) it.next(); %> <%= "nom: "+user.getName() %> <% } %> J S T L

  19. JSTLcore tag library Les itérations avec la boucle for/while forEach <c:forEach var=”user” items=”sessionScope.members” [begin] [end] [step]> <c:out value="nom: ${user.name}" /> </c:forEach> J S T L

  20. JSTLcore tag library SQL • Faire des requêtes • Accès au résultat simplifié • Faire des mises à jour • Faire des transactions J S T L

  21. JSTLSQL Data source est de typeJavax.sql.DataSource <sql:query var="customers" dataSource="${dataSource}"> SELECT * FROM customers WHERE country = ’Algeria’ ORDER BY lastname </sql:query> <table> <c:forEach var="row" items="${customers.rows}"> <tr> <td><c:out value="${row.lastName}"/></td> <td><c:out value="${row.firstName}"/></td> <td><c:out value="${row.address}"/></td> </tr> </c:forEach> </table> J S T L

  22. JSTLSQL Data source est de typeJavax.sql.DataSource <%@page import="java.sql.*,javax.sql.*" %> <% Connection con = dataSource.getConnection; Statement stm = con.createStatement(); ResultSet customers = stm.executeQuery("SELECT * FROM customers WHERE country = ’Algeria’ ORDER BY lastname"); %> <table> <% while(customers.next()){ %> <tr> <td><%= customers.getString("lastName") %></td> <td><%= customers.getString("lastName") %></td> <td><%= customers.getString("lastName") %></td> </tr> <% } %> </table> J S T L

  23. JSTLSQL <sql:transaction [dataSource=”dataSource”] [isolation=isolationLevel]> <sql:query> and <sql:update> statements </sql:transaction> isolationLevel ::= "read_committed" | "read_uncommitted" | "repeatable_read" | "serializable" Les transactions J S T L

  24. JSTLXML • <x:parse> parse un document XML par sa DTD • <x:out> Évalue une expression Xpath et affiche le résultat • <x:transform> applique les transformations d’une feuille de style XSLT sur un document XML J S T L

  25. JSTLlookup EJB Tag • Définition d’un tag pour faire le lookup sur un EJB • En JSP plusieurs instructions complexes • Le concepteur de page doit connaître java, les EJB et le mécanisme de lookup. <%@page import="javax.naming.*,java.rmi.*,java.ejb.*" %> <%@taglib prefix="ejb" uri="" %> <% Context c = new InitialContext(); Object obj = c.lookup("java:comp/env/ejb/Admin"); EJBHome home = PortableRemoteObject.narrow(obj,EJBHome.class); %> J S T L

  26. JSTLlookup EJB Tag • Entrée:nom JNDI de l’EJB + nom de la class Home • Sortie:Objet de type EJBHome sauvegardé dans session <ejb:lookup var="varName" ejbname="JndiName" homename="HomeClassName" /> J S T L

  27. JSTLlookup EJB Tag : EJBLookupTag.java public int doStartTag() throws JspException { Context c; try { c = new InitialContext(); Object obj = c.lookup("java:comp/env/ejb/"+ejbname); home = (EJBHome) PortableRemoteObject.narrow(obj,homename); if(home == null) throw new JspException("[EJBLookupTag]Unable to lookup: "+ejbname); } catch (NamingException ne) { throw new JspException("[EJBLookupTag] Caused by: "+ne.getMessage()); } return SKIP_BODY; } public int doEndTag() throws JspException { pageContext.setAttribute(home, homeClass, PageContext.PAGE_SCOPE); return EVAL_PAGE; } J S T L

  28. JSTLlookup EJB Tag: ejb.tld <taglib> …. <tag> <name>lookup</name> <tag-class>com.ecom.jstl.EJBLookupTag</tag-class> <body-content>EMPTY</body-content> <attribute> <name>var</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> <attribute> <name>ejbname</name> <required>true</required> <rtexprvalue>true</rtexprvalue> </attribute> <attribute> <name>homename</name> <required>true</required> <rtexprvalue>false</rtexprvalue> </attribute> </tag> </taglib> J S T L

  29. JSTLlookup EJB Tag : web.xml et index.jsp <web-app> <taglib> <taglib-uri>/jstl-ejb-taglib</taglib-uri> <taglib-location>/WEB-INF/ejb.tld</taglib-location> </taglib> </web-app> <@taglib prfix="ejb" uri="/jstl-ejb-taglib" %> . . . <ejb:lookupvar="admin" ejbname="Admin" homename="AdminHome" /> J S T L

  30. JSTLQuestions? Questions? J S T L

  31. JSTLDemo La démo J S T L

More Related