Vous êtes sur la page 1sur 45

Partie : JEE

 Présenataion JEE
 Définition
 Architecure
 Modèle MVC
 Protocole HTTP

 Servlets
 Définition
 Fonctionnement
 Chargement
 Déploiment
 Contexte

 JSP (Java Server Page)


 Définition
 Eléments d’une JSP
JEE - Définition
• Java Enterprise Edition (JEE, anciennement J2EE), est une Plate-forme destinée à développer,
déployer et gérer des applications d’entreprise selon plusieurs couches (selon une architecture
N-Tiers).
• Application d’entreprise : assurer les différentes taches des différents intervenants d’une entreprise
tout en assurant les differents aspects d’une application : sécurité, portabilité, scalabilité,
accessibilité, manageabilité, …
• Fournit un ensemble d’APIs pour réaliser une application répartie et qui permet l’injection de
dépendance : utiliser un descripteur de déploiement en XML ou selon des annotations.
• Se base sur le langage Java et la machine virtuelle.
• Développé par un groupe d’expers : Java Community Process (JCP) selon un ensemble de
Java Specification Requests (JSRs).
JEE - Architecture

• Une application JEE est définie selon plusieurs couches. Chaque couche peut
contenir plusieurs composants:
• Couche client (Client-Tier) : reçoit la réponse générée par le serveur : HTML, json,
XML, …

• Couche web : composé essentiellement de servlet et java server page (jsp).


Responsable de recevoir la requête et préparer la réponse en faisant intervenir les
autres couches.

• Couche métier : représente l’ensemble des traitements et des opérations assurés par
l’entreprise. Communique directement avec le module de stockage des données.
Bean : représente une portion de la logique métier, écrite en java.

• Couche accès aux donnée (dao) : représente les opérations d’accès et de manipulation
des données. Cette couche pourait être inclue dans la couche métier.
• Chacune de ces couches sont inclues dans un conteneur particulier représentant
un cadre d’execution et permet la communication avec les composants de la
couche sous-jacente.
Permet aussi la description des composants et la sécurité necessaire.
• Tout ce qui est exécuté coté serveur : Backend.
• Coté client : Frontend.
Modèle MVC
• Une application en JEE garantit la séparation des taches en adoptant le modèle MVC (Modèle-Vue-
Controller).
• MVC : un design pattern (patron de conception) qui décrit les grandes lignes d'une solution, qui a
pour objectifs de définir des responsabilités isolées et d’assurer des dépendances maitrisées
(Separation of concerns) Modèle
-Traitements métiers
5 - Renvoie l’état demandé par la
vue 3
- Notifie les vues lors de
Demande d’état changement. Modification de l’état
Notification de changement

Vue Sélection de la vue


-Affiche les données du modèle
-Formate les données
Contrôleur
-Associe les actons utlisateurs aux
-Transmet les actions des utilisateurs 4 modifcatons du modèle.
-Sélectonne la vue adéquat en foncton
6 1 Action de l’acton et du modèle
Action -Défnit le fonctonnement de
Affichage utilisateur 2l’applicaton
Utilisateur
Architecture – Modèle MVC
Protcole HTTP
• La communication entre le client (partie Frontend) et le serveur (partie Backend représentée par
couche web) se fait par le protocole HTTP.
• La communication est réalisée par l’échange de requête (client) et réponse (serveur).
• Une requête HTTP peut être envoyée en utilisant les méthodes suivantes:
o GET : demander une ressource (une page, une image ou un fichier particulier)
o POST : apporter une modification au serveur. Typiquement utilisée pour soumissionner un formulaire
(Envoyer dans la requête des données saisies par l’utilisateur),
o PUT : envoyer un fichier du client vers le serveur,
o DELETE : demander au serveur de supprimer un document.
o HEAD : permet de récupérer les informations sur un document (Type, Capacité, Date de dernière
modification etc…)
Protcole HTTP

