+ All Categories
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