Vous êtes sur la page 1sur 31

Institut Supérieur des Etudes Technologiques de Mahdia

Unité d’Enseignement :
Environnements de
Développement

BEN ABDELJELIL HASSINE Mouna


m.bnaj@yahoo.fr

Développement des systèmes d’Information

2
Syllabus du cours

Objectifs Généraux
Comprendre les architectures logicielles ainsi que leurs composants;
Comprendre les principaux patrons de conception (Design Patterns)
Etre capable de mettre en oeuvre certains patrons de conception
Décrire une architecture logicielle et produire la documentation
correspondante
Pré-requis
POO, UML, JAVA, GL1&2
3
Organisation du cours

I. Fondements de l’architecture logicielle


II. Styles Architecturaux
III.Architecture J2EE
IV. Les Patrons de Conception
V. Conception Architecturale
VI. Thèmes Connexes de GL

4
Chapitre III:

Architecture J2EE

Unité d’enseignement: Environnements de Développement


5
Partie2:

Servlet/JSP

Unité d’enseignement: Environnements de Développement

6
PLAN Veuillez nous suivre…

Packaging d’une
Servlet application web

JSP Exemple MVC avec


JSP/Servlet
Définition
Servlet Rôle
Fonctionnement
7
Cycle de vie

L'API Java Servlet est une application Java qui permet de générer
dynamiquement des données au sein d'un serveur HTTP.
Au même titre nous trouvons: CGI (Common Gateway Interface),
Langages de script coté serveur PHP, ASP (Active Server Pages)
Une Servlet s’exécute dans un moteur de Servlet ou
conteneur de Servlet permettant d’établir le lien entre la Servlet et
le serveur Web
Un serveur d'application permet de charger et d'exécuter les
servlets dans une JVM. C'est une extension du serveur web.

Définition
Servlet Rôle
Fonctionnement
8
Cycle de vie

Un servlet lit les données envoyées par un client Web (transmises


par le serveur)
Données explicites (Formulaire)
Données implicites (Request Header)

Il génère un résultat;
Il envoi le résultat au client ;
Données explicites (Page HTML)
Données implicites (Response Header, Status code)
Définition
Servlet Rôle
Fonctionnement
9
Cycle de vie

Lire toutes les données envoyées par l'utilisateur : saisies dans un


formulaire sur une page Web.

Chercher d'autres informations sur la requête, à l'intérieur de cette


requête HTTP : détails sur les capacités du navigateur, sur les
cookies, sur le nom de l'hôte du programme envoyant la requête, etc.

Générer des résultats : Ce processus peut nécessiter une


communication avec la base de données, ou en invoquant une
application existante, ou encore en calculant directement la réponse.

Formater le résultat dans un document : Dans la plupart des


cas, cela impliquera l'incorporation des informations dans une page
HTML.

Définition
Servlet Rôle
Fonctionnement
10
Cycle de vie

Lire toutes les données envoyées par l'utilisateur : saisies dans un


formulaire sur une page Web.

Chercher d'autres informations sur la requête, à l'intérieur de cette


requête HTTP : détails sur les capacités du navigateur, sur les
cookies, sur le nom de l'hôte du programme envoyant la requête, etc.

Générer des résultats : Ce processus peut nécessiter une


communication avec la base de données, ou en invoquant une
application existante, ou encore en calculant directement la réponse.

Formater le résultat dans un document : Dans la plupart des


cas, cela impliquera l'incorporation des informations dans une page
HTML.
Définition
Servlet Rôle
Fonctionnement
11
Cycle de vie

Le serveur reçoit la requête http qui nécessite une servlet de la part


d’un navigateur web,

Si c'est la première sollicitation de la servlet, le serveur


l'instancie. Les servlets sont stockées (sous forme de fichier .class)
dans un répertoire particulier du serveur.

Le serveur crée un objet qui représente la requête http et un


objet qui contiendra la réponse et les envoie à la servlet

La servlet crée dynamiquement la réponse sous forme de page html