o Exemple de requête HTTP : méthode GET o Exemple de requête HTTP : méthode POST
Protcole HTTP
• Une réponse HTTP contient :
• Une ligne de statut :
• La version du protocole
• Le code de statut (200, 404, …)
• La signification du code (Ok, Resource not found, …)
• Les champs d’en-tete de la réponse,
• des informations supplémentaires sur la réponse et/ou le serveur (Content-Type, Content-Length,
Content-Length).
• Le corps de la réponse : la resource demandée.
Protcole HTTP
• Exemple de réponse HTTP :
Protcole HTTP
• Exemple de communication Client-Serveur :
1. Le client se connete au Serveur : Créer une Socket en utilisant une adresse IP et un numéro de port,
2. Le client demande un document : Requete Http en utilisant la méthode Get,
3. Le Serveur répond en envoyant le document avec le code de status = 200 Ok (ou bien une erreur),
4. Déconnexion : destruction des socket saprès le chargement complet du document et.
Servlet
Définition
• Composant logiciel (Composant Web JEE) écrit en
Java qui s’exécute du coté serveur suite à un
évènement utilisateur :
Une Servlet s’exécute dans un moteur de Servlet ou
conteneur de Servlet (permet d’établir le lien entre la
Servlet et le serveur Web),
• Permet de gérer des requêtes HTTP et de fournir au
client une réponse HTTP (sous forme de code
HTML, image, …),
• Hérite de la classe HttpServlet pour utiliser le
protocole Http
• Méthode service(…) : lire le type de requête envoyée
par le client (GET, POST, ..) et transmet la requête à
une méthode appropriée pour traiter le type de
requête (doXXX : doGET, doPOST, …)
• Si la méthode service est redéfinie, doGET et
doPOST ne seront pas appelées.
Servlet
Définition
Servlet
Chargement
• Chargée une seule fois par application Web,
public void init(ServletConfig servConfig)
o Une instance de la Servlet est créée et servira pour toutes les throws ServletException
requêtes des utilisateurs {
o Au chargement, une méthode d’initialisation est exécutée : la super.init(servConfig)
// MON CODE ICI
méthode init() }
• 2 modes de chargement pour les Servlets :
• Mode 1 : Chargement lors de la première utilisation (par défaut :
rien à spécifier):
o Lorsqu’une requête arrive, le serveur identifie la Servlet à
appeler. Si la Servlet existe déjà en mémoire, il l’utilise, sinon, il <servlet>
la charge en mémoire. <servlet-
name>HelloServletName</servlet-name>
• Mode 2 : Chargement au démarrage du serveur : <servlet-
o Ce comportement doit être spécifié dans le web.xml (load on class>com.mabanque.servlet.HelloServlet</s
ervlet-class>
startup) <load-on-startup>1</load-on-startup>
o Chargement lorsque le serveur prendra connaissance du </servlet>
web.xml.
o Spécifier une valeur de load-on-startup par un entier positif. Plus

la valeur sera faible, plus la servlet sera chargée tôt.


