développement d’application avec architecture j2ee java –j2ee · 2019. 2. 28. · architecture...
Post on 12-Oct-2020
0 Views
Preview:
TRANSCRIPT
INFORMATIQUE� Par Dr. Samia GAMOURA-CHEHBI
Développement
d’application avec
Java – J2EEvia WSAD
Les mécanismes avancésLes classes du JDKDéveloppement d’applications Web
Architecture J2EEEléments de l’architecture J2EETest et debugDéploiement
Mise en œuvre avec le pattern MVC
maj 2016
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 2
L’architecture J2EE
Les principes
► J2EE = Java 2 Platform Enterprise Edition► Plate-forme logicielle permettant
� le développement� le déploiement� l'administration
d'applications d'entreprise► Une plate-forme standard hébergeant les applications► Un modèle de développement d'application► Un ensemble de tests de compatibilité permettant de
vérifier qu'un produit implémentant J2EE est conforme à la plate-forme standard
► Une implémentation de référence
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 3
Architecture J2EE
Modèle de développement
Client
Serveur d'application 3ème tiers
Objets et logiquemétier
contrôleurd'interaction(Servlet,JSP)
page d'affichage
JSP
requête
réponse
forward javabean
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 4
L’architecture J2EE
Composantes du framework (2)
Java 2 SDK Standard Edition
CORBA RMI SGBD Naming/Directory
Ap
ple
tsJ
ava
be
an
s
Co
nn
ec
tors
outils
Container
EJBs
JSPs
Servlets
Transactions
Messaging Mail
modèle de développement
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 5
Container d’ applet
applet
Architecture J2EE
Les containers
servletJSP
Container web
JN
DI
JTA
JM
SJ
DB
CR
MI/IIO
PJ
ava
Ma
il
Container EJB
JN
DI
JTA
JM
SJ
DB
CR
MI/IIO
PJ
ava
Ma
il
EJB
SGBD
Container d’appli. cliente
JN
DI
JTA
JM
SJ
DB
CR
MI/IIO
PJ
ava
Ma
il
Appli cliente J2SE J2SE
J2SE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 6
L’architecture J2EE
Les services
►HTTP 1.1 ►JDBC
►HTTPS ►JMS
►JTA ►JavaMail
►RMI/IIOP ►JNDI
►Java IDL ►JavaBeans Activation
►JSP ►JDK
►Servlet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 7
L’architecture J2EE
Services supportés par WSAD
►L’ensemble des services J2EE
►Des assistants sont proposés pour faciliter la prise en main de certaines APIs
►Un environnement de test des applications J2EE
►Outil de déploiement
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 8
L’architecture J2EE
Mise en œuvre avec WSAD
►Créer un projet►Développer les composants :
� Web (HTML, JSP, Javascript)� Applicatifs (JSP, servlet)� Métier (EJB)
►Packager►Déployer
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 9
L’architecture J2EE
WSAD - Les projets
►3 types :� Projet «Web » : Fichier->Nouveau->Projet…->WebProjet Web dynamique
� Projet « Application d’entreprise »Fichier->Nouveau->Projet…->J2EEProjet d’application d’entreprise
� Projet « EJB »Fichier->Nouveau->Projet…->EJBProject EJB
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 10
L’architecture J2EE
WSAD - Création d’un projet Web►Création de toute l’arborescence projet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 11
L’architecture J2EE
WSAD : Création d’un projet Web (1)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 12
L’architecture J2EE
WSAD : Création d’un projet Web (2)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 13
L’architecture J2EE
WSAD : Création d’un projet Web (3)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 14
L’architecture J2EE
WSAD : Création d’un projet Web (4)
INFORMATIQUE� Par Dr. Samia GAMOURA-CHEHBI
Les mécanismes avancésLes classes du JDKDéveloppement d’applications Web
Architecture J2EEEléments de l’architecture J2EETest et debugDéploiement
Mise en œuvre avec le pattern MVCEléments d’architecture
Développement
d’application avec
Java – J2EE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 16
Architecture J2EE
Servlets
► Servlet : Server-side applet
► Programme Java exécuté sur un serveur multi-threadé (comme un serveur Web)� Peut-être chargé localement ou dynamiquement à
travers le réseau
� Retourne (en général) une page HTML de résultat� génération dynamique de pages HTML
� Permet d’étendre les fonctionnalités des serveurs Web HTTP (un peu comme les scripts CGI)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 17
Architecture J2EE
Servlets : Caractéristiques
► Mécanisme de sécurité intégré� appel dans le contexte du serveur� limitation d'accès aux servlets� peut s'intégrer dans une architecture Single Sign
On (SSO)
► Optimisation des performances� s'exécute dans le contexte du serveur
d'application� s'exécute et reste en mémoire� pré-chargement et chargement à la demande� multithread
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 18
Architecture J2EE
Servlets : API
► Packages� Javax.servlet : Classes
génériques � GenericServlet, � ServletException,E
� Javax.servlet.http : classes spécifiques pour le protocole HTTP
� HttpServlet,� HttpServletRequest,� HttpServletResponse
<<interface>>
javax.servlet.Servlet
javax.servlet.GenericServlet
javax.servlet.http.HttpServlet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 19
Architecture J2EE
Servlets : Cycle de vie1. Création, puis initialisation par la
méthode init ()� méthode appelée par le serveur une
seule et unique fois lors du chargement
2. Implémentation du service du client par la méthode service ()
� méthode appelée automatiquement par le serveur à chaque requête de client
3. Destruction de la servlet par la méthode destroy ()
� méthode appelée par le serveur une seule fois à la fin
� permet de libérer des ressources
init()
service()
destroy()
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 20
Architecture J2EE
Invocation HttpServlet
GET request
service()
HttpServlet
response
doGet()
doPost()
Serveur Web
POST request
response
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 21
Architecture J2EE
Cycle de vie & multithreading
► Configuration� Par défaut une même servlet peut être utilisée par
autant de threads que nécessaire pour gérer les requêtes utilisateur
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 22
Architecture J2EE
Mode single thread
►Single thread� Garantir que la servlet n’exécute qu’une
seule requête à la fois� Ne résout pas les problèmes de
synchronisation pour les membres statiques ou les classes hors de la portée de la servlet
� Nécessite d’implémenter l’interface javax.servlet.SingleThreadModel
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 23
Architecture J2EE
HttpServlet (1)
►Objectif � renvoyer une page HTML fonction de
paramètres saisis par l’utilisateur (pages dynamiques)
►Principes� aucune interface graphique� les pages HTML saisissent les paramètres
et présentent les résultats
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 24
Architecture J2EE
HttpServlet (2)
► Classe javax.servlet.http.HttpServlet � hérite de la classe Servlet
� facilite le traitement particulier des serveurs Web
► Remplacement avantageux de la méthode service () de la classe mère par l'une ou l'autre des méthodes suivantes :� doGet () pour traiter des requêtes HTTP de type GET
� doPost () pour traiter des requêtes HTTP de type POST
� N.B. : par défaut, ces méthodes renvoient uncode d’erreur, HTTP_BAD_REQUEST
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 25
Architecture J2EE
HttpServlet : formulaire
►L’approche :� Construction du formulaire HTML
d’interrogation
� La servlet effectue la requête et retourne le résultat
►La méthode doGet() ou doPost() est choisie selon le mode d’envoi du formulaire HTML qui exécute la servlet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 26
Architecture J2EE
HttpServlet : invocation
►Directement depuis une URL du type :
machine
où se trouve
le serveur
de servlets
numéro de port
sur lequel
il est à l’écoute
mot
réservé
nom complet
de la classe
(avec le nom
du package)
liste des
paramètres
et de leurs
valeurs
http://<host>:<port>/servlet/<servlet_class><?param1=value1,...>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 27
Architecture J2EE
HttpServlet : activation
init
service service service service
Multi-threads
E.
doPostdoGet
EE
doPostdoGet
EE
doPostdoGet
EE
doPostdoGet
EE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 28
Architecture J2EE
HttpServlet : squelette
import javax.servlet.*;import javax.servlet.http.*;
public class SimpleServlet extends HttpServlet{
public void init(HttpServletConfig c)throws ServletException
{…}
public void doGet (HttpServletRequest req,HttpServletResponse res) // ou doPost ()
throws ServletException, IOException
{…}
public void destroy() {…}
public String getServletInfo() {…}
}
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 29
Architecture J2EE
HttpServletRequest
► Contient l’ensemble des informations portées par la requête HTTP� paramètres, entêtes,sécurité
► Les paramètres peuvent être contenu :� Dans le bloc post
� Dans l’URL du servlet
► Conflit de paramètres� Un paramètre peut avoir plusieurs valeurs
� La valeur de par défaut est la première valeur de l’URL puis la première du bloc post
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 30
Architecture J2EE
HttpServletRequest : paramètres
► Les méthodes de HttpServletRequest pour gérer les paramètres sont :� getParameterNames() : retourne une
Enumeration des noms des paramètres� getParameterValues( String nom ) :
retourne les valeurs d'un paramètre� getParameter( String nom ) : retourne la
valeur d'un paramètre� getReader() : retourne une référence sur le flux
d'entrée de la requête� getCookies() : retrouve les cookies du client
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 31
Architecture J2EE
HttpServletRequest : exemple
►Utilisation des méthodes de la classe ServletRequest
public void doGet(HttpServletRequest req,HttpServletResponse rep)
throws ServletException, IOException
{
String[] values = req.getParameterValues();Enumeration list = req.getParameterNames();
String value1 = req.getParameter("param1");
...
}
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 32
Architecture J2EE
HttpServletResponse► L'objet HttpServletResponse
� Hérite de ServletResponse pour gérer la réponse de la requête envoyée au client Web
� Gère les entêtes� Peut rediriger la requête vers un autre servlet,
même si elle n’est pas mappée sur une URI► Le statut de la réponse ne peut pas être
modifié après l’envoi au client� l’envoi du statut place un drapeau « commited » à
l’état vrai► La gestion des entêtes prend en compte les
valeurs multiples
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 33
Architecture J2EE
HttpServletResponse : Exemplepublic void doGet(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException
{
// set header file first
res.setContentType("text/html");
// then get the writer and write the response data
PrintWriter out = res.getWriter();
out.println("<HEAD><TITLE>SimpleServlet</TITLE></HEAD><BODY>");
out.println("<h1>simple servlet output</h1>");
out.println("<P>This is the output of the servlet</P>");
out.println("</BODY>");
out.close();
}
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 34
Architecture J2EE
HttpSession► L'objet HttpSession
� Gère les sessions (mémorisation d'état, d'informations)
� exemple : utilisateur courant, caddie, E� la servlet ne contient pas d'état
� Représente la connexion client-serveur � Gère une continuité dans le temps et entre
plusieurs servlets : zone de stockage� Est identifié par un identifiant de session (qui peut
être placé dans l’URL même avec un formulaire POST)
� Demande de l'objet session request.getSession( boolean create)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 35
Architecture J2EE
HttpSession : API
►MéthodessetAttribute( String, Object)
� stockage d'un objet dans la session
� Objet getAttribute( String )
� récupérer un objet dans la session
►Invalidation de session� par timeout : temps d'inactivité� par programmation : session.invalidate()
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 36
Architecture J2EE
ServletContext
►L'objet ServletContext � Donne l’accès au ressources du serveur� Donne accès à un contexte pour toutes les
instance du servlet dans la Webapplication
►Permet un accès � aux paramètres d’initialisation� aux fonctions de trace� (ces fonctions sont aussi disponibles dans
GenericServlet)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 37
Architecture J2EE
ServletContext : Ressources► Accès aux ressources du serveur :
� InputStream getResourceAsStream(String path) : renvoi le flux d’entrée de la ressource de chemin path
� URL getResource(String path) : permet d’accéder à la ressource de chemin path
► La Classe URL fournit les méthodes :� URLConnection openConnection() : renvoie une
connexion à l’objet distant référencé par l’URL� URLConnection permet d’écrire dans la ressource
considéré
� La ressource n’est pas interprétée, par exemple ouvrir un fichier JSP renverra le code source de la page
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 38
Architecture J2EE
ServletContext : Paramètres, Trace► Méthodes d’accès aux Paramètres
� Enumeration getInitParameterNames() : renvoi la liste des noms de paramètres d'initialisation
� String getInitParameter(String) : renvoi le paramètre d’initialisation
► Méthodes de trace� void log(String) : écrit le message spécifié dans le
fichier de log � void log(String, Throwable) : écrit le message
spécifié ainsi que le contenu de la pile d’appel dans le fichier de log
� Le fichier de log est normalement le fichier de log de la servlet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 39
Architecture J2EE
RequestDispatcher
► L'objet RequestDispatcher� Intermédiaire entre la servlet courante et une
autre ressource du serveur
� Permet de déléguer totalement le traitement d’une requête ou d’intégrer le résultat du traitement de celle-ci dans la page courante
► A partir du ServletContext� getRequestDispatcher(String uripath)
� Renvoie une interface RequestDispatcher pour l’URI spécifiée
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 40
Architecture J2EE
RequestDispatcher : API
► Méthodes� forward(ServletRequest req, ServletResponse res)
� Transmet le traitement de la requête à une autre ressource du serveur (JSP, Servlet, html)
� include(ServletRequest req, ServletResponse res)� Inclut le contenu du traitement de la requête (JSP, Servlet,
html) à la réponse courante
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 41
Architecture J2EE
Servlets : Mise en œuvre WSAD (1)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 42
Architecture J2EE
Servlets : Mise en œuvre WSAD (2)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 43
Architecture J2EE
Servlets : Mise en œuvre WSAD (3)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 44
Architecture J2EE
Servlets : Mise en œuvre WSAD (4)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 45
Architecture J2EE
Servlets : Mise en œuvre WSAD (5)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 46
Architecture J2EE
JSP : Principe► Une page JSP est un document texte
� Qui décrit comment traiter une requête pour générer une réponse
� La description contient un modèle de donnée et des actions dynamiques
► Le contenu délivré au client est composé� de contenu statique ou non-personnalisé� de contenu personnalisé (adapté au client et ses requêtes)
► Du point de vue développement� Les fichiers JSP contiennent la présentation� Les traitements métiers sont réalisés par des servlets; des
javabeans ou des EJBs
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 47
Architecture J2EE
JSP : Invocation
client
serveur web
&
moteur JSP
Fichier JSP
Composant
requête
requête
requête
répons
e
répons
e
répons
e
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 48
Architecture J2EE
JSP est une servlet► Une page JSP est une servlet
� Le cycle de vie est identique► La servlet générée étend la classe HttpJspPage disposant des méthodes :� jspInit(),� _jspService(),� jspDestroy()
► Procédure d’initialisation� ServletConfig est défini par le serveur JSP� Appel de jspInit()
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 49
Architecture J2EE
JSP : Modèle d’exécution► Compilation du fichier
JSP en Servlet � Le fichier source .jsp
est analysé
� Le code source .java de la Servlet JSP est généré
► Exécution de la servlet� La servlet est
compilée en .class, chargée, puis exécutée
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 50
Architecture J2EE
JSP : structure de la page
► Page JSP = tags HTML + code Java► Eléments
� <% code %> ou <jsp:scriptlet> : traitement Java� <%= expr%> ou <jsp:expression> : expressions (résultat inséré dans
le code HTML généré)� <%! decl %> ou <jsp:declaration> : déclaration Java� <%@ directives %> ou <jsp:directive> : directives Java� les actions : <jsp:include>, <jsp:useBean>, …� exemple :
► Extension du fichier : .jsp
<html><body> Bonjour <%=request.getParameter("nom")%></body>
</html>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 51
Architecture J2EE
Les différentes balises► Les directives
� Deux directives Page & Include ► Les actions
� Déclaration de variable ou de méthode� Exécution de code� Transfert ou du traitement de la requête à une autre ressource du
site Web� Insertion du résultat d’une autre requête dans le résultat courant� Utilisation déclarative des javabeans
► Librairies de tag� Directive Taglib : permet de définir un préfixe de balise et la librairie
de balises qui lui est associé� Permet de réaliser des traitements spécifiques exécutés par des
librairies java tel que déclaré avec la balise taglib
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 52
Architecture J2EE
Directive « page »► La directive page définit les attributs qui s’appliquent à toute la page
JSP� <%@ page attributs %>
► Les attributs sont� extends= "package.class"
� Défini le nom de la classe mère de laquelle la classe JSP générée doit hériter� import = "package.class"
� Liste séparée par des virgules des packages que la page JSP doit importer� session= "true|false"
� À vrai, indique que le client doit rejoindre une session pour utiliser la page JSP� buffer= "none|8Ko|sizekb"
� Indique la taille du buffer de sortie� Si « none », la réponse n’est pas bufférisée et est commise immédiatement
� autoflush = "true|false"� Si « true » Le buffer est envoyé automatiquement au client lorsqu’il est plein. Si
« false » une exception est lancée quand le buffer déborde� autoflush = "false" n’est pas valide lorsque buffer à la valeur « none »
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 53
Architecture J2EE
Directive « page »► Attributs
� isThreadSafe= "true|false"� Si « true » la conteneur peut utiliser le JSP pour traiter concurremment
plusieurs requête client. Sinon le conteneur envoie les demandes de traitements l’une après l’autre à la page JSP
� Info = "text"� La chaîne est intégrée telle quelle dans la page compilé et peut être
récupérée avec Servlet.getServletInfo()� errorPage= "URL relatif"
� En cas d’erreur dans la page courante, l’exception est transmise à la page d ‘erreur spécifiée
� isErrorPage = "true | false"� Indique que la page JSP affiche les pages d’erreur. Avec « true » l’objet
exception de la page JSP peut être utilisé� contentType = "text/html;charset=ISO-8859-1"
� Indique le type de document et l’encodage de caractère utilisé pour la réponse du jsp
� pageEncoding = "characterSet | ISO-8859-1"� Indique l’encodage de caractère utilisé pour la réponse de la page JSP
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 54
Architecture J2EE
Directive « include »► La directive inclue un fichier texte ou source
dans la page JSP� À l’étape de traduction� Lorsque la page JSP est compilée� Et les tags JSP du fichier sont interprété
► Le fichier inclus peut être de type� Fichier HTML� Page JSP� Document XML� Code source JAVA
► La syntaxe est� <%@ include file = "URL relatif" %>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 55
Architecture J2EE
Directive «include» : exemple
► Exemple :
► Attention� Le fichier inclus ne doit pas contenir les tags
� <html>, </html>, <body>, </body>
� Suivant le conteneur JSP utilisé, le fichier inclus peut posséder des restrictions de sécurité
<html><body>
<%@ include file="/navbar.html"%>Hello !!
</body></html>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 56
Architecture J2EEActions
►Les actions dans un fichier JSP� Déclaration (variable/méthode)
� Exécution de code
� Transfert du traitement de la requête à une autre ressource du site Web
� Insertion du résultat d’une autre requête dans le résultat courant
� Utilisation déclarative des javabeans
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 57
Architecture J2EEAction : déclaration
► Déclaration de variable ou de méthode� Permet de déclarer une variable ou un méthode dans le
code java
� Une variable ou une méthode doit être déclarée avant d’être utilisée
� Une déclaration doit avoir une syntaxe java valide� Toujours terminer la déclaration par un ‘;’
� Il est possible de référencer des variables ou méthodes java déjà importées par la directive page,
� Il est alors inutile (et même interdit) de les redéclarer
► Syntaxe� <%! déclaration; [déclaration;]+…%>
► Attention !� La portée de la déclaration n’inclut pas les ressources
dynamiques inclues par l’action <jsp:include>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 58
Architecture J2EEAction : exécution de code
► Expression� Permet d’afficher le résultat de l’évaluation d’une
expression valide en code java
► Syntaxe� <%= expression %>
� Attention : l’expression ne doit pas se terminer par ‘;’
► Scriptlet� Permet d’exécuter un fragment de code java valide
► Syntaxe� <% fragment de code %>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 59
Architecture J2EEAction : exemple1
►Exemple :<%-- Déclaration --%><%! int idx; %><%! ListeElement le = new ListeElement(); %>
<%-- Expression --%>La liste d’éléments contient <%=le.size()%> element(s)<br>
<%-- Scriptlet --%><% le.AfficherDebut();
for(idx = 0; idx < le.size(); idx++) {le.AfficherLigne(idx);
}le.AfficherFin();
%>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 60
Architecture J2EEVariables prédéfinies (1)
► Des variables prédéfinies peuvent être directement utilisées dans le code du jsp :� request
� référence l'objet HttpServletRequest associé à la requête du client
� permet de récupérer le type de requête, les paramètres et le header
� response� référence l'objet HttpServletResponse associé à la réponse
pour le client� out
� référence le flux de sortie PrinterWriter
� page� synonyme de this
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 61
Architecture J2EEVariables prédéfinies (2)
► Les autres variables sont :� session
� référence l'objet session HttpSession associé à la requête� n'existe pas si l'attribut session dans la directive page est à false
� application
� référence l'objet ServletContext
� config
� référence l'objet ServletConfig
� pageContext
� référence l'objet PageContext propre au serveur de JSP
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 62
Architecture J2EEAction : transfert
► Transfert du traitement vers une autre ressource du site Web� Transfère l’objet request contenant les informations de la requête client à
une autre ressource� La ressource peut être un fichier HTML, JSP ou une Servlet� La ressource doit être dans le même contexte applicatif
► Syntaxe� <jsp:forward page="URL relatif | <%=expression%>">� <jsp:param name="nom" value="valeur|<%expression%>"/>� </jsp:forward>
� La balise jsp:param est optionnelle et peut être répétée plusieurs fois
► Attention� La prise en compte des paramètres ne peut être effectuée que par des
pages dynamiques : Servlet ou JSP� Dans le cas d’une directive page buffer="none" si l’on utilise une action
forward avec un buffer dans l’état "committed", une exception IllegalStateException est levée
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 63
Architecture J2EEAction : insertion
► Insertion du résultat d’une autre requête dans le résultat courant� Si la ressource est statique, insère le contenu dans la page courante
� La ressource est un fichier html, texte, E� Si la ressource est dynamique, exécute la requête et concatène le
contenu dans la réponse courante.� La ressource est un fichier JSP ou une Servlet
► Syntaxe� <jsp:include page="URL relatif | <%=expression%>" flush="true|false">� <jsp:param name="nom" value="valeur|<%expression%>"/>� </jsp:include>
� La balise jsp:param est optionnelle et peut être répétée plusieurs fois� L’attribut flush="true" permet de vider le buffer avant l’inclusion
► Attention� La prise en compte des paramètres ne peut être effectuée que par des
pages dynamiques : Servlet ou JSP
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 64
Architecture J2EEAction : exemple2
►Exemple :<%-- Traitement dans la même page ? --%>
<% if (utilisateur_connecte) {%>
<jsp:include page=“servlet/affichetableau”%>
<% } else { %>
<jsp:forward page=“login.jsp” %><jsp:param name=“pageorigine” value=“<%=pagecourante()%>” /></jsp:forward>
<% } %>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 65
Architecture J2EE
Les Beans : définition
►Principe de définition de composants ►Les propriétés sont accessibles en
respectant une API particulière►Trois types :
� Classe Java avec règles élémentaires sur les accesseurs
� JavaBean� EJB
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 66
Architecture J2EE
Les Beans : accès servlet
►En général accessible à partir de l’objet session (HttpSession)� getAttribute
� setAttribute
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 67
Architecture J2EE
Les Beans : accès JSP
►Utilisation des balises standard :
<jsp:useBean>: accès à un bean
<jsp:setProperty> : modification
d’une propriété
<jsp:getProperty> : accès à une
propriété d’un Bean
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 68
Architecture J2EEAction : exemple3
►Exemple :<-- utilisation du bean compteclient --><jsp:useBean id=“compteclient” scope=“request” class=“compteclient.class”>
<-- Le formulaire saisi par le client contient les paramètresid et password positionnés tel quel dans le bean --><jsp:setProperty name=“compteclient” property=“*”/>
</jsp:useBean>
<-- affichage du solde du compte client -->Le solde sur le compte est <jsp:getProperty name=“compteclient”property=“solde” /><br>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 69
Architecture J2EE
Directive « taglib »
►Définition d’une instruction de traitement dans la page JSP : balise XML
►Permet de masquer le code Java associé
►Bibliothèque de composants de présentation
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 70
Architecture J2EEExtension de balise : catégories
► Trois catégories d’extension de balise� Simple : ne manipule pas le contenu de la balise
� Exemple : Afficher une date � Iteration : peut réévaluer (sans le manipuler) le contenu de la
balise� Exemple : faire une boucle
� Body : réévalue et manipule le contenu de la balise� Exemple : pour les traitements complexes
<<interface>>
tag
<<interface>>
IterationTag
<<interface>>
BodyTag
TagSupport
BodyTagSupportimplémente
implémente
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 71
Architecture J2EE
Extension de balise : fonctionnement
► Les taglibs individuels sont implémentés par des classes java
► Un fichier XML de type TLD (Tag Library Descriptor) définit le mapping entre les noms de taglibs et les librairies
► Les classes Java et les TLD peuvent être déployés individuellement ou par fichier JAR
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 72
Architecture J2EEExtension de balise : mécanisme
► Les déclarations de différents fichiers� La page jsp déclare l’URI du taglib à utiliser� Le fichier web.xml associe
un fichier TLD à l’URI� Le fichier TLD détermine
la classe à utiliser� Le contenu de la page
peut être généré
Web.xml
Page jsp
Taglib.tld
Tagclass
Traduction du jsp
servlet
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 73
Architecture J2EE
Extension de balise : utilisation► Les tags sont mis à disposition dans la page avec la
directive :<%@ taglib uri=”uri” prefix=”prefix” %>
� uri référence le tld à utiliser� Prefix définit l’espace de nommage à utiliser pour référencer
les taglibs utilisés
► Le fichier web.xml détermine les fichiers TLD à utiliser
<taglib><taglib-uri>MyTags</taglib-uri><taglib-location>/WEB-INF/lib/DateTagLib.tld</taglib-location></taglib>
► Le fichier TLD indique le format du tag ainsi que la classe java à utiliser
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 74
Architecture J2EE
Conseils de mise en œuvre
► Les JSP ne doivent contenir que de la présentation
► Les traitements peuvent être réalisés par des servlets, des beans ou des taglibs
► Réduire le code Java dans les pages JSP en utilisant/développant des taglibs
► La librairie JSTL est aujourd’hui un standard de facto
� http://www.jcp.org/en/jsr/detail?id=52� http://java.sun.com/developer/technicalArticles/javaserve
rpages/faster/
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 75
Architecture J2EE
JSP : Mise en œuvre WSAD (1)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 76
Architecture J2EE
JSP : Mise en œuvre WSAD (2)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 77
Architecture J2EE
JSP : Mise en œuvre WSAD (3)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 78
Architecture J2EE
JSP : Mise en œuvre WSAD (4)
INFORMATIQUE� Par Dr. Samia GAMOURA-CHEHBI
Test et debug
Les mécanismes avancésLes classes du JDKDéveloppement d’applications Web
Architecture J2EEEléments de l’architecture J2EETest et debugDéploiement
Mise en œuvre avec le pattern MVC
Développement
d’application avec
Java – J2EE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 80
Test et debug (1)
►Test unitaire à réaliser sur toutes les classes
►Deux techniques :� Code de test dans le main
� Utilisation de Junit
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 81
Test et debug
Junit (1)
► Framework proposant des outils pour :� Les assertions
� Les tests d’exécution
� Les agrégations de tests
� La génération de rapports de test
► Principe� Le développeur code ses tests
� Simplication du codage des tests
� Tester tôt, tester souvent
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 82
Test et debug
Junit (2)
►Trois notions principales :� Un TestCase qui est une classe de test.
Cette classe dérive de la classe Test du framework
� Une TestSuite est un ensemble de tests. Elle dérive de Test et contient des instances de la classe Test.
� Un TestRunner permet de lancer l’exécution d’une liste de tests.
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 83
Test et debug
Junit (3)
► Mécanismes� Définir une classe dérivée de TestCase
� Définir les méthodes public testXXX()
� Test des traitements.
� Assertion des résultats attendus.
► assert(boolean exp): vérifie que l’expression
est vraie.
► assertNotNull(Object ref) : vérifie qu’une
référence d’objet est valide
► assertEquals(Object value, Object exp) : Vérifie
que l’expression renvoie une valeur donnée
► fail(String msg) : fait échouer le test en
affichant un message (section de code)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 84
Test et debug
Junit (4)
� Définir une méthode fabrique static suite()
� Créer un TestSuite contenant l’ensemble des test.
� Créer une classe qui va contenir la liste des tests à exécuter
� Ajouter la méthode main() pour lancer
le TestCase en mode batch
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 85
Test et debug
Junit : Exemple
public class StringTest extends TestCase {
public void testSimpleAdd() {String s1 = new String(“abcd”); String s2 = new String(“abcd”); assertTrue(“Strings not equal”,
s1.equals(s2)); }
public static Test suite() {return new TestSuite(StringTest.class);
}
public static void main(String[] args){junit.textui.TestRunner.run (suite ());}
}
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 86
Test et debug
WSAD : Débogage
► Menu ‘Exécuter’� Ajouter/supprimer des points arrêt
� Conditionner les points arrêt
� Lancer exécution de l’application en mode Debogage
► Menu contextuel� Lancement de exécution du serveur d’application
en mode débogage
► Basculement dans la perspective ‘Débogage’
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 87
Test et debug
WSAD : Perspective Débogage
Pile d’exécution
Console
Affichage des variables
Sources et points d’arrêt
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 88
Test et debug
WSAD : Variables
► Listes de l’état des variables visibles par la piles d’exécution
► Coloration des variables modifiées lors de l’avancement pas à pas de l’exécution
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 89
Test et debug
WSAD : Points d’arrêt
►Liste des points d’arrêt regroupée dans une vues
►Possibilités de conditionner les points d’arrêt
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 90
Test et debug
WSAD : Expressions (1)
► Choix des variables dans le menu contextuel� Contrôle : la valeur évolue au
cours de l’exécution
� Inspecter : la valeur est estimé à l’instant de la sélection
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 91
Test et debug
WSAD : Expressions (2)
► Possibilités d’ajouter une expression qui sera évaluée
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 92
Test et debug
WSAD : Affichage
►Affichage du résultat d’une évaluation dans le cadre de la pile d’exécution courante
►Permet de tester du code à la volée
INFORMATIQUE� Par Dr. Samia GAMOURA-CHEHBI
Déploiement
Les mécanismes avancésLes classes du JDKDéveloppement d’applications Web
Architecture J2EEEléments de l’architecture J2EETest et debugDéploiement
Mise en œuvre avec le pattern MVC
Développement
d’application avec
Java – J2EE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 94
Déploiement
Principe
► JAR, WAR, EAR :� Une application J2EE est constituée d’EJBs, de
servlets, de JSPs, de pages HTML, etc. plus un descripteur de déploiement
� Pour déployer une application d’entreprise vers un serveur d’application, on utilise un fichier EAR
� Pour déployer une application web, on utilise un fichier WAR
� Pour déployer une application Java, on utilise un fichier JAR
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 95
Déploiement
Contenu (1)
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 96
Déploiement
Contenu (2)
monAppliWeb\index.htmllogin.jsperreur.htmlimages\
logo.gifdocuments\
document1001.pdfWEB-INF\
web.xmlclasses\
MaServlet.classlib\
outils.jar
public
privé
Fichiers accessibles du navigateur
Descripteur de
déploiement
Librairies utilisées
Le code compilé
Fichiers accessibles à partir
de l’application
Document root
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 97
Déploiement
Contenu (3)
►Context path� web.xml décrit tout ce qui concerne l’application, excepté le
“context path”
� Context path est défini dans <tomcat home>\conf\server.xml
� Context path = chemin du document root de l’application
http://localhost:8080/hello/index.html
Adresse du serveur Web Context path Nom du fichier
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 98
Déploiement
Contenu (4)
►server.xmlE
<Context path=“/hello” docbase=“webapps/Servlet_JSP_Test”
crossContext=“false” debug=“0” reloadable=“true” />
E
Définit une application web située dans le répertoire “webapps/Servlet_JSP_Test” et accessible par http://localhost:8080/hello
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 99
Déploiement
web.xml
► Alias des servlets et JSPs
► Paramètres d’initialisation des Servlet
► Chargement de Servlet et configuration de session
► Mapping entre modèle d’URL et alias
► Paramètres d’initialisation de contexte
► Securité et authentification
► Mapping MIME
► Fichiers Welcome
► Pages d’erreur� Messages d’erreur HTTP
� Exceptions de servlets
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 100
Déploiement
exemple de web.xml
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
<display-name>Servlet and JSP Examples</display-name>
<description>A bunch of examples of Servlets and JSPs</description>
<servlet>
<servlet-name>Hello</servlet-name>
<description>Hello World Servlet</description>
<servlet-class>HelloWorld</servlet-class>
<load-on-startup>5</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/hello</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout> <!-- 30 minutes -->
</session-config>
</web-app>
INFORMATIQUE� Par Dr. Samia GAMOURA-CHEHBI
Le pattern MVC
Les mécanismes avancésLes classes du JDKDéveloppement d’applications WebMise en œuvre avec le pattern MVC
Développement
d’application avec
Java – J2EE
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 102
Le pattern MVC
PrincipeModèle
► Encapsule l'état de l'application
► Répond aux requêtes d'état
► Expose les fonctionnalités de
l'application
► Notifie les changements aux vues
Contrôleur� Définit le comportement de l' appli
� Fait correspondre les actions
utilisateur à la mise à jour du
modèle
� Sélectionne la vue qui répond
Vue� Assure la présentation du modèle
� Sollicite la mise à jour du modèle
� Expédie les requêtes utilisateur
au contrôleur
Changement d'étatDemande d'état
Sélection
Actionutilisateur
Notification dechangement
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 103
Le pattern MVC
Organisation
►Trois composantes� Modèle : Encapsule les informations
manipulées
� Vue : Mode de représentation des informations
� Contrôleur : Moyen d’agir sur les informations
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 104
Le pattern MVC
Articulation
►Le contrôleur change l’état du modèle
►La vue demande l’état du modèle
►Le modèle notifie la vue de son changement d’état
►La vue permet une action utilisateur transmise au contrôleur
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 105
Le pattern MVC
Les éléments► Vue� Assure la présentation du modèle� Sollicite la mise à jour du modèle� Expédie les requêtes utilisateur au contrôleur
► Contrôleur� Définit le comportement de l' application� Fait correspondre les actions utilisateur à la mise
à jour du modèle� Sélectionne la vue qui répond
► Modèle� Encapsule l'état de l'application� Répond aux requêtes d'état� Expose les fonctionnalités de l'application� Notifie les changements aux vues
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 106
Architecture J2EE
Le pattern MVC : access model 1
►Principe� Le code de traitement (logique métier) est
mêlé à la construction de la vue
Page JSP
Navigateur Web
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 107
Architecture J2EE
Le pattern MVC : access model 1.5
► Principe� Le code de traitement est encapsulé dans les beans
� Les pages JSP se chargent de présenter l’information contenue dans les beans (usebean)
Bean
Bean
Navigateur Web
Page JSP
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 108
Architecture J2EE
Le pattern MVC : access model 1.5
► Exemple... code HTML
<H1>Retrait</H1>
<jsp:useBean id="transfert" class="Transfert" scope="request" />
<jsp:setProperty name="transfert" property="source" param="compteSource"/>
<jsp:setProperty name="transfert" property="dest" param="compteDestination"/>
<jsp:setProperty name="transfert" property="montant" param="montant"/>
</jsp:useBean>
<% // traitements métiers
try { transfert.doIt(); }
catch (FondsInsuffisantsException e) {//cas d ’erreur
out.println("<H2>Erreur lors d'un retrait</H2>">;}
//affichage résultat
out.println("<H2>Fonds transférés</H2>">;
out.println("Transfert de "+montant+" de "+compteSourceId); %>
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 109
Architecture J2EE
Pattern MVC : access model 2 (1)
► Principe� Traitement (logique métier) réalisé par un Servlet
Java
� Présentation réalisée par la page JSP
Page JSP
Bean
BeanNavigateur Web
ServletRequête
Réponse
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 110
Architecture J2EE
Pattern MVC : access model 2 (2)
►Exemple// traitement du formulaire
String montant = request.getParameter("montant");
String compteSourceId = request.getParameter("compteSource");
String compteDestinationId = request.getParameter("compteDestination");
Transfert transfert = TransfertFactory.createTransfert(compteSourceId, montant);
Session.setAttibute( "transfert", transfert );
// traitements métiers
banque.transfert(compteSourceId,
compteDestinationId, montant);
// enchaînement page suivante
getServletConfig().getServletContext()
.getRequestDispatcher("/pages/afficheResultat.jsp")
.forward(request, response );
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 111
Architecture J2EE
Pattern MVC : access model 2 (3)
<H1>Fonds transférés</H1>
<USEBEAN NAME="transfert" type="session"></USEBEAN>
Transfert de <%=transfert.getMontant()%> Francs provenant du compte
<%=transfert.getCompte() >
....
� Par Dr. Samia GAMOURA-CHEHBI INFORMATIQUE
Page 112
Architecture J2EE
Mise en œuvre i-BP
►Le pattern MVC est mis en œuvre au travers de : � Environnement de conception : Rational
Rose� Outils de génération de code� Frameworks i-BP
� Classes gérant la communication entre les composants
� Etc.
top related