Download JSTL JSP Standard Tag Library

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the workof artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
JSTL
JSP Standard Tag Library
Par: Bendjaballah Billel Mehdi
([email protected])
Master 2 pro GI – option SRR 2004-2005
Sommaire






Introduction
Servlets et JSP
Tag Library avec JSP
JSTL
Expression Language: EL
Exemples
JSTL
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
JSTL
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>");
}
JSTL
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" %>
JSTL
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
Servlets
Model (BL)
JSP
(Control)
(view)
 Modèle MVC en Struts et JSF
JSTL
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
JSTL
Tag Library Exemple
Hello World
 La classe Java (Class handler)
Import javax.servlet.jsp.tagext.*;
Public class Hello extends TagSupport{
public int doStartTag() throws JspException {
try {
pageContext.getOut().print("Hello World");
} catch (Exception ex) {
throw new JspException("IO problems");
}
return SKIP_BODY;
}
}
JSTL
Tag Library Exemple
Hello 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>
JSTL
Tag Library Exemple
Hello World
 Utilisation
 Dans le web.xml
<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>
 Dans la page JSP
<%@ taglib uri="http://www.ecom.com/taglibs/utilitytags" prefix="h" %>
. . .
<h:hello/>
. . .
JSTL
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.
JSTL
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 }
JSTL
EL: Expression Language
objets 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 via param (objet de type
Map) et paramValue

Un objet implicite pageContext qui donne accès aux propriétés
associés au contexte de la page JSP
JSTL
EL: Expression Language
Opé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")
JSTL
JSTL
core tag library





Fonction de base
Fonction de teste
Fonction itérative
SQL
XML
JSTL
JSTL
core 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){}
%>
JSTL
JSTL
core tag library
Les conditions
1- simple if(cond)
<c:if test="${user.visitCount = = 1}">
<c:out value="Première visite.Bienvenue!" />
</c:if>
<% if(user.visitCount == 1){ %>
<%= "Prmière visite.Bienvenue" %>
<% } %>
2-choix multiple if/else
<c:choose>
<% If(count == 0){ %>
<c:when test="${count == 0}”>
<%= Votre compte est vide %>
Pas de visite!
<% }else{ %>
</c:when>
<%= count+"visiteurs" %>
<c:otherwise>
<% } %>
<c:out value="${count}"/> visiteurs.
</c:otherwise>
</c:choose>
JSTL
JSTL
core tag library
Les itérations avec la boucle for/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() %>
<% } %>
JSTL
JSTL
core 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>
JSTL
JSTL
core tag library
SQL




Faire des requêtes
Accès au résultat simplifié
Faire des mises à jour
Faire des transactions
JSTL
JSTL
SQL
Data source est de type Javax.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>
JSTL
JSTL
SQL
Data source est de type Javax.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>
JSTL
JSTL
SQL
Les transactions
<sql:transaction [dataSource=”dataSource”]
[isolation=isolationLevel]>
<sql:query> and <sql:update> statements
</sql:transaction>
isolationLevel ::= "read_committed"
| "read_uncommitted"
| "repeatable_read"
| "serializable"
JSTL
JSTL
XML
 <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
JSTL
JSTL
lookup 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);
%>
JSTL
JSTL
lookup 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" />
JSTL
JSTL
lookup 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;
}
JSTL
JSTL
lookup 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>
JSTL
JSTL
lookup 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:lookup var="admin" ejbname="Admin" homename="AdminHome" />
JSTL
JSTL
Questions?
Questions?
JSTL
JSTL
Demo
La démo
JSTL