La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

Xavier Tannier Servlets. Programmation Web JSP Xavier Tannier Objectifs Pré-requis : – HTML – Java – Principes de la programmation.

Présentations similaires


Présentation au sujet: "Xavier Tannier Servlets. Programmation Web JSP Xavier Tannier Objectifs Pré-requis : – HTML – Java – Principes de la programmation."— Transcription de la présentation:

1 Xavier Tannier Servlets

2 Programmation Web JSP Xavier Tannier Objectifs Pré-requis : – HTML – Java – Principes de la programmation de pages web dynamiques (PHP, etc.) – Configuration Apache TomCat Objectifs : – Se familiariser avec les fonctionnalités des servlets

3 Programmation Web JSP Xavier Tannier Qu'est-ce que les servlets ? Une interface de l'API Java Un programme Java classique permettant de générer des pages Web dynamiques En général, une servlet étend une des deux classes suivantes, qui implémentent javax.servlet.Servlet : – javax.servlet.http.HttpServlet (pour les requêtes HTTP) – javax.servlet.GenericServlet (pour les autres requêtes) Les points d'entrée du client vers la servlet sont généralement les méthodes doGet() ou doPost() (selon la méthode HTTP utilisée pour la requête)

4 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; package exemple; public class MaPremiereServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Etape 1. Spécifier le type MIME du contenu de la réponse response.setContentType("text/html"); // Etape 2. Récupère le PrintWriter pour envoyer des données au client PrintWriter out = response.getWriter(); // Etape 3. Envoyer linformation au client out.println(" "); out.println(" Bonjour "); out.println(" "); out.println(" Bonjour à tous "); out.println(" Il est : " + new java.util.Date()); out.println(" "); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } Exemple : classe Java java

5 MaPremiereServlet exemple.MaPremierServlet MaPremiereServlet /exemple 30 index.jsp Exemple : fichier de configuration XML

6 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; package urlPatterns={"/exemple"}) public class MaPremiereServlet extends HttpServlet { … } Exemple servlet 3.0 java Permet déviter le fichier de configuration

7 Programmation Web JSP Xavier Tannier Appel d'une servlet Le serveur ne crée par défaut qu'une seule instance de chaque servlet Un appel d'un client déclenche la création d'un nouveau thread qui manipule cette instance Des appels simultanés génèrent donc plusieurs threads qui manipule la même instance ! Attention donc à la synchronisation

8 Programmation Web JSP Xavier Tannier Appel d'une servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class BonThread extends HttpServlet { private int compteur = 0; public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { synchronized(this) { int tmpCompteur = ++compteur; } PrintWriter out = res.getWriter(); out.println("Cette Servlet a été accédée " + tmpCompteur + " fois."); }

9 Programmation Web JSP Xavier Tannier Appel d'une servlet Pour qu'une instance différente soit générée à chaque appel, on implémente l'interface SingleThreadModel Cela rend parfois la manipulation plus confortable mais consomme plus de mémoire et supprime quelques fonctionnalités

10 Programmation Web JSP Xavier Tannier Initialisation d'une servlet On peut personnaliser l'initialisation en redéfinissant la méthode : – public void init(ServletConfig config); On peut refuser l'initialisation en lançant dans cette méthode l'exception UnavailableException. Par exemple : – throw new UnavailableException("Charge du serveur trop élevée", 120); – Refuse l'initialisation et impose un délai de 120 secondes avant de recommencer.

11 Programmation Web JSP Xavier Tannier Exécution d'une servlet Redéfinition d'une ou plusieurs de ces méthodes : qui sont appelées en passant deux objets de type HttpServletRequest (requête) et HttpServletResponse (réponse) MéthodeAppelée lors de doGet()Requête du client en mode GET doPost()Requête du client en mode POST doHead()Demande d'information sur les entêtes générées par le serveur doOptions()Demande des services disponibles sur le serveur doPut()Dépôt d'un fichier sur le serveur doDelete()Suppression d'un fichier sur le serveur doTrace()Traçage de la requête

12 Programmation Web JSP Xavier Tannier Destruction d'une servlet Décidée par le moteur Appel de la méthode – public void destroy() – que l'on peut redéfinir

13 Contexte

14 Programmation Web JSP Xavier Tannier Contexte d'un servlet On peut définir un contexte permettant d'accéder aux autres ressources utilisées par l'application Web : – Servlets – JSP – Classes utilitaires – Documents statiques (HTML ou autres) – Applications client – méta-informations – On peut par exemple accéder au contexte de la façon suivante : public void init(ServletConfig config) { ServletContext contexte = config.getServletContext(); /* suite du code */ }

15 Programmation Web JSP Xavier Tannier Contextes sous Tomcat WEB-INF/web.xml : contient la description du contexte WEB-INF/classes/ : contient les classes des servlets WEB-INF/lib/ : contient les.jar utilisées par l'application (et on peut archiver le tout dans un fichier.war) Voir le fichier web.xml généré par eclipse Le contexte est disponible dans toute lapplication