transmise via un flux dans l'objet contenant la réponse.
le serveur récupère l'objet réponse et envoie la page html au client.

Définition
Servlet Rôle
Fonctionnement
12
Cycle de vie

Client Serveur Application


Définition
Servlet Rôle
Fonctionnement
13
Cycle de vie

Le serveur reçoit la requête http qui nécessite une servlet de la part


d’un navigateur web,

Si c'est la première sollicitation de la servlet, le serveur


l'instancie. Les servlets sont stockées (sous forme de fichier .class)
dans un répertoire particulier du serveur.

Le serveur crée un objet qui représente la requête http et un


objet qui contiendra la réponse et les envoie à la servlet

La servlet crée dynamiquement la réponse sous forme de page html


transmise via un flux dans l'objet contenant la réponse.
le serveur récupère l'objet réponse et envoie la page html au client.

Définition
Servlet Rôle
Fonctionnement
14
Cycle de vie

Tous les servlets ont le même cycle de vie


Le container charge le servlet
La fonction init() est appelée (initialisation de variables,
connection à des bases de données)
Le servlet répond aux requêtes des clients
Le container détruit le servlet
La fonction destroy() est appelée (fermeture des connections)
Définition
Servlet Rôle
Fonctionnement
15
Cycle de vie

Première Servlet 16

Le servlet HelloWorld
Un servlet surcharge la classe HttpServlet
Il doit implanter au moins une des méthodes
• doGet
• doPost
• doPut
• doDelete
Première Servlet 17
Ne pas oublier d'importer la
bibliothèque Java des Servlets

Utile pour des requêtes HTTP d


e type GET
Accès via un hyperlien

Réponse sous
format HTML

Utile pour des requêtes HTTP d


e type POST
Accès via formulaire

Salut le monde!
Le résultat sur le client

Servlet: du Générique à HTTP 18

Un Servlet doit implémenter les interfaces javax.servlet.Servlet


et javax.servlet.ServletConfig

Plus simplement l'API Servlet fournit deux classes qui proposent


déjà une implémentation
GenericServlet : pour la conception de Servlets indépendantes du
protocole
HttpServlet : pour la conception de Servlets spécifiques au
protocole HTTP
Servlet: du Générique à HTTP 19

Servlet: du Générique à HTTP 20

Dans la suite du cours nous allons utiliser uniquement des


Servlets qui réagissent au protocole HTTP d'où l'utilisation de
la classe HttpServlet
HttpServlet redéfinit la méthode service(…)
service(…) lit la méthode (GET, POST, …) à partir de la requête
Elle transmet la requête à une méthode appropriée de
HttpServlet destinée à traiter le type de requête (GET, POST, …)
Les paramètres d’une requête 21

Les paramètres d'une requête sont accessibles dans l'objet


(HttpServletRequest)
request.getParameter("paramname");
Il est possible de récupérer tous les noms des paramètres
request.getParameterNames()

l’interface HttpServletRequest 22

Fournit les informations sur la requête du client au serveur


Principales méthodes (pour l'instant):
•String getParameter(String name)
•EnumerationgetParameterNames():Retourne une énumération
de tous les noms de paramètres
•String[] getParameterValues(): Retourne un tableau contenant
toutes les valeurs des paramètres
•String getHeader(String name)
•EnumerationgetHeaderNames():Retourne une énumération de
tous les noms des propriétés du header
•String[] getHeaderValues():Retourne un tableau de toutes les
valeurs du header
L'interface HttpServletResponse 23

Objet fournissant les services pour envoyer la réponse à un client.


Les principales méthodes sont:
•java.io.PrintWriter getWriter(): pour récupérer un printWriter qui
permet d'envoyer du texte au client
•public void setContentLength(int len): positionne le Content-Length
Header
•public void setContentType(java.lang.String type):positionne le
Content-Type header (exemple text/html)
•public void sendError(int sc, java.lang.String msg) throws
java.io.IOException: envoi un message d'erreur au client
•public void sendRedirect(String url):redirige la sortie vers l’url
indiqué
•public void setHeader(java.lang.String name, java.lang.String value)

L'interface HttpServletResponse 24

Exemple 1 : écrit un message de type TEXT au client


Utilisation de la méthode PrintWriter getWriter()

public class HelloWorldPrintWriter extends HttpServlet {


public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/plain");
PrintWriter out = res.getWriter();
out.println("Premier Message");
out.println("Coucou voilà comment écrire un message");
out.println("Second Message");
}
}
L'interface HttpServletResponse 25

