Académique Documents
Professionnel Documents
Culture Documents
SUPPORT DE
COURS
& TRAVAUX
DIRIGES
Programmation N-TIERS
Adress aux tudiants en troisime anne de
Licence Applique en Technologies de
lInformatique
Parcours Multimdia et Dveloppement Web
Elabor par :
Fatma zahra BOUZIDI
Assistante technologue
Contact :
Fatmazahra.bouzidi85@gmail.com
Avant-propos
Cet ouvrage PROGRAMMATION
N-TIERS
de
donnes
issus
dun
serveur
et
de
comprendre
un
exemple
dernier chapitre
introduit lAPI
javaBean et
prsente une
Mention TI
Spcialit MDW
Semestre S5
Crdits : 5
Coef : 5
TIERS
Semaine : 6
Fiche Matire
lment Constitutif
(ECUE)
PROGRAMMATION
N-TIERS
Ventilation / Semaine
Vol. Horaire /
Semestre
Cours
11.2
5
0.75
TD
11.2
22.5
5
0.75
1.5
Coeffici
ent
Crdit
s
TP
0
0
1.5
1.5
valuati
on
Contrle
continu
Objectif(s) Gnr(al)/(aux)
Le cours vise donner lapprenant les comptences thoriques ncessaires pour
programmer des applications faisant la distinction entre l'aspect mtier et les
aspects non fonctionnels.
Objectifs Spcifiques
- Comprendre larchitecture client serveur.
- Comprendre l'architecture N-Tiers: Tiers prsentation, tiers mtier, tiers donnes.
-Comprendre larchitecture MVC
- Comprendre La plate-forme Java: J2EE
-savoir programmer des servlets
-savoir programmaer des jsps
-savoir programmer des javabeans
-Etre capable de mettre en uvre une architecture MVC
Mots-Cls
Client, Serveur, Mtier, Plate-forme, Architecture, J2EE, MVC, N-Tiers, JSP, Servlet,
JavaBean etc.
Pr-requis
UE : Dveloppement Web 1.
lments de Contenu
L'architecture 1-tiers..................................................................................... 2
2.1
Prsentation........................................................................................... 2
2.2
Limitations.............................................................................................. 3
L'architecture 2-tiers..................................................................................... 4
3.1
Prsentation........................................................................................... 4
3.2
L'architecture 3-tiers..................................................................................... 5
4.1
Prsentation........................................................................................... 5
4.2
Prsentation........................................................................................... 7
5.2
Prsentation........................................................................................... 8
6.2
Avantages et inconvnients..................................................................10
6.3
3.2
3.3
3.4
1.2
1.3
2.2
2.3
2.4
2.5
2.6
3.1
3.2
3.3
Exemple1 :............................................................................................ 46
4.2
Exemple 2 :........................................................................................... 55
JavaBeans................................................................................................... 61
1.1
1.2
1.3
3.2
3.3
Travaux diriges................................................................................................... 70
TD N1 : Les bases................................................................................................. 71
Correction TD N1 : Les bases..................................................................................73
TD N2 : Introduction aux Servlets et pages JSP.............................................................79
Correction TD N2 : Introduction aux Servlets et pages JSP...............................................81
TD N3: Implmentation de MVC..............................................................................95
Correction TDN3 : Implmentation de MVC..............................................................100
CHAPITRE I : PRESENTATION
GENERALE
CHAPITRE I : PRESENTATION
GENERALE
l'architecture 1-tiers ;
l'architecture 2-tiers ;
l'architecture 3-tiers ;
les architectures n-tiers.
L'architecture 1-tiers
2.1 Prsentation
Dans une application 1-tiers, les trois couches applicatives sont fortement
lies et s'excutent sur le mme ordinateur. On ne parle pas ici
d'architecture client-serveur, mais d'informatique centralise.
Dans un contexte multi-utilisateurs, on trouve les applications sur site
central : les utilisateurs se connectent aux applications excutes par le
serveur central (le mainframe) l'aide de terminaux passifs se comportant
en esclaves. C'est le serveur central qui prend en charge l'intgralit des
traitements, y compris l'affichage qui est simplement dport sur des
terminaux passifs.
CHAPITRE I : PRESENTATION
GENERALE
2.2 Limitations
Les applications sur site central souffrent d'une interface utilisateur en
mode caractres et la cohabitation d'applications micro exploitant des
donnes communes n'est pas fiable au del d'un certain nombre
d'utilisateurs.
Il a donc fallu trouver une solution conciliant les avantages des deux
premires :
La fiabilit des solutions sur site central, qui grent les donnes de
faon centralise,
l'interface utilisateur moderne des applications sur micro-ordinateurs.
L'architecture 2-tiers
3.1 Prsentation
Dans une architecture 2-tiers, encore appele client-serveur de premire
gnration ou client-serveur de donnes, le poste client se contente de
dlguer la gestion des donnes un service spcialis.
Ce type d'application permet de fournir l'utilisateur une interface riche,
tout en garantissant la cohrence des donnes, qui restent gres de
faon centralise.
La gestion des donnes est prise en charge par un SGBD centralis,
s'excutant le plus souvent sur un serveur ddi. Ce dernier est interrog
en utilisant un langage de requte qui, le plus souvent, est SQL.
CHAPITRE I : PRESENTATION
GENERALE
CHAPITRE I : PRESENTATION
GENERALE
L'architecture 3-tiers
4.1 Prsentation
Les limites de l'architecture 2-tiers proviennent en grande partie de la
nature du client utilis, la solution rsiderait donc dans l'utilisation d'un
poste client simple communicant avec le serveur par le biais d'un
protocole standard.
Dans ce but, l'architecture 3-tiers, encore appele client-serveur de
deuxime gnration ou client-serveur distribu, spare l'application en
trois niveaux de service distincts :
client ;
deuxime niveau : les traitements applicatifs globaux sont pris en
Tous ces niveaux tant indpendants, ils peuvent tre implants sur des
machines diffrentes.
CHAPITRE I : PRESENTATION
GENERALE
Inconvnients
L'architecture 3-tiers a corrig les excs du client lourd en centralisant une
grande partie de la logique applicative sur un serveur HTTP. Le poste
client, qui ne prend sa charge que la prsentation et les contrles de
saisie, s'est trouv ainsi soulag et plus simple grer.
Par contre, le serveur HTTP se trouve souvent fortement sollicit et il est
difficile de rpartir la charge entre client et serveur.
CHAPITRE I : PRESENTATION
GENERALE
5.1 Prsentation
L'architecture N-tiers a t pense pour pallier aux limitations des
architectures 3-tiers et concevoir des applications puissantes et simples
maintenir.
L'appellation N-tiers pourrait faire penser que cette architecture met en
oeuvre un nombre indtermin de niveaux d'application, alors que ces
derniers sont au maximum trois (pour rappel : la couche IHM la couche
applicative la couche daccs aux donnes).
En fait, l'architecture N-tiers qualifie la distribution de la couche
applicative entre de multiples services et non la multiplication des
couches.
Les composants mtiers'' de la couche applicative sont spcialiss et
indpendants. Ils communiquent entre eux et peuvent donc cooprer en
tant implants sur des machines distinctes.
Ce
type
d'architecture
permet
de
distribuer
librement
la
logique
CHAPITRE I : PRESENTATION
GENERALE
de l'architecture N-
tiers :
Avantages :
Thoriquement, ce type d'architecture supprime tous les inconvnient
s des architectures prcdentes :
Inconvnient :
6.1 Prsentation
L'architecture Modle/Vue/Contrleur (MVC) est une faon d'organiser une
application. Elle consiste distinguer trois entits distinctes qui sont,
le modle, la vue et le contrleur ayant chacun un rle prcis dans
l'application.
Dans l'architecture MVC, les rles des trois entits sont les suivants.
8
CHAPITRE I : PRESENTATION
GENERALE
La vue :
Ce qu'on nomme la vue est en fait une IHM. Celle-ci est en fait ce qu'a
l'utilisateur sous les yeux. La vue peut donc tre :
Une
C#...) ;
une page web
Un terminal Linux ou une console Windows...
application
Java
(Form pour
Le modle :
Il dcrit les donnes manipules par l'application .Le modle reprsente le
cur de l'application : traitements des donnes, interactions avec la base
de donnes, etc.. Il regroupe la gestion de ces donnes et est responsable
de leur intgrit. Le modle comporte des mthodes standards pour
mettre jour ces donnes (insertion, suppression, changement de valeur).
Le contrleur
Contrleur: son rle est de traiter les vnements en provenance de
linterface utilisateur et les transmet au modle pour le faire voluer ou
la vue pour modifier son aspect visuel (pas de modification des donnes
affiches mais des modifications de prsentation (couleur de fond,
affichage ou non de la lgende dun graphique, )). Le contrleur connat
la (les) vues quil contrle ainsi que le modle.
Le contrleur pourra
de nouvelles
vues (demande
Interactions
Les diffrentes interactions entre le modle, la vue et le contrleur sont
rsumes par le schma de la figure suivante.
CHAPITRE I : PRESENTATION
GENERALE
effet, la
CHAPITRE I : PRESENTATION
GENERALE
et infrieures) et
plus,La
diffrence
fondamentale
se
trouve
dans
le
fait
que
En rsum :
Ce chapitre a prsent brivement les architectures 1-tiers, 2-tiers, 3-tiers,
N-tiers et MVC, ainsi que
leurs avantages et
11
Chapitre II
Prsentation de la plateforme
Java EE
OBJECTIFS
Lobjectif de ce chapitre est de :
couche ;
Connaitre les diffrents lments qui constituent lenvironnement
La prsentation de Java EE
J2EE est l'acronyme de Java 2 Entreprise Edition. Cette dition propos par
Sun Microsystems, dsormais Oracle Corporation,
est ddie la
L'utilisation
de
J2EE
pour
dvelopper
et
excuter
une application
dveloppement ;
la possibilit de s'interfacer avec le systme d'information existant
donnes.
Les services, pouvant tre classs par catgories :
o Les services d'infrastructures : il en existe un grand nombre,
dfinis ci-dessous :
JDBC (Java DataBase Connectivity) est une API d'accs aux bases
de donnes relationnelles ;
JNDI (Java Naming and Directory Interface) est une API d'accs
aux services de nommage et aux annuaires d'entreprises tels que
Extension)
fournit
des
extensions
Architectures en Java EE
Les composants Clients (ou tier Client) s'excutent sur la machine des
utilisateurs ;
Les composants Web(ou tiersWeb) s'excutent sur le serveur J2EE ;
Les composants mtier ou ( tier Mtier) s'excutent sur le serveur Java
EE ;
La partie stockage des donnes, nomme tiers Enterprise Information
System (EIS), s'excute sur le serveur de base de donnes.
d'une
interface
graphique
volue
encore
appele
La figure ci-dessus montre les diffrents types de clients utiliss dans une
plate-forme Java EE. Les clients riches de type application communiquent
directement avec le tiers Mtier alors que les clients de type navigateur
Internet communiquent travers le tiers Web par l'intermdiaire de pages
excutes sur le serveur et gnres par des Servlets, JSP ou JSF.
Une application Java EE de type Web ncessite un conteneur Web pour son
excution alors quune application utilisant les EJB ncessite un conteneur
EJB pour son excution. Chaque conteneur propose un ensemble de
services avec ses avantages et ses contraintes.
Les serveurs dapplications peuvent fournir un conteneur web uniquement
(exemple : Tomcat) ou un conteneur d'EJB uniquement (exemple : JBoss,
Jonas, ...) ou les deux (exemple : Websphere, Weblogic, ...).
Pour dployer une application dans un conteneur, il faut lui fournir deux
lments :
l'application
avec
tous
les
composants
(classes
compiles,
module
Contenu
Extensi eur
on
de
dploie
ment
application
client
applicatio
n-
images, ...)
client.xml
war
web.xml
jar
ejbjar.xml
modules EJB ... Chacun de ces modules possde son propre mode de
packaging. J2EE propose de regrouper ces diffrents modules dans un
module unique sous la forme d'un fichier EAR (Entreprise Archive).
Le format de cette archive est trs semblable celui des autres archives :
En rsum
Ce chapitre a donn un aperu sur la plateforme JavaEE et les diffrentes
API qui la composent, il a dcrit les diffrents lments qui composent
l'environnement d'excution des applications JavaEE et leurs modes
d'assemblage et de dploiement. Dans le chapitre qui suit nous allons
dcouvrir les servlets et les jsp qui seront utiliss pour implmenter le
modle MVC.
Chapitre III
pages JSP
OBJECTIFS
Lobjectif de ce chapitre est de :
Les servlets ne sont pas des objets instancis chaque requte HTTP,
Il n'existe qu'une et une seule instance d'une servlet dans le
conteneur.
Ce qu'il se passe c'est que pour chaque requte HTTP, un thread est
cr pour satisfaire la requte et proposer une rponse :
et
va
invoquer
la
mthode
adquate,
ici
request,
Le traitement se fait ;
La rponse est renvoye au client.
void
doGet(HttpServletRequest
request,
HttpServletResponse
}
Le fichier web.xml est le suivant :
<web-app>
<servlet>
<servlet-class> Test </servlet-class>
<servlet-name>firstServlet</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>firstServlet</servlet-name>
<url-pattern>/Serv1 /</url-pattern>
</servlet-mapping>
</web-app>
La servlet :
On notera les points suivants :
rponse HTTP.
Ensuite, le contenu de la servlet est trs simple :
o response.setContentType("text/html") : dfinit le type de rponse,
ici, on retourne une page HTML ;
o PrintWriter out = response.getWriter() : on rcupre un objet
permettant d'crire dans la future page HTML ;
o out.println("....") : crit dans la page.
Tomcat,
son
lancement,
prend
connaissance
des
donnes
JSP
ont
un
cycle
de
vie
un
peu
plus
compliqu
que
les
Le e cycle
Cette liste doit safficher sous la forme dun tableau deux colonnes, la
premire pour les ralisateurs, la seconde pour les films raliss par ces
auteurs.
Exemple :
Dans lexemple prcdent la chane lAffiche contient les balises HTML ainsi
que les noms des ralisateurs et des films. Cette liste de mots est stockes
en mmoire mais nest pas encore affiche par le navigateur. En insrant
la chane lAffiche entre les balises <%= et %>, le contenu de la chane est
envoy au navigateur qui affiche un tableau.
d'importer un package ;
d'inclure d'autres pages JSP ;
d'inclure des bibliothques de balises (nous y reviendrons dans un
prochain chapitre) ;
de dfinir des proprits et informations relatives une page JSP.
Directive taglib
Format :
<%@ taglib uri="maTagLib.tld" prefix="tagExemple" %>
Le code inclut une bibliothque personnalise nomme maTagLib
Directive page
Format
<%@ page import="paquetage.classe" %>
<%@ page import="paquetage.classe1,...,paquetage.classeN" %>
La directive page dfinit des informations relatives la page JSP. Voici par
exemple comment importer des classes Java :
<%@ page import="java.util.*, java.net.*" %>
D'autres options sont utilisables via cette balise page, comme le
contentType ou l'activation de la session.
<%@ page contentType="text/plain" %>
<%@ page session="true|false " %>
Directive include
Format
<%@ include file="chemin relatif du fichier" %>
En pratique, il est trs courant de dcouper littralement une page web en
plusieurs fragments, qui sont ensuite rassembls dans la page finale
destination de l'utilisateur. Cela permet notamment de pouvoir rutiliser
certains blocs dans plusieurs vues diffrentes
Pour permettre un tel dcoupage, la Directive include permet dinclure le
contenu d'un autre fichier dans le fichier courant.
Exemple
<%@ include file="/toto.html" %>
request :
contient
une
rfrence
sur
lobjet
de
page.
out : Un Writer, utilis pour envoy des informations au client
Session : variable de type Httpession. On peut donc lui attacher des
objets, puisquune JSP est une servlet. Cette variable reprsente la
En rsum
Dans ce chapitre nous avons russi faire un simple servlet et une simple
jsp, et nous avons comprendre comment sont excuts. Dans le chapitre
suivant, nous allons voir que Les servlets ne servent pas crire du code
Java dans des pages web, et dmarrer avec des JSP pour des traitements
complexes nest pas pratique. En fait, la plateforme JEE implmente
le pattern MVC.
Chapitre IV
Implmentation de MVC
OBJECTIFS
Lobjectif de ce chapitre est de :
Avec la plate-forme JEE, nous allons devoir utiliser le pattern MVC. Nous
avons vu que le pattern MVC est compos de trois entits (Modle, Vue,
Contrleur)
Si nous appliquons le pattern MVC l'architecture JEE, a nous donne :
pour
rle
de
rcuprer
les
requtes
client
et
d'agir
en
consquence
Le modle peut tre divers et vari, comme tout modle digne de ce
nom :un objet Java basique ;un objet Java devant faire appel une
base de donnes ;
La vue, elle, reste une page web contenant du code HTML, la
diffrence prs que celle-ci contiendra aussi du code Java : on appelle
ces pages web des Java Server Pages, ou JSP
Nous allons voir comment faire en sorte qu'une servlet puisse utiliser une
JSP afin de la fournir au client.
ce
faire,
nous
allons
appellerons InvokeJsp
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
crer
une
nouvelle
servlet
que
nous
void
doGet(HttpServletRequest
request,
HttpServletResponse
response)
throws IOException, ServletException{
RequestDispatcher dispatch =request.getRequestDispatcher("firstJsp.jsp");
dispatch.forward(request, response);
}
}
Le fichier web.xml :
<web-app>
<servlet>
<servlet-class> InvokeJsp</servlet-class>
<servlet-name>invoke</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>invoke</servlet-name>
<url-pattern>/invoke</url-pattern>
</servlet-mapping>
</web-app>
Pour
accder
cette
servlet,
il
suffit
daller
l'adresse
RequestDispatcher
dispatch
request.getRequestDispatcher("firstJsp.jsp");
dispatch.forward(request, response);
//en contract :
request.getRequestDispatcher("firstJsp.jsp").forward(request,response);
Un
objet
de
obtenu
en
invoquant
la
3.2 Transmission
des
attributs :
mthodes
setAttribute() et getAttribute()
Pour transmettre des variables de la servlet la jsp , le principe est trs
simple ; Il suffit d'appeler la mthode setAttribute() de l'objet requte pour
crer un attribut dans une requte depuis une servlet, Cette mthode
prend en paramtre le nom que l'on souhaite donner l'attribut suivi de
l'objet lui-mme, et il suffit d'appeler la mthode getAttribute() pour en
rcuprer un depuis une JSP
Exemple :
Dans lexemple suivant on rcupre bien un objet nomm test.
Public void doGet( HttpServletRequest request, HttpServletResponse
response ) throws ServletException, IOException{
String message = "Transmission de variables : OK !";
request.setAttribute( "testAttribut", message );
request.getRequestDispatcher(" test.jsp" ).forward( request, response );
}
Code : test.jsp
<body>
<p>Ceci est une page gnre depuis une JSP. </p>
<p>
<%
String attribut = (String) request.getAttribute("testAttribut");
out.println( attribut );
%>
</p>
</body>
</html>
3.3 Transmission
des
paramtres :
mthode
getParameter()
Un url peut prendre plusieurs formes :
void
doGet(
HttpServletRequest
request,
"test.jsp
<head>
<title>Test</title>
</head>
<body>
<p>Ceci est une page gnre depuis une JSP. </p>
<p>
<%
String attribut = (String) request.getAttribute("testAttribut");
out.println( attribut );
%>
</p>
</body>
</html>
4
4.1
Lobjectif est dafficher la liste des tudiants partir dune liste des
promos .
Formulaire : index.html
<html>
<head>
Controller : SelectPromo.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SelectPromo extends javax.servlet.http.HttpServlet
implements javax.servlet.Servlet{
//...
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
String promoName = request.getParameter("promo");
//...
}
}
Configuration : web.xml
<web-app>
<display-name>MVC</display-name>
<servlet>
<description></description>
<servlet-name> SelectPro</servlet-name>
<servlet-class>SelectPromo</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name> SelectPro</servlet-name>
<url-pattern> /SelectPromo</url-pattern>
</servlet-mapping>
</web-app>
tape 3:
3. Le servlet controller interroge le model sur ing2
4. Le model retourne au controller le rsultat correspondant
Model : Promo.java
import ...;
public class Promo{
public List<String> getPromo(String promo){
List<String> promoList= new ArrayList<String>();
if(promo.equals("ing1")){
promoList.add("Donald Duck");
promoList.add("Minnie Mouse");
promoList.add("Pluto"); //...
} else if (promo.equals("ing2")){
promoList.add("Mickey Mouse");
promoList.add("Daisy Duck");
promoList.add("Goofy");//...
} else{ return null;}
return promoList;
}
}
tape 4 :
5. Le controller utilise les donnes du model pour sa rponse
6. Le controller transmet sa rponse la view (JSP)
4.2 Exemple 2 :
Ici, nous avons un formulaire :
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class FormulaireAction extends HttpServlet {
public void doGet( HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException{
request.getRequestDispatcher("formResult.jsp").forward(request,
response);
}
public void doPost( HttpServletRequest request,
HttpServletResponse response)
throws IOException, ServletException{
doGet(request, response);
}
}
Code : XML-web.xml
<web-app>
<servlet>
<servlet-class>com.servlet.test.Formulaire1</servlet-class>
<servlet-name>FirstForm</servlet-name>
</servlet>
<servlet>
<servlet-class>com.servlet.test.FormulaireAction</servlet-class>
<servlet-name>FormAction</servlet-name>
</servlet>
<servlet-mapping>
<servlet-name>FirstForm</servlet-name>
<url-pattern>/form</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>FormAction</servlet-name>
<url-pattern> firstFormAction.do</url-pattern>
</servlet-mapping>
</web-app>
En rsum
Ce chapitre a dcrit tape par tape limplmentation de pattern MVC en
imbriquant un servlet,une jsp et un simple objet java. Nous allons dans ce
qui suit utiliser les javaBean dans cette architecture.
Chapitre V
JavaBeans et Scope
OBJECTIFS
Lobjectif de ce chapitre est de :
JavaBeans
JavaBeans
sont
des
classes
Java(POJO)
qui
suivent
certaines
conventions:
Ne
(getters et setters) ;
Si une classe possde une mthode getTitle qui retourne un String, on
doivent
pas
avoir
dattributs
publics,une
bonne
pratique
Pour faire cela dans une Servlet, a ne pose pas de problme particulier, le
bean est trait comme un objet Java standard.
Cependant, dans une JSP, l'utilisation des balises de scriptlets n'est pas
trs propre , on utilisera plutt l'une des manires suivantes :
balises
<jsp:setProperty>
utilisation des EL (JSP 2.0) (si le serveur le supporte) : ${...}
JSP
(JSP
1.2)
<jsp:useBean>,
<jsp:getProperty>,
au
choix
de
ltape
4.
La
JSP
utilise
ensuite
=> La JSP ne cre pas ou ne modifie pas les beans: cest la vue du MVC.
24Exemple
Modle
package model;
public class PersonneBean {
private String nom;
private String prenom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
}
Contrleur
import model.PersonneBean;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
protected void doGet(...)
{
String urlVue = "vue.jsp"; // URL de la vue appeler
String nom = request.getParameter("..."); // Rcupration du champs nom
//(par exemple via un formulaire)
String prenom = request.getParameter("..."); // Rcupration du champs
prenom
if(nom == null || nom.trim().equals("")) {
// Erreur : nom non saisi
}
else if(prenom == null || prenom.trim().equals("")) {
// Erreur : prenom non saisi
}
else // Cas sans erreur : on traite la requte, et cre les beans ncessaires
{
PersonneBean bean = new PersonneBean(); // Instanciation d'un bean
// de type PersonneBean
bean.setNom(nom); // Affectation de la proprit nom
bean.setPrenom(prenom); // Affectation de la proprit prenom
request.setAttribute("myBean", bean); // Attacher ce bean au
// scope de requte
}
// Forward la vue:
request.getRequestDispatcher(urlVue).forward(request, response);
}
}
En MVC, les beans sont cres/modifis par le contrleur, en fonction de la
requte du client et pas par la vue.
Vue
<%@ page language="java" contentType="text/html; %><html>
<head>
<title>Ma Vue</title>
</head>
<body>
Salut ${myBean.prenom} ${myBean.nom} !
</body>
</html>
En MVC, les beans sont uniquement consults par la vue, pour faire
son affichage ;
scope
par
une
servlet
avec
un
setAttribute):
{nomBean.property} ;
nomBean est celui dfini lors du setAttribute fait par la servlet ;
property est le nom de la proprit que l'on veut accder (attention
aux normes d'criture Java => respectez la casse).
serveur) ;
Application : ce scope est cr automatiquement au lancement du
projet JEE sur le serveur. Les beans qu'il contient sont partags par
tous les clients et ne sont dtruit que lors de l'arrt/rechargement du
RequestDispatcher
dispatcher
request.getRequestDispatcher("SomePage.jsp");
dispatcher.forward(request, response);
JSP 1.2
<jsp:useBean
id="key"
type="somePackage.ValueObject"
scope="request" />
<jsp:getProperty name="key" property="someProperty" />
JSP 2.0 (utilisation des EL)
${key.someProperty}
Exemple simple
Servlet
Customer
myCustomer=
new
Customer(request.getParameter("customerID"));
request.setAttribute("customer", myCustomer);
RequestDispatcher
dispatcher=
request.getRequestDispatcher("SomePage.jsp");
dispatcher.forward(request, response);
JSP 1.2
<jsp:useBean
id="customer"
type="somePackage.Customer"
scope="request" />
<jsp:getProperty name="customer" property="firstName"/>
JSP 2.0
${customer.firstName}
dispatcher=
request.getRequestDispatcher("SomePage.jsp");
dispatcher.forward(request, response);
JSP 1.2
<jsp:useBean
id="key"
type="somePackage.ValueObject"
scope="session" />
<jsp:getProperty name="key" property="someProperty" />
JSP 2.0
${key.someProperty}
En rsum
Ce court chapitre a prsent un type d'objet un peu particulier : le
JavaBean, et limplmentation de pattern MVC en utilisant les trois
composants : Jsp, Servlet et JavaBean.
TRAVAUX DIRIGEES
Travaux dirigs
OBJECTIFS
TDN 1
TD N1 : Les bases
Objectifs
Se rappeler des architectures 1-tiers, 2-tiers, 3-tiers et MVC ;
Maitriser la plateforme java EE.
nomme .,;
un ensemble .,qui peut tre obtenu et utilis sparment.
8. Quelle est la diffrence entre J2EE, JAVA et Javascript ?
9. Quel est le rle d'un serveur d'applications ?
10.
Que sont les JSPs, les Servlet et les EJB ?
11.
Quelles diffrences et cas d'utilisation d'un WAR, dun JAR et
d'un EAR pour livrer une application ?
12.
Qu'est ce qu'un conteneur? Quelle diffrence avec le serveur
dapplication?
TDN 1
13.
Quel
serveur
soccupe
de
lexcution
des
composants
CORRECTION TDN 1
Les traitements :
dernires
2. Citez et expliquez les diffrentes architectures n-tiers (1-tiers, 2tiers, 3-tiers)
Le modle 3-Tiers :
CORRECTION TDN 1
Une architecture logiciel client/serveur est une architecture 2Tiers qui : repartie la prsentation, les services mtier et la
persistance d'un systme informatique sur deux postes diffrentes
(une nomme client et l'autre serveur).
Client lger
Client lourd
CORRECTION TDN 1
Client riche
CORRECTION TDN 1
CORRECTION TDN 1
J2EE est bas sur J2SE (Java 2 Standard Edition) qui contient les
API de base de Java.
qui
permettent
ensemble
des
solutions
pour
le
CORRECTION TDN 1
9.
10.
CORRECTION TDN 1
Quel
serveur
soccupe
de
lexcution
des
composants
CORRECTION TDN 1
16.
module EJB)
TDN 2
Exercice 1
1. Donnez les deux diagrammes reprsentant le cycle de vie dun
servlet dans son conteneur.
2. Donnez un schma expliquant le fonctionnement de conteneur
lorsquil reoit deux requtes demandant la mme ressource
3. Donnez le diagramme reprsentant le cycle de vie dune JSP dans
son conteneur.
Exercice 2
TDN 2
Exercice 4
CORRECTION TDN 2
CORRECTION TDN 2
CORRECTION TDN 2
CORRECTION TDN 2
Exercice 2
1. crire un programme qui crit 500 fois Je dois faire des sauvegardes
rgulires de mes fichiers..
response.setContentType("text/html");
out.println(i
de mes fichiers<BR>");
}
}
CORRECTION TDN 2
response.setContentType("text/html");
int n=20;
long f=1;
out.println (n+"!="+f);
}
}
response.setContentType("text/html");
out.println("<TABLE BORDER><TR><TD></TD>")
<%
CORRECTION TDN 2
out.println("\t<TH>"+i+"</TH>");
out.println("</TR>");
out.println("<TR>\n\t<TH>"+i+"</TH>");
out.println("\t<TD ALIGN=\"center\">"+(i*j)+"</TD>");
out.println("</TR>");
out.println("</TABLE>");
}
}
response.setContentType("text/html");
CORRECTION TDN 2
<TABLE><TR>+
<TD><INPUT NAME=nom></TD>+
</TR><TR>+
<TD><INPUT NAME=age></TD>+
</TR><TR>+
</TR></TABLE>+
</FORM>)
String nom=request.getParameter("nom");
String age=request.getParameter("age");
if (nom!=null) {
}
}
CORRECTION TDN 2
response.setContentType("text/html");
out.println(<B>Le formulaire :</B><BR>
<FORM METHOD=get>
<TABLE><TR VALIGN=top>
<TD ALIGN=right>Sexe</TD>
<TD><INPUT
NAME=sexe
VALUE=M
TYPE=radio
CHECKED>Monsieur<BR>
<INPUT
NAME="sexe"
VALUE="Mme"
TYPE=radio>Madame</TD>
</TR><TR>
<TD ALIGN="right">Nom</TD>
<TD><INPUT NAME="nom"></TD>
</TR><TR>
String nom=request.getParameter("nom");
String sexe=request.getParameter("sexe");
if (sexe!=null) {
CORRECTION TDN 2
response.setContentType("text/html");
out.println("<B>Le formulaire:</B><BR>
<FORM METHOD=get>
<CENTER>
<SELECT NAME=par>
<OPTION VALUE=+>+
<OPTION VALUE=->-
<OPTION VALUE=*>*
<OPTION VALUE=/>/
</SELECT>
<BR>
</CENTER>
</FORM>
CORRECTION TDN 2
<P>
</FORM>);
String aStr=request.getParameter("a");
String bStr=request.getParameter("b");
String par=request.getParameter("par");
if (par!=null) {
out.println("<P><B>Le traitement</><BR>") ;
int a=Integer.parseInt("0"+aStr);
int b=Integer.parseInt("0"+bStr);
<TT>"+a,par,b+"=");
if (par.equals("+")) {
out.println(a+b);
} else if (par.equals("-")) {
out.println(a-b);
} else if (par.equals("*")) {
out.println(a*b);
} else if (b==0) {
out.println("Impossible..");
} else {
out.println(a/b);
out.println("</TT></CENTER>") ;
CORRECTION TDN 2
}
}
Exercice 4
<%!
String entete(String titre) {
return "<HTML><HEAD>\n<TITLE>Premiers
exercices de JSP : "
+titre
+"</TITLE>\n</HEAD><BODY>\n"
+"<H1>Premiers exercices de JSP :
"+titre+"</H1>";
}
String pied() {
return "</BODY></HTML>";
}
%>
1. crire un programme qui crit 500 fois Je dois faire des sauvegardes
rgulires de mes fichiers..
<\%=entete("1er exercice")\%>
<\%
out.println(i
fichiers<BR>");
\%>
<\%=pied()\%>
CORRECTION TDN 2
<%=entete("3me exercice")%>
<%
int n=20;
long f=1;
out.println (n+"!="+f);
%>
<%=pied()%>
<%=entete("4me exercice")%>
<TD></TD>
<%
out.println("\t<TH>"+i+"</TH>");
out.println("</TR>");
out.println("<TR>\n\t<TH
BGCOLOR=\""+couleur+"\">"+i+"</TH>");
out.println("\t<TD ALIGN=\"center\">"+(i*j)+"</TD>");
out.println("</TR>");
CORRECTION TDN 2
%>
</TABLE>
<%=pied()%>
<%=entete("6me exercice")%>
<B>Le formulaire :</B><BR>
<FORM METHOD="get">
<TABLE><TR>
<TD><INPUT NAME="nom"></TD>
</TR><TR>
<TD><INPUT NAME="age"></TD>
</TR><TR>
</FORM>
<%
String nom=request.getParameter("nom");
String age=request.getParameter("age");
if (nom!=null) {
%>
<P><B>Le traitement :</B><BR>
CORRECTION TDN 2
<%
%>
<%=pied()%>
<%=entete("8me exercice")%>
<B>Le formulaire :</B><BR>
<FORM METHOD="get">
<TABLE><TR VALIGN="top">
<TD ALIGN="right">Sexe</TD>
<TD><INPUT
NAME="sexe"
VALUE="M"
TYPE="radio"
CHECKED>Monsieur<BR>
<INPUT
NAME="sexe"
VALUE="Mme"
TYPE="radio">Madame</TD>
</TR><TR>
<TD ALIGN="right">Nom</TD>
<TD><INPUT NAME="nom"></TD>
</TR><TR>
</FORM>
<%
CORRECTION TDN 2
String nom=request.getParameter("nom");
String sexe=request.getParameter("sexe");
if (sexe!=null) {
%>
<P><B>Le traitement :</B><BR>
<%
%>
<%=pied()%>
<%=entete("10me exercice")%>
<B>Le formulaire :</B><BR>
<FORM METHOD="get">
<CENTER>
<SELECT NAME="par">
<OPTION VALUE="+">+
<OPTION VALUE="-">-
<OPTION VALUE="*">*
<OPTION VALUE="/">/
</SELECT>
<BR>
CORRECTION TDN 2
</CENTER>
</FORM>
<TD>
</TD>
</TABLE></CENTER>
</FORM>
<%
String aStr=request.getParameter("a");
String bStr=request.getParameter("b");
String par=request.getParameter("par");
if (par!=null) {
%>
<P><B>Le traitement </><BR>
<%
int a=Integer.parseInt("0"+aStr);
int b=Integer.parseInt("0"+bStr);
%>
<TT><%=a%><%=par%><%=b%>=<%
if (par.equals("+")) {
out.println(a+b);
} else if (par.equals("-")) {
out.println(a-b);
CORRECTION TDN 2
} else if (par.equals("*")) {
out.println(a*b);
} else if (b==0) {
out.println("Impossible..");
} else {
out.println(a/b);
}
%></TT></CENTER>
<%
%>
<%=pied()%>
TDN 3
Exercice 1
application
permet
lutilisateur
de
slectionner
une
index.html :
<html>
<head>
<title>AREL V6.0</title>
</head>
<body>
<option>ing1</option>
<option>ing2</option>
</body>
</html>
SelectPromotion.java :
import java
TDN 3
implements javax.servlet.Servlet {
HttpServletResponse response)
request.setAttribute("promo", result);
RequestDispatcher
view
request.getRequestDispatcher("result.jsp");
view.forward(request, response);
Promo.java :
package arel;
import java.util.ArrayList;
import java.util.List;
if (promo.equals("ing1")) {
promoList.add("Donald Duck");
promoList.add("Minnie Mouse");
promoList.add("Pluto");
//...
} else if (promo.equals("ing2")) {
promoList.add("Mickey Mouse");
promoList.add("Daisy Duck");
promoList.add("Goofy");
TDN 3
//...
} else {
return null;
return promoList;
result.jsp :
pageEncoding="ISO-8859-1"%>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Result</title>
</head>
<body>
<%
List<String>
promoList
(List<String>)request.getAttribute("promo");
Iterator it = promoList.iterator();
while(it.hasNext()) {
%>
</body>
TDN 3
</html>
index.jsp :
<%@ page import="java.util.*" %>
pageEncoding="ISO-8859-1"%>
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>AREL V6.0</title>
</head>
<body>
<option>ing1</option>
<option>ing2</option>
TDN 3
<%
List<String>
promoList
(List<String>)request.getAttribute("promo");
Iterator it = promoList.iterator();
while(it.hasNext()) {
%>
</body></html>
Exercice 2
Exercice 3
ny
pas
de
nom
antrieur,
on
affiche
un
message
davertissement.
CORRECTION TDN 3
web.xml
<web-app>
<display-name>MVC</display-name>
<servlet>
<servlet-name> X </servlet-name>
</servlet>
<servlet-mapping>
<servlet-name> X </servlet-name>
</servlet-mapping>
</web-app>
arel/SelectPromo.java
RequestDispatcher
view
request.getRequestDispatcher("index.jsp") ;
3. Lorsque lon tente daccder la JSP index.jsp, une erreur survient.
Trouvez cette erreur et corrigez-la.
CORRECTION TDN 3
<%
List<String>
promoList
(List<String>)request.getAttribute("promo");
if(promoList!=null)
Iterator it = promoList.iterator();
while(it.hasNext())
%>
${requestScope["promo"]}
Exercice 2
Index.html
<html>
<head>
<title>MVC Examples</title>
</head>
<body>
<fieldset>
<legend>Random Number</legend>
CORRECTION TDN 3
<form action="./Rand">
</form>
</fieldset>
</body>
</html>
Le modle
package modele;
num = 0;
/**
* Getters et Setters
*/
return(num);
CORRECTION TDN 3
num = number;
Le contrleur
RandomNumberServlet
import ..
import modele.NumberBean;
public
void
HttpServletResponse
doGet(HttpServletRequest
response)
throws
request,
ServletException,
IOException
NumberBean
bean
RanUtils.getRandomNum(request.getParameter("range"));
=
//
Je
RequestDispatcher
dispatcher
dispatcher.forward(request, response);
import modele.NumberBean;
CORRECTION TDN 3
double range;
try
range = Double.parseDouble(rangeString);
catch(Exception e)
range = 10.0;
n.setNumber(Math.random() * range);
return n;
Web.xml
<web-app>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>NombreAleatoire</display-name>
<servlet-name>RandomNumber</servlet-name>
<servlet-class>RandomNumberServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomNumber</servlet-name>
CORRECTION TDN 3
<url-pattern>/Rand</url-pattern>
</servlet-mapping>
</web-app>
Vue.jsp
<%@ page language="java" contentType="text/html"%>
<html>
<head>
<title>Random Number</title>
</head>
<body>
</body>
</html>
Exercice 3
ny
pas
de
nom
antrieur,
on
affiche
un
message
davertissement.
Index.html
<html>
<head>
CORRECTION TDN 3
<title>MVC Examples</title>
</head>
<body>
<fieldset>
<legend>Register</legend>
<form action="./Register">
</form>
</fieldset>
</body>
</html>
Le modle
package modele;
/**
* Getters et Setters
*/
CORRECTION TDN 3
return(firstName);
if (!isMissing(firstName))
this.firstName = firstName;
return(lastName);
if (!isMissing(lastName))
this.lastName = lastName;
CORRECTION TDN 3
Le contrleur
Import
import modele.NameBean;
NameBean bean =
(NameBean)request.getSession().getAttribute("nameBean"); // Je
rcupre le bean dans le scope de session
RequestDispatcher dispatcher =
request.getRequestDispatcher("vue.jsp"); // Je forward ma vue
dispatcher.forward(request, response);
CORRECTION TDN 3
Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>RandomNumber</servlet-name>
<servlet-class>RegistrationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>RandomNumber</servlet-name>
<url-pattern>/Register</url-pattern>
</servlet-mapping>
</web-app>
La vue
<%@ page language="java" contentType="text/html%>
<html>
<head>
<title>Inscription</title>
</head>
<body>
CORRECTION TDN 3
</body>
</html>
DEVOIR SURVEILLE
Dpartement Technologies de
lInformatique
Institut
Suprieur des Etudes
Technologiques de Kasserine
DEVOIR SURVEILLE
Enseignants : BOUZIDI FZ
Groupes :
Exer
cice
1(6
points)
1. Schmatiser les architectures 3-tiers et MVC (4 points)
2. Peut on combiner ces deux architectures ?si oui, comment ? (2
point)
Exercice 2 (6 points)
DEVOIR SURVEILLE
Exercice 3 (8 points)
EXAMEN
Dpartement Technologies de
lInformatique
Enseignants :
EXAMEN
Groupes : MDW31
BOUZIDI FZ
Dure : 1h30
Nb pages:3
Docs : Non
<web-app>
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>somepackage.Controller</servlet-class>
</servlet>
<XXXXXXXXXX>
<servlet-name>Controller</servlet-name>
<url-pattern>/Controller</url-pattern>
</XXXXXXXXXX>
</web-app>
A. <servlet-url>
B. <servlet-pattern>
C. <servlet-mapping>
D. <servlet-uri>
2. Quelles sont les mthodes utilises par un servlet pour grer les don
nes envoyes par un client via un formulaire HTML ?
EXAMEN
A. ServletRequest.doHead()
B. HttpServlet.doPost()
C. ServletRequest.doGet()
D. HttpServlet. doGet()
E. ServletRequest.doPost()
F. ServletRequest.doForm()
D. Il na rien faire
EXAMEN
7. Avec le code suivant dans une JSP, comment sortir "Hello World" ?
<%
request.setAttribute("hello", "Hello");
%>
A. ${ hello } ${ world }
<%
request.setAttribute("msg", "Hola");
%>
A. Hola
C. une NullPointerException
A. out
B. request
C. response
D. page
E. pageContext
F. contextParam
EXAMEN
10.
A. <%= 5 %>
Si
les
champs
de
formulaire
sont
valides
le
rsultat
EXAMEN
REFERENCES
Ntographie
[1] : http://gardeux-vincent.eu/Cours.php
[2]
http://jlafosse.developpez.com/java/developpement-n-
tiers/plate-forme-java-EE/
[3]
http://tahe.ftp-developpez.com/fichiers-
archive/baseswebmvcjava.pdf
[4]
http://docs.oracle.com/javaee/6/tutorial/doc/bnaay.html#bnabc
[5] :http://fr.openclassrooms.com/informatique/cours/creez-
votre-application-web-avec-java-ee
[6]
http://jmdoudoux.developpez.com/cours/developpons/java/chapj2ee-javaee.php
[7] : http://dept25.cnam.fr/PROJET3I/DOC/J2EE.pdf
[8]:http://gardeux-vincent.eu/Cours/JEE/Activite%201/Java
%20EE%20-%20Cours%201.pdf
[9] : http://uploads.siteduzero.com/pdf/285022-creez-votre-
application-web-avec-java-ee.pdf
[10]
http://alwin.developpez.com/articles/java/archi-multi-
tiers/
[11] : http://saidf.hebergratuit.com/TDI/Java/
[12] : http://www.jmdoudoux.fr/java/dej/chap-j2ee-javaee.htm
[13]
http://blog.paumard.org/cours/servlet/chap05-jsp-
scriptlet.html
Bibliographie
Edition ENI.