o Ralentit le serveur au démarrage.
Servlet
Déchargement
• Arrêt des traitements puis destruction de l’instance de la public void destroy()
Servlet
• Cette opération est effectuée
o lors de l'arrêt normal du serveur d'application.
o Lors du déchargement ou du redéploiement de
l’application.
Servlet
Fonctionnement
• A chaque requête la méthode service est exécutée
• Considérée comme principal point d'entrée de toute servlet et accepte deux objets en paramètres:
o L'objet HttpServletRequest encapsulant la requête du client : l'ensemble des paramètres passés à la
servlet (informations sur l'environnement du client, cookies du client, URL demandée, ...)
o L'objet HttpServletResponse permettant de renvoyer une réponse au client (envoyer des informations au
navigateur).
• Pratiquement on utilise les méthodes doGET et doPOST :
o Si la méthode utilisée est GET, il suffit de redéfinir la méthode doGET :
public void doGet(
HttpServletRequest request,
HttpServletResponse response
)
o Si la méthode utilisée est POST, il suffit de redéfinir la méthode doPost :
public void doPost(
HttpServletRequest request,
HttpServletResponse response
)
Servlet
Fonctionnement
package web; import java.io.IOException; import javax.servlet.*; import javax.servlet.http.*;
public class ControleurServlet extends HttpServlet{
@Override
public void init() throws ServletException {
// Initialisation
// Exécutée juste après instanciation de la servlet par le serveur Tomcat
}
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Traitement effectué si une requête Http est envoyée avec GET
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Traitement effectué si une requête Http est envoyée avec POST
}
@Override
public void destroy() {
// Exécutée juste avant la desctruction de la servlet.
// Au moment de l'arrêt de l'application
}
}
Servlet
HttpServletRequest
Encapsule la requête HTTP et fournit des méthodes pour accéder
o aux informations du client
o à l'environnement du serveur
• HttpServletRequest hérite de ServletRequest.
• Exemples de méthodes
String getMethod() : retourne le type de requête
o String getServerName() : retourne le nom du serveur
o String getParameter(String name) : retourne la valeur d'un paramètre
o String getServletPath() : retourne l’url pattern utilisé pour accéder à une servlet.
o RequestDispatcher getRequestDispatcher : permet de dispatcher la requête à une autre
ressource en utilisant les méthodes forward ou include.
o String[] getParameterNames() : retourne le nom des paramètres
o String getRemoteHost() : retourne l'IP du client
o String getServerPort() : retourne le port sur lequel le serveur écoute
o String getQueryString() : retourne la chaîne d’interrogation
Servlet
HttpServletResponse

• Cet objet est utilisé pour construire une réponse HTTP renvoyé au client,
• HttpServletResponse hérite de ServletResponse,
• Définit des méthodes nécessaires pour indiquer le type de contenu, en-tête et code de
retour
• Exemples de méthodes :
o void setStatus(int) : définit le code de retour de la réponse
o void setContentType(String) : définit le type de contenu MIME (text/plain,
application/octet-stream)
o PrintWriter getWriter() : Retourne un objet PrintWriter permettant d'envoyer du texte au
navigateur client. Il se charge de convertir au format approprié les caractères Unicode
utilisés par Java
o ServletOutputStream getOutputStream() : flot pour envoyer des données binaires au client
o void sendRedirect(String) : redirige le navigateur vers l'URL
Servlet
Un premier exemple :
package web;
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
public class ControleurServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
String name=request.getParameter("name");
response.setContentType("text/html");
PrintWriter out=response.getWriter();
out.println("<html><head><title>Hello Servlet</title></head>");
out.println("<body>");
out.println("<h3>Hello "+name+"</h3>");
out.println("</body></html>");
}

}
Servlet
Déploiement

• Pour que le serveur Tomcat reconnaisse une servlet,


celle-ci doit être déclarée dans le fichier web.xml qui se
trouve dans le dossier WEB-INF.
• Le fichier web.xml est le descripteur de déploiement
de Servlets.
• Contient principalement les éléments suivant :
o Le nom attribué à cette servlet :
<servlet-name></servlet-name>
o La classe de la servlet : <servlet-class></servlet-class>
o Le nom URL à utiliser pour faire appel à cette servlet
via le protocole HTTP : <url-pattern>/fs</url-pattern>
Servlet
Déploiement : Servlet 3.0

• Pour un projet web JEE, utilisant un module web, version 3.0, le fichier web.xml n’est
pas nécessaire.
• Le déploiement d’une servlet peut se faire en utilisant des annotations :
Cycle de vie
Servlet Serveur
Client HTTP
d’une Servlet Tomcat Servlet

Cycle de vie Lire Web.xml


Instanciation

init()
Initialisation

Req HTTP : GET /servlet


service ( request, response )

Rep HTTP (HTML) doGet(req,resp)


Rep HTTP (HTML)

Req HTTP : POST /servlet


service ( request, response )

Rep HTTP (HTML) doPost(req,resp)


Rep HTTP (HTML)