16 Programmation Web Xavier Tannier JSP Contexte d'un servlet MéthodeAction getAttribute(String name)Retourne un attribut du contexte setAttribute(String name, Object value) Ajoute un attribut au contexte getInitParameter(String name)Retourne un paramètre dinitialisation log(String message)Ajoute un message dans le log de la servlet contextParam1 valeur 1 La première valeur du contexte (paramètre dinitialisation) Définition dun paramètre dinitialisation dans web.xml

17 Sessions

18 Programmation Web JSP Xavier Tannier À quoi sert une session ? (rappel) Les sessions : – Maintiennent létat du client pendant une série de requêtes du même utilisateur – Permettent didentifier le client – Permettent de conserver les données au cours dune série déchanges Plusieurs façons de faire en général : – Ajouter des variables didentification à lURL – Utiliser les champs cachés des formulaires – Manipuler des cookies Mécanisme transparent en servlet : classe HttpServlet

19 Programmation Web Xavier Tannier JSP 19 Créer ou récupérer une session public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Récupère la session HttpSession session = request.getSession(true); // … } Si « true », crée la session si elle nexiste pas Si « false », renvoie null si la session nexiste pas

20 Programmation Web Xavier Tannier JSP 20 Stocker des attributs public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Récupère la session HttpSession session = request.getSession(true); // Lâge de lutilisateur est dans la requête // (issue dun formulaire) int age = Integer.parseInt(request.getParameter("age_user")); // Conserve linformation dans la session session.setAttribute("age",new Integer(age)); }

21 Programmation Web Xavier Tannier JSP 21 Récupérer des attributs public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Récupère la session HttpSession session = request.getSession(true); // Récupère lâge de l'utilisateur int age = (int)session.getAttribute("age"); }

22 Programmation Web Xavier Tannier JSP 22 Fermer une session public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Récupère la session HttpSession session = request.getSession(true); // Ferme la session session.invalidate(); }

23 Programmation Web Xavier Tannier JSP 23 Méthodes de HttpSession MéthodeAction long getCreationTime()Retourne l'heure de la création de la session Object getAttributes(String Name)Retourne l'objet stocké dans la session sous le nom Name, null s'il n'existe pas String getId()Génère un identifiant de session long getLastAccessedTime()Retourne la date de la requête précédente pour cette session String[] getValueNames()Retourne un tableau contenant le nom de toutes les clés de la session Object getValue(String Name)Retourne l'objet stocké dans la session sous le nom Name, null s'il n'existe pas void invalidate()Supprime la session boolean isnew()Retourne true si la session vient d'être créée, sinon false

24 Programmation Web Xavier Tannier JSP 24 Méthodes de HttpSession MéthodeAction void putValue(String Name, Object Value) Stocke l'objet Value dans la session sous le nom Name void removeValue(String Name)Supprime l'élément Name de la session void setAttribute(String Name, Object Value) Stocke l'objet Value dans la session sous le nom Name int setMaxInactiveInterval(int interval) Définit l'intervalle de temps maximum entre deux requête avant que la session n'expire int getMaxInactiveInterval(int interval) Retourne l'intervalle de temps maximum entre deux requête avant que la session n'expire

25 Programmation Web Xavier Tannier JSP 25 Création de cookies public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Création du cookie Cookie c = new Cookie("id"," "); // définition de la limite de validité c.setMaxAge(24*3600); // envoi du cookie dans la réponse HTTP response.addCookie(c); }

26 Programmation Web Xavier Tannier JSP 26 Récupération des cookies public class Caddie extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Récupération des cookies de la session Cookie[] cookies = request.getCookies(); for (Cookie cookie : cookies) { String name = cookie.getName(); Object value = cookies.getValue(); }

27 Programmation Web JSP Xavier Tannier HttpSessionListener Pour surveiller la création et la disparition de sessions Méthodes : – void sessionCreated(HttpSessionEvent se); – void sessionDestroyed(HttpSessionEvent se); – (puis se.getSession() pour obtenir la session en question) À déclarer dans web.xml (ou avec dans les servlets 3.0) 27 exemple.sessionListenerExemple web.xml

28 Programmation Web JSP Xavier Tannier HttpSessionAttributeListener Pour surveiller lévolution des attributs de sessions Méthodes : – void attributeAdded(HttpSessionBindingEvent event); – void attributeRemoved(HttpSessionBindingEvent event); – void attributeReplaced(HttpSessionBindingEvent event); – (puis event.getSession(), event.getName() et event.getValue() pour obtenir les informations sur lattribut en question) 28

29 Les servlets HTTP

30 Programmation Web Xavier Tannier JSP Informations sur le serveur import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ServeurInfo extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter(); out.println("Nom du serveur : " + req.getServerName() + "."); out.println("Logiciel utilisé : " + req.getServletContext().getServerInfo() + "."); out.println("Port du serveur : " + req.getServerPort() + "."); out.println("Chemin vers le fichier " + req.getPathInfo() + " : " + req.getPathTranslated(req.getPathInfo()) + "."); }

