+ All Categories
Home > Documents > Développement d’application avec Architecture J2EE Java … · J2EE = Java 2 Platform Enterprise...

Développement d’application avec Architecture J2EE Java … · J2EE = Java 2 Platform Enterprise...

Date post: 07-Sep-2018
Category:
Upload: buidan
View: 230 times
Download: 0 times
Share this document with a friend
112
INFORMATIQUE Par Dr. Samia GAMOURA-CHEHBI Développement d’application avec Java – J2EE via WSAD Les mécanismes avancés Les classes du JDK Développement d’applications Web Architecture J2EE Eléments de l’architecture J2EE Test et debug Déploiement Mise en œuvre avec le pattern MVC maj 2016
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.


Recommended