Arrêter
Application
destroy()
Destroy
Actions
Servlet
TP 1

- Créer une page html login.html qui permet de saisir un login et un mot de passe.
- Définir une Servlet qui retourne une nouvelle page accueillant l’utilisateur si le mot de passe est
correct. Sinon un message indiquant “login ou mot de passe incorrect” dans la page login.html.
Servlet
Communication Servlet et JSP : Forwarding et Redirection
• Permet de rediriger le traitement vers une autre ressource : vue jsp,
• Assure une séparation des taches : Controleur – Vue,
• Forward : une seule requête effectuée par le serveur. Pour le partage de résultat avec un autre compo du même serveur.

• Redirect : s’execute en deux requêtes. Utilisée pour des redirections externes.


Servlet
Contexte
• Souvent, il est nécessaire de faire passer des informations d’une page à une autre, d’une servlet à une
autre, …
• La norme Web de JEE propose trois contextes permettant de stocker des informations dites attributs
(String, Object, …) :
o Contexte de Requête (HttpServletRequest): Dure tant que la requête n’est pas terminée.
o Contexte de Session (HttpSession) : Dure tant que la session utilisateur n’est pas terminée.
o Contexte de Servlet (ServletContext) : Dure tant que l’application ou le serveur n’est pas redémarré.
• Les attributs sont stockés en mémoire.
o Utiliser le moins de mémoire possible, le moins longtemps possible (Requete -> Session -> Servlet).
o A l’inverse, ne pas supprimer une information qui pourrait être utile.
• Les trois contextes possèdent les mêmes méthodes d’accès aux attributs :
o void setAttribute(String, Object)
o Object getAttribute(String)
o void removeAttribute(String)
Servlet
Contexte : Requête

• Les informations de contexte requête sont utilisables pendant un aller-retour client serveur.
• Détruites automatiquement après la fin de la requête

public class HelloServlet extends HttpServlet


{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
req.setAttribute(“erreurMessage“,”Accès à la ressource interdit”);
}
}
Servlet
Contexte : Session

• Les informations présentes dans le contexte de session sont utilisables jusqu'à la suppression de la
session utilisateur : par déconnexion ou par timeout.

Partagée entre plusieurs requêtes.

Permet de stocker des informations utiles pour le partage entre les servlets.

public class HelloServlet extends HttpServlet


{
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
HttpSession session = req.getSession();
session.setAttribute(“livre“,monLivre);
}
}
Servlet
Contexte : Servlet

• Les informations présentes dans le contexte de servlet sont utilisables tant que l'application est lancée.

Partagée entre plusieurs requêtes.

Permet de stocker des informations utiles pour le partage entre les servlets.

Le contexte de servlet est partagé entre tous les utilisateurs.

Durée de vie :
• jusqu'à l'arrêt du serveur
• jusqu'au rechargement du contexte (en cas de modification).

public class HelloServlet extends HttpServlet


{
public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.getServletContext().setAttribute(“DateDuJour”,new Date());
}
}
Servlet
TP2

• Jeu de trouver le numéro cherché



Une page qui propose de saisir un nombre entre 0 et 100.

L’application répond par “Bravo !!”, “Donner un nombre plus petit”, “Donner un nombre plus grand”.
L’utilisateur a le droit que de trois tentatives.

L’application peut supporter plusieurs utilisateurs à la fois.
Filter
• Filtre Servlet est un objet utilisé pour faire un traitement initial, à la reception d’une requête, avant
l’intervention des servlets.
• Filter Servlet peut aussi intercepter la réponse des servlets avant son envoi aux clients.
• Peut être utilisé pour la validation des données, la compression, le cryptage/décryptage, etc.
• Peut être défini sans toucher aux servlets existantes. <filter>
<filter-name>f1</filter-name>
• Déclaré dans le fichier web.xml. <filter-class>web.MyFilter</filter-class>
</filter>
• Peut être défini en Implémentant l’interface Filter <filter-mapping>
<filter-name>f1</filter-name>