31 Programmation Web Xavier Tannier JSP Informations sur le client import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ServeurInfo extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter(); out.println("Adresse IP du client : " + req.getServerName()); out.println("Nom d'hôte du client : " + req.getRemoteHost()); }

32 Programmation Web Xavier Tannier JSP Informations sur la requête import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class ServeurInfo extends HttpServlet { // En mode GET (même chose pour POST) public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter(); Enumeration parametres = req.getParameterNames(); out.println("Affichage des informations sur les paramètres de la requête"); while (parametres.hasMoreElements()) { String nomParametre = (String) parametres.nextElement(); out.println("Le paramètre " + nomParametre + " a la valeur : " + getParameter(nomParametre) + "."); }

33 Programmation Web JSP Xavier Tannier Informations sur les entêtes de la requête le logiciel utilisé par le client. les types MIME des formats de données acceptés. le type d'authentification utilisé dans le cas d'une connexion sécurisée. la date de dernière requête du client pour la ressource demandée. le jeu de caractères utilisé par le navigateur. la valeur du cookie associé au domaine auquel appartient la servlet demandée. le langage utilisé par le client.

34 Programmation Web Xavier Tannier JSP Informations sur les entêtes de la requête import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class ServeurInfo extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter(); out.println("Affichage des informations sur les en-têtes de la requête"); Enumeration entetes = req.getHeaderNames(); while (entetes.hasMoreElements()) { String nomEntete = (String) entetes.nextElement(); out.println("à l'entête " + nomEntete + " correspond la valeur" + getHeader(nomEntete) + "."); }

35 Programmation Web Xavier Tannier JSP Informations sur le serveur import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ServeurInfo extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter(); out.println("Nom du serveur : " + req.getServerName() + "."); out.println("Logiciel utilisé : " + req.getServletContext().getServerInfo() + "."); out.println("Port du serveur : " + req.getServerPort() + "."); out.println("Chemin vers le fichier " + req.getPathInfo() + " :" + req.getPathTranslated(req.getPathInfo()) + "."); }

36 Programmation Web JSP Xavier Tannier Construire la réponse : l'entête HttpServletResponse response On précise le type MIME de réponse avec response.setContentType (par exemple, "text/html") On peut préciser le statut de la réponse avec response.setStatus – response.setStatus(HttpServletRequest.SC_NOT_FOUND) => erreur 404 – res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY) avant de rediriger – e.html pour voir tous les statuts possibles e.html

37 Programmation Web JSP Xavier Tannier Construire la réponse : le contenu Construction de HTML public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Etape 1. Spécifier le type MIME du contenu de la réponse response.setContentType("text/html"); // Etape 2. Récupère le PrintWriter // pour envoyer des données au client PrintWriter out = response.getWriter(); // Etape 3. Envoyer linformation au client out.println(" "); out.println(" Bonjour "); out.println(" "); out.println(" Bonjour à tous "); out.println("Il est : " + new java.util.Date()); out.println(" "); }

38 Construire la réponse : le contenu Construction de HTML orientée objet, avec weblogic par exemple (http://www.weblogic.com) import javax.servlet.*; import javax.servlet.http.*; import weblogic.html.*; import java.io.*; public class BonjourMondeObjet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); ServletPage page = new ServletPage(); page.getHead().addElement(new TitleElement("Bonjour !")); page.getBody().addElement(new BigElement("Bonjour !")); page.output(res.getOuputStream()); }

39 Programmation Web JSP Xavier Tannier Construire la réponse : le contenu Renvoyer un fichier demandé en paramètre public class FileServer extends HttpServlet { // on peut être amené à envoyer des fichiers binaires, donc on utilise // un ServletOutputStream au lieu d'un PrintWriter ServletOutputStream out = res.getOutputStream(); // récupération d'une référence sur le fichier demandé File fichier = new File(req.getPathTranslated(); if (fichier == null) // si le fichier est introuvable on envoie un code d'erreur 404 res.sendError(HttpServletResponse.SC_NOT_FOUND); // sinon le type de contenu de la réponse correspond au type MIME // du fichier res.setContentType(getServletContext().getMimeType(fichier)); try { // on utilise un tampon de 4 ko pour lire le fichier // ce qui est plus rapide qu'un lecture ligne par ligne char[] tampon = new char[4 * 1024]; FileInputStream in = new FileInputStream(fichier); while (in.read(tampon) >= 0) { out.write(tampon); } } catch (IOEXception e) { // si une erreur se produit au milieu de la réponse // on envoie le code d'erreur HTTP adéquat res.sendError(HttpServletResponse.SC_PARTIAL_CONTENT); } finally { if (fichier != null) fichier.close(); }


Télécharger ppt "Xavier Tannier Servlets. Programmation Web JSP Xavier Tannier Objectifs Pré-requis : – HTML – Java – Principes de la programmation."

Présentations similaires


Annonces Google