Exemple 2 : effectue une redirection vers un site web


Utilisation de la méthode sendRedirect(String)

public class SendRedirect extends HttpServlet {


public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.sendRedirect("http://www.google.fr");
}}

Architecture de développement
26
d’une application web
Une application web est contenue dans un répertoire physique
sur le serveur
Une application web possède une hiérarchie de répertoires
et de fichiers
Le fichier web.xml 27

Le fichier web.xml regroupe les informations de fonctionnement


de l'application WEB (description de déploiement du contexte)
<?xml version="1.0" encoding="UTF-8"?>
e du fichier web.xml <web-app xmlns="http://java.sun.com/xml/ns/j2ee" Balise principale
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
de description de version="2.4">
<display-name>Application WEB affichant HelloWorld</display-name>
e de description <servlet>
Nom de la Servlet
<servlet-name>HelloWorldServlet</servlet-name>
"Identification"
<servlet-class>HelloWorld</servlet-class>
</servlet> Classe de la Servlet
finition d'un chemin <servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name> Nom de la Servlet
finition du chemin virtuel <url-pattern>/msg.hello</url-pattern> considéré
</servlet-mapping> "Identification"
</web-app>

Le fichier web.xml 28

Possibilité de décrire dans le fichier web.xml le fonctionnement de


plusieurs Servlets
<?xml version="1.0" encoding="UTF-8"?>
<web-app ...>
<display-name>Servlets affichant différemment le message
HelloWorld
</display-name>
<servlet>
<servlet-name>HelloWorldServlet</servlet-name>
application WEB est <servlet-class>HelloWorld</servlet-class>
</servlet>
ici composée de deux <servlet>
<servlet-name>HelloWorldPrintWriter</servlet-name>
<servlet-class>HelloWorldPrintWriter</servlet-class>
</servlet>
<servlet-mapping>
on différentes <servlet-name>HelloWorldServlet</servlet-name>
appeler la Servlet <url-pattern>*.toutpourservlet</url-pattern>
</servlet-mapping>
HelloWorldServlet <servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/msg.hello</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloWorldPrintWriter</servlet-name> Une seule façon d’appeler
<url-pattern>/printwriter.html</url-pattern> la Servlet
</servlet-mapping> HelloWorldPrintWriter
</web-app>
Les paramètres d’initialisation 29

Les paramètres d’initialisation sont définis dans le fichier web.xml de


l’application WEB
...
<web-app ...>
<display-name>Servlet simulant un compteur</display-name>
<servlet>
<servlet-name>InitConfigFileCounterServlet</servlet-name>
Balise qui détermine
le nom du <servlet-class>InitConfigFileCounterServlet</servlet-class>
paramètre <init-param>
<param-name>initial_counter_value</param-name>
Balise qui détermine la
valeur du paramètre
<param-value>50</param-value>
<description>Valeur initiale du compteur</description>
</init-param>
</servlet> Balise qui explique
... le rôle du paramètre
</web-app> (optionnelle)

Servlet et Session 30

Comment maintenir l’état d’un client au cours d’une série de


requêtes d’un même utilisateur pendant un temps donné ?
HTTP est “stateless”
Comment identifier le client ?
Où mettre les données de la session ?
La gestion des sessions utilise les techniques classiques
•Urlrewriting
•Cookies
•Champs cachés dans les formulaires
L'API HttpServlet fournit des fonctions pour gérer les sessions
L'implantation est transparente pour l'utilisateur
Session & HttpServletRequest 31

