Vous êtes sur la page 1sur 37

Partie 2 : 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)

5
3
Demande d’état
Modification de l’état
Notification de changement

Sélection de la vue

6 1 Action
Action
Affichage utilisateur 2
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)
throws ServletException
o Une instance de la Servlet est créée et servira pour toutes les {
requêtes des utilisateurs super.init(servConfig)
// MON CODE ICI
o Au chargement, une méthode d’initialisation est exécutée : la }
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 à <servlet>
appeler. Si la Servlet existe déjà en mémoire, il l’utilise, sinon, il <servlet-
la charge en mémoire. name>HelloServletName</servlet-name>
<servlet-
• Mode 2 : Chargement au démarrage du serveur : class>com.mabanque.servlet.HelloServlet</s
ervlet-class>
o Ce comportement doit être spécifié dans le web.xml (load on
<load-on-startup>1</load-on-
startup) 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 Servlet public void destroy()
• 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
o 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[] 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>/</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
d’une Servlet Client HTTP
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
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.

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.
• Permet de stocker des informations utiles pour le partage entre les servlets.
• Durée de vie :
• jusqu'à l'arrêt du serveur
• jusqu'au rechargement du contexte (en cas de modification).
• Le contexte de servlet est partagé par tous les utilisateurs

public class HelloServlet extends HttpServlet


{
public void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException
{
this.getServlet().setAttribute(“DateDuJour”,new Date());
}
}
Servlet
Contexte : Conclusion
Où on a besoin de l’information ?

Les pages liées par le


Plusieurs pages traitement d’une même
requête

Tous les
ServletContext ServletContext
utilisateurs
Qui utilise
l’information ?
L’utilisateur
HttpSession HttpServletRequest
courant
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 J2EE 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
o Les déclarations
o Les directives
o Les scriptlets
o Les actions
o Les JSTL
JSP : Java Server Page
Expressions

• Des expressions Java qui vont être évaluées à l'intérieur d'un appel de méthode print.
• Une expression commence par les caractères <%= et se termine par les caractères %>.
o Syntaxe: <%=expression%>
o Equivalent à: out.println(expression) ;
o Exemple : <%=new Date()%>
o 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

• Définit des attributs spécifiques à la 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)

o <%@ 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 %>.
• Exemple :
JSP : Java Server Page
Actions

• Constituent une autre façon de générer du code Java à partir d'une page JSP : <jsp:tagName ... />
• Exemple
JSP : Java Server Page
JSTL (Java Standard Tag Library)

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

• Exemples
<%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="${param['nom']}" default="Inconnu"/> : // affiche le paramètre nom de la requête.
JSP : Java Server Page
JSTL (Java Standard Tag Library)
JSP : Java Server Page
JSTL (Java Standard Tag Library)

Vous aimerez peut-être aussi