Init : utilisé pour l’initialisation du filtre. Exécuté <url-pattern>/*</url-pattern>
une seule fois: </filter-mapping>


DoFilter : exécuté à public class MyFilter implements Filter{ {
chaque à fois la requête public void init(FilterConfig arg0) throws ServletException {}

est envoyée à la sevlet public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
à laquellle le filtre est throws IOException, ServletException { {
chain.doFilter(req, resp);//sends request to next resource
attaché.
}

Destroy : Exécuté public void destroy() {}
une seule fois à la fin.
JSP : Java Server Page
Définition

• Une JSP est une sorte de page HTML, à l’intérieur de laquelle, on peut écrire du code Java.
• Utilisée pour définir les vues d’une application.
• Au premier appel d’une JSP, Tomcat convertit la JSP en servlet et la déploie automatiquement.
• Quand un client HTTP demande une page JSP, c’est la servlet correspondante à cette JSP, qui est générée
par Tomcat qui sera excécutée.
• Tout ce qu’on peut faire avec une servlet, peut être fait par une JSP : Une JSP est une servlet.
• Dans une application web JEE qui respecte le pattern MVC,
o Les servlets sont utilisées pour jouer le rôle du contrôleur
o Les JSP sont utilisées pour jouer le rôle des vues
JSP : Java Server Page
Eléments d’une JSP

• Une page JSP peut être formée par les éléments suivants :

o Les expressions :pour l’affichage dans la page html.


o Les déclarations de variables et de méthodes .
o Les directives représantant des indications d’une page jsp.
o Les scriptlets pour définir un ensemble des instructions de java.
o Les actions
o Les JSTL
JSP : Java Server Page
Expressions

• Une expression est utilisée pour écrire dans la sortie standard.


• Remplace l’instruction out.println.
• Une expression commence par les caractères <%= et se termine par %>.
o Syntaxe: <%=expression %>
Equivalent à: <% out.println(expression) ; %>
o Exemple : <%=new Date()%>
Equivalent à: <% out.println(new Date()) ; %>

o Nombre de secondes par heure : <%= 60*60 %>

o <% Livre livre = (Livre) request.getAttribute("livre"); %>


Titre : <%= livre.getTitre() %> </td>
Auteur : <td> <%= livre.getAuteur() %> </td>
JSP : Java Server Page
Déclarations

• Permet de déclarer des variables et des méthodes.


• Se posotionnent en dehors de la méthode service.


<%! déclaration %>

Exemples
<%! int nbr=50; %>
<%= "Valeur de nombre est :" + nbr %>

<%!
int cube(int n){
return n*n*n*;
}
%>
<%= "Le cube de 3 est :" + cube(3) %>
JSP : Java Server Page
Directives

• Définit des attributs enrichissant la définition d’une page.


o <%@ page language="java" import="java.util.Date,java.text.*" %>
o Accepte plusieurs attributs :

language (java)

extends

import

session (true)

buffer (8 ko)

autoFlush (true)

isELIgnored (false)

• Directive peut être une include : permet d’inclure le contenu d’une ressource dans la page courante.
Permet la réutilisation.
<%@ include file="header.jsp" %>
<!-- Contenu de la page à générer -->
<%@ include file="footer.jsp" %>
JSP : Java Server Page
Scriptlets

• Ils servent à ajouter du code dans la méthode de service.


o Le code Java du scriptlet est inséré tel quel dans la servlet générée. La vérification, par le compilateur, du code
aura lieu au moment de la compilation totale de la servlet équivalente.
• Définit des blocs de code introduit par le caractères <% et se terminant par %>.
• Exemples :

<%
String name=request.getParameter("u_name");
Out.print("welcome "+name);
%>
JSP : Java Server Page
Actions

• Utilisées pour exécuter certaines actions.


• Exemples
JSP : Java Server Page
TP 3

• Reprendre le TP 1 en utilisant une page jsp.


JSP : Java Server Page
JSTL (Java Standard Tag Library)

• Constituent un ensemble de librairies de tags pour le développement de pages JSP.


• Simplifie l’utilisation. Pas besoin d’utiliser des scriptlets.
• Permet la réutilisation.
JSP : Java Server Page
JSTL (Java Standard Tag Library)

• Core tags : fournit un support pour la manipulation des variables, les itérations, les choix, etc.
Utilisation : <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
Exemples :
- <c:out value="${'Bonjour !!!'}"/>
- <c:set var="income" scope="session" value="${4000*4}"/>
<c:if test="${income > 8000}">
<p>My income is: <c:out value="${income}"/><p>
</c:if>
JSP : Java Server Page
JSTL (Java Standard Tag Library)
• Exemples :

<c:choose> <c:forEach var="j" begin="1" end="3">


<c:when test="${income >= 16 }"> Item <c:out value="${j}"/><p>
Très bien. </c:forEach>
</c:when>
<c:when test="${income > 12}">
<c:forEach var="client" items="${clients}"
Bien.
varStatus="compteur" >
</c:when>
<c:out value = ${“Client” + compteur.count}/>
<c:otherwise>
<c:out value="${client.nom + “ - ” +
Ça passe
client.prenom}"/><p>
</c:otherwise>
</c:forEach>
</c:choose>
JSP : Java Server Page
JSTL (Java Standard Tag Library)

• Function tags : fournit un ensemble de fonctions de manipulation des chaines de caractères.


Utilisation : <%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
Exemples :
- <c:set var="chaine" value="Bonjour jeunes développeurs"/>
<c:if test="${fn:contains(chaine, 'jeunes')}">
<p>Ok<p>
</c:if>
- boolean containsIgnoreCase(java.lang.String, java.lang.String)
- boolean endsWith(java.lang.String, java.lang.String)
- int indexOf(java.lang.String, java.lang.String)
- java.lang.String[] split(java.lang.String, java.lang.String)
JSP : Java Server Page
JSTL (Java Standard Tag Library)
• Formatting tags : permet la mise en forme des nombres et des dates.
Utilisation : <%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>
Exemples :
<c:set var="Amount" value="9850.14115" />
<fmt:formatNumber value="${Amount}" type="currency" /></p>
$9,850.14
<fmt:formatNumber type="number" groupingUsed="true" value="${Amount}" /></p>
9,850.141
<fmt:formatNumber type="number" maxIntegerDigits="3" value="${Amount}" /></p>
850.141
<fmt:formatNumber type="number" maxFractionDigits="6" value="${Amount}" /></p>
9,850.14115
<fmt:formatNumber type="percent" maxIntegerDigits="4" value="${Amount}" /></p>
5,014%
<fmt:formatNumber type="number" pattern="###.###$" value="${Amount}" /></p>
9850.141$
JSP : Java Server Page
JSTL (Java Standard Tag Library)
• Formatting tags :
Exemples :

<c:set var="Date" value="<%=new java.util.Date()%>" />


<fmt:formatDate type="time" value="${Date}" />
4:20:50 PM
<fmt:formatDate type="date" value="${Date}" />
Aug 13, 2020
<fmt:formatDate type="both" value="${Date}" />
Aug 13, 2020 4:20:50 PM
<fmt:formatDate type="both" dateStyle="short" timeStyle="short" value="${Date}" />
8/13/16 4:20 PM
JSP : Java Server Page
Expression Language (EL)
• Simplifie la manipulation des données des objets d’une page jsp : beans, requête, session, etc.
• Syntaxe ${ expression }
• Permet d’effectuer des opérations arithmétiques et logiques.
Exemples :

${1 > (4/2)} – > false


${'a' < 'b'} – > true
${(10*10) ne 100} – > false
${3 div 4} – > 0.75
${!empty param.Add} – > True si le paramètre de la requête Add est null ou vide.
${param['mycom.productId']} – > retourne la valeur de mycom.productId de la requête.
${departments[deptName]} – > retourne la valeur de la clé deptNme du tableau departments

Vous aimerez peut-être aussi