C'est le paramètre request qui maintient les informations sur


la session
Les méthodes sont
•HttpSession request.getSession(boolean flag)
Flag=true : retourne l'objet session courant ou en crée
un s'il n'y en a pas.
Flag=false : Retourne l'objet session courant ou null s'il
n'y en a pas
•isRequestedSessionIdValid()
Vrai si l'id de la session est valide dans le contexte
courant
•isRequestedSessionIdFromCookie()
Vrai si l'id de la session vient d'un cookie
•isRequestedSessionIdFromURL()
Vrai si l'id de la session vient d'un URL

Session & HttpServletRequest 32

Création de la session

Requête dans la même session


L’objet HttpSession 33

L'objet HttpSession permet de conserver des valeurs entre des appels


d'un client
Les principales méthodes sont:
Object getAttribute(String name):Récupère la valeur de l'attribut par son
nom
Enumeration getAttributeNames():Retourne la liste de tous les attributs
Void setAttribute(String name, Object value): Ajoute un attribut à la
session
String getId():Retourne l'identifiant de la session
Void invalidate(): Invalide la session
Long getCreationTime()
Long getLastAccessedTime()
Long getMaxInactiveInterval()
ServletContext getServletContext()

Conclusion 34

Servlets: étendent le comportement des serveurs Web avec des


programme Java
Portabilité, facilité d'écriture (Java)
Définition du code, du paquetage, du déploiement
Persistance des données dans les servlets
Servletchargée et instanciée une seule fois
Exécutée en // avec des processus légers (threads)
Mais :
Difficile d’écrire du code HTML dans du code Java
Introduction de la technologie Java Server Pages (JSP)
Pas de mécanisme intégré de distribution
Introduction de la technologie Enterprise Java Beans(EJB)
JSP: Java Server Page 35

Java Server Pages : Technologie permettant la génération de pages web


dynamiques.
Les JSP permettent d'introduire du code java dans des balises prédéfinis
à l'intérieur d'une page HTML.
La technologie JSP mélange la puissance de java côté serveur et la
facilité de mise en page d'HTML côté client.
Les JSP sont basées sur les servlets.
Au premier appel de la page JSP, le moteur de JSP crée et compile
automatiquement une servlet qui permet la génération de la page web.
Le code HTML est repris intégralement dans la servlet.
Le code java est inséré dans la servlet.
La Servlet générée est sauvegardée puis exécutée.

JSP: Compilation 36

Traitement d’une JSP par le serveur


Une JSP est compilée en servlet à la
première utilisation
Se transforme en classe implémentant
javax.servlet.jsp.HttpJspPage
JSP: Fonctionnemnet 37

1. JSP (Html avec Java)

2. JSP compilée en Servlet

3. Du code html

4. Page finale

JSP: Syntaxe 38

Données statiques comme le HTML

Directives

Scripts et Variables

Actions

Balises personnalisées
Directives JSP 39

Contrôlent comment le compilateur doit générer la servlet


générée à partir de la page JSP
Elles sont placées entre les symboles <%@ et %>

Include
Inclure un autre fichier dans la page
<%@include file="Main.jsp"%>

Page
Plusieurs options pour cette directive
•Import : importe un package java
<%@page import="java.util.ArrayList"%>

Directives JSP 40

• contentType : Définit le type de contenu de la page générée


<%@page contentType="text/html"%>
•errorPage : Page à afficher si une exception se produit
<%@page errorPage="Error.jsp"%>

Taglib
Utilisation d’une bibliothèque de balises (Taglib)
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>
Eléments du script JSP 41

Déclaration
Définir des variables globales, Créer des méthodes Java
<%! private int sum=0; %>
<%! private getSomme(int a,int b)
{
return a+b;
}
%>
Scriptlet
Traitements Java autres que déclarations globales et
fonctions.
<%
sum=getSomme(2,5);
%>

