1 / 39

Chapitre 2 Développement Web avec les technologies JSP/Servlets

Chapitre 2 Développement Web avec les technologies JSP/Servlets. Sommaire. Architecture d’une application Web Installation et configuration du Conteneur Tomcat Les servlets HTTP Les Java Server Pages Les JavaBeans Les Filtres HTTP Le design pattern MVC2.

Download Presentation

Chapitre 2 Développement Web avec les technologies JSP/Servlets

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Chapitre 2Développement Webavec les technologies JSP/Servlets

  2. Sommaire • Architecture d’une application Web • Installation et configuration du Conteneur Tomcat • Les servlets HTTP • Les Java Server Pages • Les JavaBeans • Les Filtres HTTP • Le design pattern MVC2

  3. Architecture d’une application web

  4. Architecture-type d’une application web • Les applications web connaissent un engouement ces derniers temps • La J2EE Facilite le développement d’applications web Couche présentation Couche applicative (logique métier) Couche de données ConteneurWeb Http JSP Base de données Navigateur Servlet Composants métier (JavaBeans) HTML, XML

  5. Structure d’une application Web Une application Web possède dans un repertoire lui-même dans webapps une architecture spécifique MaWebApp Pages HTML et JSP *.html, *.jsp /WEB-INF/web.xml /WEB-INF/classes/ /WEB-INF/lib/ /WEB-INF fichier de configuration (XML) classes des servlets et de beans fichiers jar des servlets et utilitaires L’ensemble des fichiers et répertoire peut être mis dans un war (Web Archive) grâce à la commande jar. Le war est automatiquement dé-jarré s’il est placé dans le répertoire webapps.

  6. Installation et configuration du conteneur WebTomcat

  7. Le conteneur Apache Tomcat • Tomcat 6 (Catalina) • Projet Apache (Apache  Apache Httpd) • Open source • Implantation de référence de la spécification • Tomcat 6 : Servlet 2.5 et JSP 2.1 (Java EE 5) • Suite à l’installation de Tomcat, positionner les 2 variables d’environnement suivantes : • JAVA_HOME : Elle doit pointer le répertoire d’installation du JDK • CATALINA_HOME : Elle doit pointer le répertoire d’installation de Tomcat.

  8. Arborescence de Tomcat scripts startup & shutdown jar utilisés par Tomcat (Ant, Servlet, etc.) configuration: server.xml, web.xml, users.xml fichiers de logs fichiers jar propres à Tomcat fichiers jar communs à toutes les servlets zone de déploiement /bin /common/lib /conf /logs /server/lib /shared/lib /webapps

  9. Les Servlets HTTP

  10. Programmation HTTP en J2EE • J2EE offre une spécification standard d'une API (javax.servlet.http) permettant de programmer HTTP. Les programmes traitant des reqêtes HTTP sont appelés servlets. • Un conteneur standard, open source, et gratuit appelé Tomcat est disponible dans le cadre du projet Apache • L'objet représentant la requête HTTP s'appèle HttpServletRequest. La réponse HTTP est représentée par l'objet HttpServletResponse. • Les programmes côté serveur récupèrent leurs entrées à partir de HttpServletRequest et écrivent leurs sorties dans HttpServletResponse • Pour retourner du code HTML, on doit définir un flôt séquentiel de caractères à partir de l'object HttpServletResponse Browser Web Tomcat HttpServletRequest /admin/* servlet 1 /vignette/*.html HttpServletResponse /examples/*.html servlet 2 Conteneur de Servlets

  11. Rappels concernant HTTP • Hyper Text Transfert Protocol (HTTP) • protocole de RPC pour le web, sans état • accès et récupération de ressources • nommage des ressources : URL • les données transmises sont décrites au moyen des types MIME • messages • HTTP 1.0 : GET, POST, HEAD • HTTP 1.1 (depuis juin 1999) : Rajout de PUT, DELETE, OPTIONS, TRACE Requête(GET …) Réponse Navigateur Serveur

  12. Structure d’une requête HTTP • Anatomie d’une requête : • ligne de requête • commande : GET, POST • nom de la ressource • version du protocole (ex. HTTP/1.1) • champs d’en-tête: informations additionnelles concernant la requête et le client (nom:valeur) • Ligne vide • corps de la requête: informations supplémentaires (plutôt pour les POST) • Requêtes GET • Variables visibles dans l'URL • Limitation de la taille (dépend de l'OS) • Simplicité d'extraction des données • Données dans le fichier log • Requêtes POST • Les variables ne sont pas visibles dans l'URL • Les variables sont envoyées dans les entêtes HTTP • Pas de limitation de la taille • Possibilité d'upload

  13. Structure d’une réponse HTTP • Anatomie d’une réponse : • ligne de requête • version du protocole (ex. HTTP/1.0) • statut de la réponse (ex. 404) • explication du statut (ex. not found) • champs d’en-tête • informations additionnelle concernant le serveur et le document retourné (syntaxe = nom:valeur) • corps de la requête • la ressource retournée (page HTML) • Statut des réponse • 100-199 : informations • 200-299 : Requête réussie • 200 : OK, 204: No Content, 205: Reset Content • 300-399 : Requête redirigée, ou d'autres actions nécessaires • 400-499 : requête incomplète • 401 : UnAuthorized, 403: Forbidden, 404 : Not Found, 407: Proxy Authentification Required • 500-599 : Réponse incomplète ou erronée (erreur du serveur) • 500 : Internal Server Error, 501 : Not Implemented

  14. La ServletRequest et la ServletResponse • L'interface ServletRequest permet de récupérer les paramètres de la requête : public abstract int getContentLength() public abstract String getContentType() public abstract String getProtocol() public abstract String getScheme() public abstract String getServerName() public abstract int getServerPort() public abstract String getRemoteAddr() public abstract String getRemoteHost() public abstract ServletInputStream getInputStream() throws IOException public abstract String getParameter(String name) public abstract String[] getParameterValues(String name) public abstract Enumeration getParameterNames() public abstract Object getAttribute(String name) • L'interface ServletResponse permet de renvoyer une réponse : public abstract void setContentLength(int length) public abstract void setContentType(String type) public abstract ServletOutputStream getOutputStream() throws IOException

  15. HTTP : Informations sur la requête protectedvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse) throwsServletException,IOException{ response.setContentType("text/plain"); PrintWriterout=response.getWriter(); out.println("Protocol: "+request.getProtocol()); out.println("Scheme: "+request.getScheme()); out.println("ServerName: "+request.getServerName()); out.println("ServerPort: "+request.getServerPort()); out.println("RemoteAddr: "+request.getRemoteAddr()); out.println("RemoteHost: "+request.getRemoteHost()); out.println("Method: "+request.getMethod()); out.println("requestuestURI: "+request.getRequestURI()); out.println("ServletPath: "+request.getServletPath()); out.println("PathInfo: "+request.getPathInfo()); out.println("PathTranslated: "+request.getPathTranslated()); out.println("QueryString: "+request.getQueryString()); out.println("RemoteUser: "+request.getRemoteUser()); out.println("AuthType: "+request.getAuthType()); } GET, POST, PUT etc. Chemin virtuel complet Chemin de la servlet Chemin de laressource Chemin sur le serveur

  16. Descripteur de déploiement Le fichier web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <display-name>Mon application Web</display-name> <servlet> <servlet-name>maServlet</servlet-name> <servlet-class>mRomdhani.MaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>*.test</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>maServlet</servlet-name> <url-pattern>/toto</url-pattern> </servlet-mapping> </web-app> nom de la servlet nom de la servlet nom de la servlet URI d’accès URI d’accès

  17. Le cycle de vie d’une Servlet 1. la servlet est crée puis initialisée init() • Cette méthode n’est appelée par le serveur qu’une seule fois lors du chargement en mémoire par le moteur (ou conteneur) de servlet 2. le service du client est implémenté service() • Cette méthode est appelée automatiquement par le serveur à chaquerequête de client 3. la servlet est détruite destroy() • Cette méthode n’est appelée par le serveur qu’une seule fois à la fin permet de libérer des ressources (allouées par init() )

  18. Un exemple de Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Mon adorable Servlet </title> </head>"); out.println("<body><h1>Bienvenue à l’INSAT </h1>"); out.println("</body>"); out.println("</html>"); } }

  19. Les méthodesdoGet()etdoPost() Utiliser les objets HttpServletRequest etHttpServletResponse passés en paramètres de ces méthodes pour implémenter le service : • HttpServletRequest contient les renseignements sur le formulaire HTML initial (utile pour doPost()) - La méthode getParameter() récupère les paramètres d’entrée • HttpServletResponse contient le flux de sortie pour la génération de la page HTML résultat (getWriter() )

  20. Les Java Server Pages(JSP)

  21. Les JSP (Java Server Pages) <HTML> <HEAD> <TITLE>Ma toute première JSP</TITLE> </HEAD> <BODY> <H1> Ceci est ma toute première JSP </H1> Nous sommes le : <% java.util.Date d = new java.util.Date(); out.println(d.toString()); %> <P> Au revoir et à bientôt </BODY> </HTML>

  22. Balises JSP dans HTML Trois types de balises: 1 – Les scriptlets: du code java 2 – Les directives: pour le contrôle de la structure 3 – Les actions: pour le contrôle de la logique lors de l'appel à la page

  23. Les scriptlets : Les expressions Syntaxe :<%= expression %> Exemple : Il est <%= new java.util.Date() %> <P> et votre hostname est <%= request.getRemoteHost() %> • Ceci permet d’intégrer des valeurs dans le code HTML • Les valeurs sont évaluées, converties en chaînes de caractères et affichées • Les objets implicites (request, response, session, out, ...) disponibles

  24. Les scriptlets : Les Scriptlets Syntaxe : <% code Java %> (scriplets) Exemple : <% String nom = request.getParameter("nom"); ... out.println("Nom de l'utilisateur " + nom); %> • C’est un bloc de code Java • Il est placé dans _jspService() de la servlet générée ayant accès : • aux variables et beans déclarés ( <%! … %> ) • aux objets implicites

  25. Directives Syntaxe : <%@directive attribut1="valeur" attribut2="valeur"... %> 3 directives possibles : • page : informations relatives à la page • include : fichiers à inclure littéralement • taglib : importer des bibliothèques de balises

  26. Actions - Syntaxe à la XML - Permettent de faire des actions au moment où la page est demandée par un client • Inclure dynamiquement un fichier • Utiliser des JavaBeans • Rediriger vers une autre page

  27. Actions (suite) <jsp:include page="relative URL" flush="true" /> • Inclusion au moment où la page est servie, pas au moment où • elle est traduite en servlet. <jsp:usebean id="name" class="package.class" /> • permet d'instancier un bean depuis une page JSP. • associé à <jsp:getProperty.../> et <jsp:setProperty.../> <jsp:forward page="/unAutreURI" /> • redirige vers un autre URI/URL <jsp:plugin /> • Appèle le plugin Java à l’intérieur du navigateur

  28. Objets implicites Ce sont des variables prédéfinies accessibles dans lesscriptlets : • request : le HttpServletRequest • response : le HttpServletResponse • session: le HttpSession • out : flot de sortie (idem response.getWriter()) • application : le ServletContext (idem) • config : le ServletConfig de la page

  29. Les JavaBeans

  30. Notion de JavaBean • Un JavaBean est un POJO qui définit des méthodes qui exécuteront la logique métier afin décharger la servlet ou la JSP de le faire. • Se conformer aux design pattern MVC qui vise la séparation des propos afin de faciliter la maintenance des applications Web • Un JavaBean est un composant Java permettant de réaliser un traitement métier spécifique • Attributs simples • Méthodes set/get permettant l’introspection • En simplifiant, on peut voir les JavaBeans comme des classes semblables aux autres, si ce n'est qu'ils proposent des méthodes « accesseurs » pour accéder à leurs attributs. • Les JavaBeans sont crées automatiquement et gérées par le conteneur • Les JavaBeans sont déployés sous WEB-INF/classes

  31. JSP et les JavaBeans • Développer le Bean et le déployer sous WEB-INF/classes • Référencer le Bean dans la JSP avec l'action <jsp:usebean …/> <HTML> <HEAD><TITLE>Test du Bean </TITLE></HEAD> <BODY> <jsp:useBean id="MonBean" scope="session" class="produits.Produit" type="produits.Produit"/> Définition de la marque et du prix :<P> <jsp:setProperty name="MonBean" property="marque" value="Dell" /> <BR> <jsp:setProperty name="MonBean" property="prix" value="2900" /> <BR> Récupération de la marque et du prix du produit :<P> La marque est:<jsp:getProperty name="MonBean" property="marque" /> <BR> Le prix est:<jsp:getProperty name="MonBean" property="prix" /> <BR> </BODY> <HTML> package produits; public class Produit { private String marque; private int prix ; public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; } public int getPrix() { return prix; } public void setPrix(int prix) { this.prix = prix; } }

  32. Usebean et getProperty()/getProperty() • Mécanisme très puissant ! <jsp:usebean id="name" (référence l'instance du composant) class="paquetage.class" (nom qualifié de la classe) scope="page|request|session|application" (portée) /> • Pour lire une propriété du bean : <jsp:getProperty name="name" property="property"   /> • Pour modifier une propriété du bean : <jsp:setProperty name="name" property="property"  value="valeur" /> Pour modifier tous les attributs avec les paramètres HTTP de même nom :<jsp:setProperty name="name" property= * />

  33. Les Filtres HTTP

  34. Les filtres Requête Requête Requête Réponse Réponse Réponse Filtre Filtre Servlet Hello World Hello World Filtré

  35. Les filtres Il est possible d’ajouter des filtres qui seront exécutés avant les servlets <filter> <filter-name>footer</filter-name> <filter-class>fr.umlv.servletdemo.FooterFilter</filter-class> </filter> <filter-mapping> <filter-name>footer</filter-name> <url-pattern>/filter/*</url-pattern> </filter-mapping> <filter-mapping> <filter-name>footer</filter-name> <servlet-name>hello</servlet-name > </filter-mapping> Filtre à partir d’un URL Filtre à partir d’une servlet

  36. Les filtres Des wrappers permettent d’interagir avec la servlet publicvoiddoFilter(ServletRequestrequest,ServletResponseresponse, FilterChainchain)throwsIOException,ServletException{ response.setContentType("text/html"); PrintWriterout=response.getWriter(); out.println("<html><body bgcolor=\"white\"><h1>"); HttpServletResponseWrappernewResponse=newHttpServletResponseWrapper( (HttpServletResponse)response){ publicvoidsetContentType(StringcontentType){ } }; chain.doFilter(request,newResponse); // context.getRequestDispatcher("/footer.html").include(request,response); out.println("</h1></body></html>"); } Exécuté avant Appelle les autres filtresou la servlet Exécuté après

  37. Le design pattern MVC2

  38. MVC 1 et MVC 2 • MVC Model 1 et MVC Model 2 différent essentiellement en ce qui concerne l'entité responsable au traitement de la requête. • Dans le Model 1, c'est la JSP qui se charge de la requête • Dans le Model 2, c'est une servlet (Controller) qui fait le travail • Un seul contrôleur frontal • Un ensemble de contrôleurs spécialisés MVC Model 1 MVC Model 2

  39. Application Web selon le MVC2 • L ’architecture MVC (Model-View-Controller) a pour but d ’organiser une application interactive en séparant : • les données -> le modèle constitué des objets métiers • la représentation des données -> la vue qui restitue les informations vers l'utilisateur • le comportement de l ’application -> le contrôleur chargé de l'acquisition d'informations en provenance de l'utilisateur • Organisation du MVC1 (Model1) • Modèle : JavaBeans • Vue : Pages JSP • Contrôleur : Page JSP • Organisation du MVC2 (Model2) • Modèle : JavaBeans • Vue : Pages JSP • Contrôleur : Servlet qui dirige les actions à effectuer en fonction de la requête émise par le client

More Related