J2EE: CRÉATION DES APPLICATIONS WEB D'ENTREPRISE BASÉES COMPOSANTS
Pr. Younès EL BOUZEKRI EL IDRISSI
AU: 2016/2017
RÉFÉRENCES (AVALABLE 4 STUDENTS)
Beginning Java EE, de Antonio Goncalves Apress
Edition 2013.
J2EE Developer's Handbook de Paul J. Perrone, Venkata S.R. "Krishna" R. Chaganti et Tom Schwenk. Felleuitter edition 2003;
EJB & JSP: Java On The Edge, Unlimited Edition, de
Lou Marco, 2010;
JEE guide de développement d'application Web en Java,
de Jerome Laafousse, 2009.
2
PLAN DU COURS
Introduction
L'architecture Java Entreprise Edition
Les composants
Les Conteneurs JEE
Les services et les API
Le serveur Java Tomcat
Le framework Struts
Le framework Hibernate
Les EJBs
3
LES PILIERS D'UNE APPLICATION
Présentation
Prise en charge des jeux d'affichage (affichage HTML en
cas du web)
Métier
Appeler aussi couche applicative, étape où l'exécution des
application se déroule (la génération du code HTML en cas du Web).
Gérer les requêtes SQL et les résultats
Persistance
Propre au serveur de BD: Gestion de la correspondance entre le serveur métier avec celui de la base de données.
4
MODÈLE CENTRALISÉ
Tout est sur la même machine
Présentation
Métiers
Persistance
5
A DEUX NIVEAUX
Client / serveur de base, avec 2 éléments
Client : présentation, interface utilisateur Serveur : partie persistance, gestion physique des données
Les services métier / la partie applicative peuvent être
Soit entièrement coté client, intégrés avec la présentation
La partie serveur ne gère que les données
Ex : application accédant à une BDD distante
Soit entièrement coté serveur
L'interface utilisateur peut même être exécutée sur le serveur
Fonctionnement mode terminal / mainframe
Soit découpés entre la partie serveur et la partie client
6
DEUX NIVEAUX (2-TIERS)
Présentation
Métiers
Persistance
Client
Serveur
Présentation
Métiers
Persistance
7
DEUX NIVEAUX: IL EST AUSSI ACCEPTABLE
Présentation
Présentation
Métiers
Persistance
Client
Serveur
Présentation
Métiers
Métiers
Persistance
8
TROIS NIVEAUX (3-TIERS) Les 3 principaux tiers s'exécutent chacun sur une machine
différente:
Présentation
Machine client Applicatif / métier
Serveur d'applications
Persistance
Serveur de base de données
Présentaion
Métiers
Persistance
Client
Serveur d'application
Serveur de base de données
9
N NIVEAUX (N-TIERS)
Par rapport à 3-tiers: ajoute des couches supplémentaires;
Précisément la couche métier n'est pas atomique
(monolithique), elle est composée d'un ensemble de services;
Interaction horizontale:
Les services (application) métiers peut interagir avec d'autres
services métiers (composition de services);
Interaction verticale;
Les services métiers peuvent utiliser des services techniques (non
métiers) : Répertoire (LDAP) Messagerie; Sécurité
10
NB: Chaque service correspond à un niveau: N niveaux
N NIVEAUX: DISCUSSION
Intérêts d'avoir plusieurs services / couches (3 ou plus)
Réutilisation de services existants; Découplage des aspects métiers et techniques et des services
entre eux : meilleure modularité;
Facilite l'évolution : nouvelle version de service; Facilite passage à l'échelle : évolution de certains services:
Permet de faire évoluer les services un par un sans modification du
reste de l'application.
Inconvénients
En général, les divers services s'appuient sur des technologies
très variées : nécessité de gérer l'hétérogénéité et l'interopérabilité: Utilisation de framework / outils supplémentaires.
Les services étant plus découpés et distribués, pose plus de
11
problèmes liés à la distribution
N-TIERS AVEC LE WEB
12
TIERS CLIENT
Un navigateur
Interprète les pages HTML ou XML;
Exécute les applets ou du code JavaScript;
Possède différents niveaux de sécurité configurable;
Peut interagir avec un serveur d ’application via HTTP.
Application cliente
Différente qu’un navigateur, elle ne se base pas sur HTTP Communique via RPC, Corba, RMI,JRMP, IIOP, TCP/IP, ...
13
TIERS WEB: SERVEUR
Fourni du contenu Web (HTML, …)
Communique via HTTP, ...
Traite des requêtes: CGI par exemple
Peut être un proxy frontal d ’un serveur d ’applications:
Ex: Apache, Tomcat
14
TIERS D'APPLICATION: SERVEUR
Permettent d'exécuter des composants;
Conformes à une technologie, JEE par exemple;
Indépendants du visuel et de l ’accès aux données;
Déployable dans un environnement:
Permettant une large possibilité d ’extension de puissance; S’affranchissant du lieu.
Le composant le plus évolué est un « Enterprise Java
Bean »;
Ex: Jonas, GlassFish, Apache Geromino, WebSpher,
WebLogic….
15
TIERS DONNÉES: PERSISTANCE
Stockage et manipulation des données de l'application
Plusieurs supports physiques:
Fichiers binaires, textes « de base »; Fichiers XML; Une base de données ou un ensemble de bases de données.
Mode d'emploi:
Nécessité d'envoyer à distance des requêtes (types SQL) et
d'en récupérer les résultats.
Deux procédures:
Soit c'est natif dans le langage utilisé (ex : PHP); Soit on passe par des frameworks ou des API dédiés.
16
PERSISTANCE: GÉNÉRALITÉS
APIs de persistance:
RDA (Remote Data Access) de l'ISO; ODBC (Open Data Base Connectivity) ; JDBC (Java Data Base Connectivity) ; Fonctionnement général:
Gestion de requêtes SQL mais avec indépendance du SGBDR utilisé
(mySQL, PostgreSQL, Oracle ...).
En général, seule la phase de connexion au SGBDR est spécifique.
Frameworks de haut niveau
Ex: Hibernate (Sun, J2EE):
On définit de manière abstraite (via XML ) la structure des données
à manipuler;
L'outil transforme des données relationnelles vers des objets; 17 L'outil fait en interne le lien avec le support et les objets persistants.
SERVEUR D'APPLICATIONS
Services d'administration:
Déploiement des composants (ex: servlets) ;
Structuration en serveur, application;
Gestion d'annuaires (ex: JNDI);
Gestion des sources de données.
Modèle de sécurité applicable:
Au niveau de chaque composant;
Au niveau de chaque méthode.
18
J2EE: JAVA 2 PLATFORM ENTREPRISE EDITION
Il s'agit d'un standard et un ensemble de spécification;
Les applications doivent respecter le standard;
Les applications sont déployables dans tout
environnement (serveur) respectant la spécification J2EE;
Composants logiciels : EJB; Applications orientées Web : JSP, Servlet; Communication à distance : Java RMI, IIOP, JMS
(communication par message), Web Services;
Gestion données distantes : JDBC, JPA (Java Persistance API); Gestion d'annuaires (type LDAP) : JNDI; Transactions : JTA.
19
J2EE ET LE N-TIERS
Présentation:
Avec client léger (Html) ou client lourd (API).
Interaction avec la partie applicative sur le serveur:
Via JSP / Servlet pour un client léger: S'occupe de la logique de présentation.
Direct si client lourd (via un middleware type RMI).
Logique applicative:
Réalisée par composants EJB; Communication via Hibernate ou JDBC pour attaquer
BDD distante.
20
J2EE: 3-TIERS ET N-TIERS
Client lours
Client leger
Application
Conteneur d'application
Base de données
21
Serveur de BD
JSP/Servlet
Conteneur Web
Application
Conteneur d'application
Serveur J2EE
Base de données
Serveur de BD
21
J2EE: COMMUNICATION DE SERVEUR
Ref: www.oracle.com
22
APPLICATION J2EE 3-TIERS
Ref: www.oracle.com
23
APPLICATION J2EE 4 ET PERSISTANCE-TIERS
Ref: www.oracle.com
24
Publicité
J2EE: EXEMPLE DE SERVEUR
GlassFish
Ref http:// / ifsic-DIC2-ARC-LSI-Architecture JEE / p9 (eric hebert
25
Ref: www.oracle.com
26
LES COMPOSANTS D'UNE APPLICATION J2EE
Ref: http://www.cmg.org/measureit/issues/mit18/m_18_6.html
27
ARCHITECTURE D'UNE APPLICATION J2EE
Réf: http://www.cmg.org/measureit/issues/mit18/m_18_6.html
28
PROGRAMMATION CÔTÉ SERVEUR GÉNÉRATION DES PAGES HTML Servlet & JSP
29
OBJECTIF: PAGES HTML DYNAMIQUES
Génération du code HTML à partir du serveur
Parfois accompagné du style de la page; Visant un client léger: Navigateur Web; Envoi et récupération des données à partir du navigateur;
Procédures:
Exécuter un code différent sur une plateforme afin de
produire du code HTML;
L'affichage obéira à plusieurs critères:
Selon le type de données; Selon le rôle de l'utilisateur;
30
GÉNÉRATION DES PAGES DYNAMIQUES: APPROCHES
Exécution d'un programme:
Un programme complet s'exécute et génère du contenu
HTML;
La page est entièrement dynamique;
Plus précisément : les partie statiques existent mais elles sont
intégrées dans le code, pas écrites directement en HTML standard;
Le navigateur demande l'exécution d'un programme et
récupère le code HTML généré: La demande d'exécution est transparente : utilise URL standard.
31
GÉNÉRATION DES PAGES: APPROCHES II
Langages de scripts
Double type de contenu dans une page HTML
Partie statique : balises HTML standards avec contenu textuel; Partie dynamique : du code écrit dans un langage de script:
Ce code génère du code HTML standard.
La page entremêle les parties statiques et dynamiques; Quand un navigateur demande le contenu d'une page:
La partie dynamique est exécutée et remplacée par le HTML
généré;
Le navigateur du client reçoit donc uniquement du code HTML.
32
GÉNÉRATIONS DES PAGES: TECHNOLOGIES
Langage de script:
PHP; Asp.net; JSP.
Exécution d'un programme
CGI; Servlet.
33
TECHNOLOGIES
Protocole de communication:
HTTP: le client invoque l'exécution des programmes dans
le serveur via ce protocole; Serveur HTTP &/ou serveur d'application (conteneur)
Serveur HTTP;
Apache par exemple;
Conteneur d'application (eventuels EJBs):
GlassFish; Tomcat &/ou Geronimo.
34
LES SERVLETS
Servlet est un programme Java avec des caractéristiques
particulières:
Accessible par une URL donnée: Détecter et répondre à des requêtes de l'utilisateur; Chercher et invoquer le traitement correspondant; Générer une page Html et y mettre la réponse;
HTML
35
SERVLET II
Applet: programme Java s'exécutant au niveau client;
Servlet: Programme Java s'exécutant au niveau serveur;
Classe Java avec ces méthodes et attributs;
L'exécution et l'interactions différentes d'un objet Java
standard:
Pas d'appel de constructeur, pas de main(); A la création de la servlet par le serveur d'exécution:
Appel par le serveur d'exécution de la fonction init(ServletConfig); On peut y faire les actions qu'on ferait dans un constructeur;
Quand la servlet est détruite:
Appel par le serveur d'exécution de destroy(); A redéfinir si on veut effectuer certaines actions à la suppression de
36
la servlet.
SERVLET: REQUÊTE-RÉPONSE
Le client envoie les requêtes standards du HTTP:
Post, Get, Put, Delete…
Au niveau serveur chaque méthode reçue, son homologue
dans la Servlet est exécutée:
Exemple: Requête Post trouve doPost() dans la Servlet; Les méthodes doXXX héritent de la classe HttpServlet; Les méthodes doXXX sont redéfinies pour y placer le
code à exécuter par la Servlet;
En pratique, pas besoin de redéfinir toutes les méthodes
(GET et POST minimum).
37
SERVLET: EXEMPLE GET
doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException
request : contient la description de la requête du client;
response : à utiliser pour envoyer la réponse au client;
Toutes les méthodes doXXX(...) ont la même signature.
38
HTTPSERVLETREQUEST REQUEST
Initialisé par l'appel du client (le navigateur);
Données / informations sur la requête envoyée par le
client;
On peut y récupérer notamment:
Valeurs entrées pour un formulaire; Une session pour gérer un état dédié à chaque client; Cookies du client envoyés avec la requête; Informations sur l'URL utilisée pour l'appel de la Servlet; Login de l'utilisateur s'il s'est identifié.
39
HTTPSERVLETRESPONSE RESPONSE
A initialiser et utiliser par la Servlet pour générer le
résultat à envoyer au navigateur client;
Définir le type MIME des données envoyées
Généralemet du code HTML
response.setContentType("text/html;charset=UTF-8"); Récupérer le flux de sortie pour envoyer les données:
PrintWriter getWriter()
Flux texte, typiquement pour du HTML ServletOutputStream getOutputStream Flux binaire pour des images, vidéos ... Ajouter/envoyer des données coté client
Créer ou modifier un nouveau cookie;
40
SERVLET: CARACTÉRISTIQUES
Unicité d'une Servlet:
Une Servlet n'est créée qu'en une seule instance.
Si plusieurs clients accèdent à l'URL d'une même Servlet:
Appelle les méthodes sur cette instance unique. Une Servlet possède des attributs donc un état:
Cet état est permanent et conservé (tant que la Servlet
existe).
Il est accédé / modifié par tous les clients : état global.
41
SERVLET: CARACTÉRISTIQUES II
Pour chaque client accédant à la Servlet, le serveur lui
contribue un état (temporaire ou permanent):
Temporaire:
Pour chaque client, une session est créée; On peut lui associer des données via des couples « clé (chaine) /
objet »;
La session a une durée de vie configurable; Exemple typique d'utilisation d'une session Panier d'un
utilisateur sur un site de vente en ligne : conserve les produits choisis par l'utilisateur pendant son parcours sur le site.
Permanent:
Création des cookies côté client.
42
SERVLET: STRUCTURE AVEC DOGET
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
PrintWriter out = response.getWriter();
try { out.println("<html>");
out.println("<body>");
out.println(<h1> Coucou </h1>);
out.println("</body>"); out.println("</html>");
}}
public void destroy() {…}
43
SERVLETS: CRÉATION
Une Servlet peut être chargée :
automatiquement lors du démarrage du serveur Web; lorsque le premier client demande les services de la
Servlet.
Une fois chargées, les servlets restent actives dans
l'attente d'autres requêtes du client;
La Servlet peut utiliser toutes les fonctions du langage
Java lors de la création de la réponse;
Elle peut également communiquer avec des ressources
externes tels que des fichiers ou des bases de données, ou avec d'autres API (application ou composant Java).
44
Exemple: d'autres Servlets.
SERVLET: OPPORTUNITÉS
Les servlets exécutent un grand nombre de fonctions,
par exemple:
Une Servlet peut créer et renvoyer une page Web HTML complète dont le contenu dynamique dépend de la nature de la requête du client;
Une Servlet peut simplement créer une partie d'une page Web HTML qui est intégrée à une page HTML statique existante;
Une Servlet peut traiter les connexions avec plusieurs clients en acceptant les données en entrée de plusieurs clients et en diffusant à ces derniers des résultats.
45
SERVLET: AVANTAGES
Les servlets sont indépendantes des OS (Unix ou NT) et
des serveurs Web (Apache, IIS etc.) ;
Peuvent produire de l'HTML côté client (notamment pour la consultation de la base), sur la base d'http;
Peuvent dialoguer avec des applets Java côté client avec
un protocole à objets distribués de type RMI;
S'appuient sur un langage vraiment standard : Java (et
non pas Java script ou Visual Basic);
Par rapport aux applets, le client est « allégé » ;
Par rapport aux CGI, les servlets prennent en charge les connexions des utilisateurs en multi-thread, qui n’est pas le cas des CGI.
46
SERVLET VS CGI
La plus grande différence entre les CGI et les servlets
est la performance;
Il n'y a qu'une seule machine virtuelle Java qui tourne
sur le serveur;
La Servlet est placée en mémoire une fois qu'elle est
appelée. Elle n'est pas remise en mémoire jusqu'à ce que la Servlet change;
Une Servlet dont le code a été modifié peut être réactivée
(c'est à dire replacée en mémoire) sans redémarrer le serveur ou l'application.
47
SERVLET VS CGI II
Req. CGI1
Req. CGI2
Req. CGI1
Processus Fils pour CGI1
Processus Principal
Processus Fils pour CGI2
CGI
Processus Fils pour CGI1
Req. servlet1
Req. servlet2
Req. servlet1
Processus Principal
Thread
Thread
servlet1
Les servlets
Thread
servlet2
48
SERVLET: PERFORMANCE
Les servlets résident en mémoire, de ce fait leur
exécution est très rapide;
L'information statique peut être partagée par plusieurs
invocations de la Servlet:
Possibilité de partager cette information entre plusieurs
utilisateurs.
Les servlets sont modulaires, chaque Servlet peut
accomplir une tache spécifique et ainsi vous pouvez les rendre communicantes.
Moins il y a de calcul à faire côté client, plus l’approche
servlet est intéressante.
49
Publicité
L'INTERFACE SERVLET
java.lang.Object
| +--javax.servlet.GenericServlet
| +--javax.servlet.http.HttpServlet
Toutes les servlets implantent l'interface Servlet:
javax.servlet.Servlet
soit directement ou bien via une classe qui implante cette interface,
comme: javax.servlet.GenericServlet (paquetage javax.servlet) javax.servlet.http.HttpServlet (paquetage javax.servlet.http) particulièrement désignée pour des requêtes et réponses HTTP
50
L'INTERFACE SERVLET
cette interface possède les méthodes pour :
initialiser la servlet : init() recevoir et répondre aux requêtes des clients : service() détruire la servlet et ses ressources : destroy()
la servlet est crée puis initialisée (init() )
cette méthode n’est appelée par le serveur qu’une seule fois lors du
chargement en mémoire par le moteur de servlet.
Le service du client est implémenté (service() )
cette méthode est appelée automatiquement par le serveur à chaque
requête de client.
la servlet est détruite (destroy() )
cette méthode n’est appelée par le serveur qu’une seule fois à la fin permet de libérer des ressources (allouées par init() ).
51
UNE SERVLET WEB : HTTPSERVLET
Pour faciliter le traitement particulier des serveurs Web,
la classe Servlet est affinée en javax.servlet.http.HttpServlet
2 méthodes remplacent service() de la classe mère :
doGet() : pour les requêtes Http de type GET; doPost() : pour les requêtes Http de type POST.
la classe servlet doit obligatoirement contenir l’une ou l’autre de ces 2 méthodes redéfinies, choisies selon le mode d’envoi du formulaire HTML qui l'exécute;
service() de HttpServlet appelle automatiquement la bonne
méthode en fonction du type de requêtes Http .
52
SERVLET: GESTION DES SESSIONS
Service avec/sans état: Le serveur ne garde pas une
traçabilité sur la navigation du client:
Parfois, dans quelques applications il est très utile de
reconnaitre l'utilisateur afin de poursuivre son activité sur le serveur.
Deux techniques:
Sessions; Cookies.
53
SERVLET: GESTION DES SESSIONS II
Champ caché: Les serveur peut inclure des informations
cachées dans un formulaire afin d'identifier la navigation du client:
<input type="hidden" name="sessionid" value="2013"> Le nom et la valeur de l'entrée sont automatiquement
inclus dans la méthode post ou get;
A chaque fois le navigateur envoie une requête, le serveur
a la possibilité de suivre la navigation.
Inconvénient: Le cas du href le serveur ne pourra pas
poursuivre la navigation.
54
SERVLET: GESTION DES SESSIONS III
HttpSession: L'API Servlet fournit une interface
HttpSession qui permet de garder trace de l'utilisateur à travers plusieurs pages dans le même site.
Il y a aussi la possibilité de stocker des informations à propos de l'utilisateur dans le site (meta-données).
Le conteneur de Servlet utilise cette interface pour créer
une session entre un client et serveur http.
La session persiste durant une période dans le temps (à définir par le développeur), à travers plusieurs pages et durant plusieurs connexions.
Exemple:
HttpSession session = request.getSession();
55
SERVLET: GESTION DES SESSIONS IV
Quelques méthodes utiles:
Request.getSession(true) // pr la création de la session getAttribute(String name) Enumeration getAttributeNames() long getCreationTime() String getId() long getLastAccessedTime() boolean isNew() setAttribute(String name, Object value)
56
SERVLET: GESTION DES SESSIONS V
Exemple: doGest….. HttpSession session = request.getSession(true);
Date createTime = new Date(session.getCreationTime()); Date lastAccessTime = new Date(session.getLastAccessedTime()); Int visitCount =0; String visitCountKey = "visitCount"; String userIDKey = "userID"; String userID = "younes"; if (session.isNew()){
title = "Welcome to my website"; session.setAttribute(userIDKey, userID);
else {
}
visitCount = (Integer)session.getAttribute(visitCountKey); visitCount = visitCount + 1; userID = (String)session.getAttribute(userIDKey); } session.setAttribute(visitCountKey, visitCount); response.setContentType("text/html"); PrintWriter out = response.getWriter();
57
SERVLETS: GESTION DES COOKIES
Un cookie: fichier texte stocké côté client enregistrant
toutes les interactions avec le serveur;
Les informations d'un cookie aide le serveur à s'adapter à
un client particulier;
C'est le serveur qui crée le cookie dans le client. Lors d'une
connexion le client envoie le cookie au serveur.
Plusieurs caractéristiques:
Les informations de navigation; Les données saisies par le client dans un formulaires; Durée de vie à définir par le serveur…
58
SERVLETS: GESTION DES COOKIES II
Utiliser les fonctions de l ’API des servlets…
créer un cookie : classe Cookie, écrire/lire un cookie : addCookie(mycookie),
getCookies(),
positionner des attributs d’un cookie : mycookie.setXxx(…)
Exemple d'envoi d'un cookie :
... String nom = request.getParameter("nom"); Cookie myCookie = new Cookie("nom", "c le nom de
mon cookie");
...ici positionner des attributs si on le désire response.addCookie(myCookie); ...
59
SERVLETS: GESTION DES COOKIES III
Quelques méthodes utiles:
getValue/setValue; getName/setName ; getComment/setComment; getMaxAge/setMaxAge :
délai restant avant expiration du cookie (en seconde) par
défaut : pour la session courante.
getPath/setPath :
répertoire où s'applique le cookie dir. courant ou pages
spécifiques.
60
ANATOMIE D'UNE APPLICATION JAVA WEB
61
DESCRIPTEUR DE DÉPLOIEMENT: WEB.XML
Il s'agit d'un fichier situé dans le répertoire WEB-INF du
répertoire racine de l'application web.
Il contient les caractéristiques et les paramètres de
l'application.
la description des servlets utilisées; les différents paramètres d'initialisation.
Il représente un schéma pour le serveur afin de relier les
Servlets avec leurs compilations et leurs paramètres dans le serveur.
62
SQUELETTE DE BASE DU WEB.XML
<?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> ... </web-app>
Toutes les descriptions de l'application sont insérées
dans la balise <web-app>;
C'est au niveau de cette balise le serveur cherche les
Servlets et leurs paramètres.
63
WEB.XML: <WEB-APP>
On y trouve deux balises pour la description de
l'application (pas d'influence technique):
display-name permet de donner un nom à l'application. Il s'agit
de description, pour s'y retrouver dans les fichiers;
La balise description permet de fournir une description plus
détaillée. elle est inopérante techniquement parlant.
<web-app> ... <display-name>Application pr mon stage</display-name> <description>Cette première application web est un exemple permettant de présenter le déploiement d'une webapp. </description> ... </web-app>
64
WEB.XML ET LES SERVLETS:
Une Servlet est toujours déclarée entre <servlet> et
</servlet>
On doit affecter un nom à chaque Servlet déclarée, dans
une balise servlet-name.
Ce nom n'est pas nécessairement le nom de la classe de la
servlet.
la balise description permet de fournir une information
sur la Servlet;
la balise servlet-class permet de définir la classe de la Servlet. La classe doit se trouver dans le répertoire WEB-INF/classes de l'application, en respectant les packages.
65
WEB.XML ET LES SERVLETS II
La balises init-param permet de spécifier des paramètres
d'initialisation pour une servlet.
Des paramètres chargés en même temps que la servlet, et
qu'elle peut récupérer.
La balise param-name permet de définir le nom du paramètre,
et param-value pour spécifier la valeur.
L'application peut récupérer un tel paramètre grâce à la
méthode getServletConfig().getInitParameter("random") La balise load-on-startup demande que la servlet soit chargée
dès le démarrage du serveur (et non lors de sa première sollicitation). Le nombre entier situé à l'intérieur de ces balises représente l'ordre de chargement.
66
WEB.XML: MAPPING DES SERVLETS
Le mapping d'une Servlet sert à indiquer au serveur
quelle Servlet charger pour tel requête du client (telle URL demandée). Rappelons que les URL des servlets sont relatives à l'URL du context (la webapp) auquel elles appartiennent.
<web-app> ... <servlet-mapping> <servlet-name>maservlet</servlet-name> <url-pattern>/uneservlet</url-pattern> </servlet-mapping> ... </web-app>
67
WEB.XML ET LES SERVLETS:
<web-app> ... <servlet> <servlet-name>maservlet</servlet-name> <servlet-class>org.test.servlet.PremiereServlet</servlet-class> <description>des servlets pr le test</description> <init-param> <param-name>random</param-name> <param-value>org.test.randomizer</param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> ... </web-app>
68
SERVLET: LIMITATION
Par rapport aux applets, interface graphique utilisateur
limitée à HTML;
Solution d'autre framework de présentation (JSF par
exemple);
69
JSP: JAVA SERVER PAGE
70
VUE D'ENSEMBLE
La spécification J2EE permet aux utilisateurs de
développer des pages statiques et dynamiques:
La partie statique: pure Html;
La partie dynamique: langage Java.
Deux possibilités:
API Servlet: du code Java dans lequel on insère du Html;
API JSP: une page Html dans laquelle on insère du Java.
71
Y. EL BOUZEKRI EL IDRISSI
COMMENT ÇA MARCHE?
Le développeur a la possibilité d'insérer du code java dans le fichier Html à l'aide des balises prédéfinies;
Le moteur des JSP (Serveur d'app) reconnait ces balises, puis procède à leur compilation et leur exécution;
Le serveur traite les balises html et java
différemment afin de créer une Servlet équivalente à la JSP, l'exécution de cette dernière génère le code Html équivalent au résultat.
NB: possibilité aussi de générer du code Xml.
72
Y. EL BOUZEKRI EL IDRISSI
CYCLE DE VIE D'UNE JSP
Moteur JSP
Compilation de laJSP
Servlet équivalente
Serveur Web
Client
73
Y. EL BOUZEKRI EL IDRISSI
EXEMPLE SIMPLE: DATE()
Datecourante.jsp
<html> <title> Ma JSP</title> <body> La date retournée par la JSP <% = new Java.util.Date() %> </body> </html>
74
Y. EL BOUZEKRI EL IDRISSI
LES BALISES JSP
Toutes les balises JSP doivent être entre <% %>;
Elles représentent les éléments de base pour construire la
Servlet (lors de l'instanciation);
On peut introduire plusieurs instructions Java dans une
balise, comme on peut créer plusieurs balises Java indépendantes;
L'emplacement des balises dans le serveur est le dossier Web,
tandis que, dans une application J2EE est le WebContent
75
Y. EL BOUZEKRI EL IDRISSI
LA SYNTAXE DES BALISES
On distingue cinq types de balise JSP:
Les commentaires:
< -- hello -- >
Scriplets: insertion du code Java:
<% System.out.println("hello"); %>
L'affichage des valeurs:
<%= "hello" > équvalent à <% System.out.println("hello"); %>
Balise de déclaration globale:
<%! Int compteur; %>
Directives et paramètres à appliquer sur la JSP:
<%@ page import= "java.util.Date" %>
76
Publicité
Y. EL BOUZEKRI EL IDRISSI
<%! BALISE %>
L'objectif de cette balise est de déclarer des membres
globaux de la Servlets:
Méthodes;
Variables;
Exemples:
<%! Int compteur = 0; %>
<%! Int somme (int a, int b) {
return a+b; ] %>
77
Y. EL BOUZEKRI EL IDRISSI
SCRIPLET <% %>
L'objectif est d'insérer plusieurs instructions Java
dans la même balise;
A remarquer que les variables déclarées dans la
Scriplet, leur porté ne dépasse pas la fermeture de la
balise;
Exemple:
<% int x = "chaine"; for (int i=0; i<10; i++) out.println(x); %>
78
Y. EL BOUZEKRI EL IDRISSI
<%@ BALISE DES DIRECTIVES %>
L'objectif est le paramétrage de la page pour la
compilation;
Les directives en jeu:
Page:
Include:
Taglibs
Syntaxe:
<%@directive param=valeur [param=valeur...] %>
79
Y. EL BOUZEKRI EL IDRISSI
DIRECTIVE: INCLUDE
Permet d'insérer un fichier texte brut ou une autre
ressource textuelle;
Lors de la compilation, exactement à la conversion
vers une Servlet, le moteur JSP inclut le texte
externe;
Il s'agit d'une forme d'entité externe à insérer,
comme si elle faisait partie du fichier:
Exemple:
<%@Include file="c:\partie.txt"] %>
80
Y. EL BOUZEKRI EL IDRISSI
DIRECTIVE PAGE
Contrôle des attributs de la page et du Servlet:
Paramètres :
contentType – type de contenu (text/html);
<%@page contentType="(text/pl ain)"%>
import – Classes Java è utiliser;
<%@page import="java.util.*"%
errorPage – Page à afficher en cas d’erreur;
<%@page errorPage="/erreur.jsp"%>
isErrorPage – Si la page est une page d’erreur;
81
session – Si la page fait partie d’une session;
Y. EL BOUZEKRI EL IDRISSI
DIRECTIVE PAGE: ISERRORPAGE
Mapage.jsp
<%@page language="Java" contentType="Text/html"%> <%@page errorPage="/casderreur.jsp"%> <html>……..</html>
Errorpage.jsp
<%@page language="Java" contentType="Text/html"%> <%@page isErrorPage="true"%> <html>…. <%=exception.getClass().getName()%>< /html>
82
Y. EL BOUZEKRI EL IDRISSI
DIRECTIVE: TAGLIBS
L'API JSP permet à l'utilisateur de définir des
balises personnalisées (ou une bibliothèque de tag)
de la page JSP;
Il s'agit de définir un comportement personnalisé de
la page JSP;
La déclaration de la directive Taglib vous permet
l'utilisation de tag personnalisée et un moyen de les
appeler:
URI
Préfix
83
Y. EL BOUZEKRI EL IDRISSI
DIRECTIVE: TAGLIBS
<%@ taglib uri="uri" prefix="prefixOfTag" >
Exemple; La librairie custlib et le préfixe mytag
<%@ taglib uri="http://www.example.com/custlib"
prefix="mytag" %>
<html>
<body>
<mytag:hello/>
</body>
</html>
84
Y. EL BOUZEKRI EL IDRISSI
TAGLIB : TUTO
Pour y faire il faut deux étapes:
Déclaration d'une classe:
Déclaration de la tag dans fichier tld
mmmmm.tld
<taglib>
<tlib-version>1.0</tlib-version> <jsp-version>2.0</jsp-version> <short-name>Example TLD</short-name> <tag>
<name>Hello</name> <tag-class>com.tutorial.HelloTag</tag-class> <body-content>empty</body-content>
</tag> </taglib>
import javax.servlet.jsp.tagext.*; import javax.servlet.jsp.*; import java.io.*;
public class HelloTag extends SimpleTagSupport {
public void doTag() throws JspException,
IOException {
JspWriter out = getJspContext().getOut(); out.println("Hello Custom Tag!");
}
}
85
Y. EL BOUZEKRI EL IDRISSI
DESIGN PATTERN MVC
86
Struts dans votre web application
LE DESIGN PATTERN MVC
Design pattern (modèle patron): Une démarche qui est
proposée, puis utilisée et finalement fait preuve de son
performance:
Son utilisation est très recommandée.
MVC: une démarche pour la création des applications,
particulièrement Web dont le contenu est décomposé selon sa nature:
Données, leurs présentations et la gestion des événements
envoyés par un utilisateur.
87
Y. EL BOUZEKRI EL IDRISSI
MVC: MODEL-VIEW-CONTROLLER
L'objectif d'une architecture Model-View-Controller
est l’organisation d'une application par la séparation
les données et leurs traitements;
la représentation des données;
le comportement de l ’application.
Avantages:
• Réutiliser le code;
• Réduire les temps de développement;
• Simplifier la maintenance.
88
Y. EL BOUZEKRI EL IDRISSI
MVC: COMPOSANTS
Le modèle: définit la structure des données et les
opérations à appliquer sur elles.
Une Vue: définit la partie IHM, et les règles
d'affichage des données afin de les adapter sous un
contexte particulier;
Un Controller: définit les écouteurs des actions
émises par l'utilisateur sur le modèle et génère la
vue appropriée.
89
Y. EL BOUZEKRI EL IDRISSI
MODÈLE
Encapsuler les propriétés des données:
Être indépendant des vues et contrôleurs.
Définir les accesseurs aux propriétés de ces données;
Maintenir une liste d'écouteurs (vues et contrôleurs);
Prévenir les écouteurs lorsque la donnée est modifiée;
les résultats renvoyés par le modèle sont indépendants de
toute présentation.
Contenir toute la logique métier de l'application.
90
Y. EL BOUZEKRI EL IDRISSI
LA VUE
Se charge de la logique d'affichage des données
(éventuellement des résultats), elle n'effectue aucun traitement;
L'interface qui permet à l'utilisateur d'interagir avec
l'application:
recevoir toutes les actions de l'utilisateur (clic,
sélection…);
événements envoyés au contrôleur;
91
Y. EL BOUZEKRI EL IDRISSI
CONTRÔLE
Traduit les interactions de l'utilisateur à partir d'une
requête HTTP;
Gère les événements entre le modèle et la vue par
des appels de méthodes sur le modèle et sélectionne
la vue appropriée:
Il appelle les méthodes du modèle afin d'appliquer des
modifications sur les données;
Pas d'accès directe tout se passe par la couche métier du modèle;
Synchronisation.
92
Y. EL BOUZEKRI EL IDRISSI
SCÉNARIO
Modele
1
Controller
Client
5
2
3
4
view
93
Y. EL BOUZEKRI EL IDRISSI
SCÉNARIO DÉTAILLÉ
Client
Controller 2
Controller 1
View 1
View 2
Métier
DAO
Modele
DB
94
Y. EL BOUZEKRI EL IDRISSI
MVC2
L'objectif est de simplifier encore plus le
développement par la limitation des interactions
entre les vues et les contrôleurs;
La démarche c'est d'introduire un seul contrôleur
(principal) vis-à-vis des vues, ce dernier se chargera
de trouver le contrôleur spécialisé adéquat;
95
Y. EL BOUZEKRI EL IDRISSI
MVC2 DÉMARCHE
L'interaction d'un utilisateur est interceptée par le
contrôleur principal;
Le contrôleur spécialisé adéquat est appelé avec la requête en paramètre par le contrôleur principal;
Le contrôleur spécialisé demande au modèle
approprié d'effectuer les traitements;
le contrôleur spécialisé sélectionne la vue adaptée