Eléments du script JSP 42

Expressions
Afficher une expression dans la page JSP.
<p> La somme est : <%=sum%> </p>

Commentaire
Insérer un commentaire dans le code JAVA
<%--
Ceci est un commentaire
--%>
Variables implicites 43

Les spécifications des JSP définissent plusieurs objets utilisables


dans le code dont les plus utiles sont :

Exemple de traitement d’un


44
formulaire
Enchaîner les pages JSP 45

Une page JSP peut en appeler une autre par la directive :


<jsp:forward>
Syntaxe :
<jsp:forwardpage="pageDeRedirection" />

JSP & Java Bean 46

Un java Bean est une classe java qui a au moins un


constructeur sans paramètres et des getter et setter pour chacun
de ses attributs.

public class SimpleBean implements java.io.Serializable


{
Private int compter;
public SimpleBean() {
compter = 0;
}
public void setCompter(inttheValue) {
compter = theValue;
}
public int getCompter() {
return compter;
}
public void increment() {
compter++;
}
}
JSP & Java Bean 47

JavaBean est utilisé afin d’avoir le moins de code Java possible


dans une page JSP (HTML)
Syntaxe générale :
<jsp:useBean id="nomInstanceJavaBean"
class="nomClasseDuBean"
scope="request|session|application|page">
</jsp:useBean>
Le bean est alors utilisable par : nomInstanceJavaBean
L'attribut scope indique la portée du bean.

JSP & Java Bean 48

Récupération des propriétés du bean:


Par appel de méthode getXXX() ou par la balise <jsp:getProperty…>

Positionner les propriétés du bean dans une JSP


Par appel de méthode setXXX(...) ou par la balise <jsp:setProperty…>
Conclusion sur JSP / Servlets 49

Quoi mettre où ? (travailler en servlets ou en JSP ?)


Dépend de la quantité de code Java / HTML
Dépend de la couche dans laquelle on se trouve
Plus objectivement
Servlets
Orientation des données
Accès aux autres méthodes que celles de service
Définition d’autres méthodes
JSP
Inclusions d’autres JSP / intégration de composants
Appel à des JavaBeans
Utilisation de taglibs

Packaging d’une application Web 50

Web Component
Une application Web (*.html, *.jsp, servlets, …) packagée dans un archive (.war)
et est paramêtréedans le fichier WEB-INF/web.xml
Structure d’uneWeb Application Archive (.war)
•Fichiers Web de l’application (HTML, JSP, js, css…)
•Répertoire « META-INF » : fichiers de configuration
MANIFEST.MF : informations sur le zip
•Répertoire « WEB-INF » : contenu de l’application
WEB-INF/web.xml: Fichier de déploiement, Paramêtragedes servlets,
types MIME additionnels, …
WEB-INF/classes/: .class des servlets et des classes (JavaBean, …)
associées
ressources additionnelles (localstring.properties, …)
WEB-INF/lib/:.jar additionnels provenant de tierce parties (comme des
drivers JDBC, TagLib(jsf, …), …
WEB-INF/tlds/: .tld décrivant les TagLibs
Complément: Exemple MVC avec
51
JSP/Servlet

Complément: Exemple MVC avec


52
JSP/Servlet
Complément: Exemple MVC avec
53
JSP/Servlet

Complément: Exemple MVC avec


54
JSP/Servlet
Complément: Exemple MVC avec
55
JSP/Servlet
Controller le servlet: SelectPromo.java

Complément: Exemple MVC avec


56
JSP/Servlet
Complément: Exemple MVC avec
57
JSP/Servlet

Complément: Exemple MVC avec


58
JSP/Servlet
Complément: Exemple MVC avec
59
JSP/Servlet

Complément: Exemple MVC avec


60
JSP/Servlet
Complément: Exemple MVC avec
61
JSP/Servlet

Complément: Exemple MVC avec


62
JSP/Servlet

Vous aimerez peut-être aussi