1 / 48

ARCHITECTURE WEB – COURS III

ARCHITECTURE WEB – COURS III. ARCHITECTURE WEB. Laurent.granie@free.fr Franck.legendre@lip6.fr (01 44 27 88 77). OBJECTIFS. Introduction à un langage objet pour le Web Montrer les avantages de l’objet appliqué au Web Serveurs d’applications. PLAN. Java et le Web Les Servlets Les JSP.

Download Presentation

ARCHITECTURE WEB – COURS III

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. ARCHITECTURE WEB – COURS III ARCHITECTURE WEB Laurent.granie@free.fr Franck.legendre@lip6.fr (01 44 27 88 77) Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  2. OBJECTIFS • Introduction à un langage objet pour le Web • Montrer les avantages de l’objet appliqué au Web • Serveurs d’applications Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  3. PLAN • Java et le Web • Les Servlets • Les JSP Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  4. Java et le Web • Java et le Web • Applets, Servlets, JSP • Apports de Java pour le Web • Les serveurs de servlets Java • Les Servlets • Les JSP Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  5. Java et le Web • Applet Java • « Petite Application » Java compilée • Téléchargée à partir d’un serveur Web • Exécution sécurisée par la JVM du client Web • Servlets • Équivalent du CGI pour Java avec des extensions • Application Java compilée • Réside sur le serveur • Exécution par la JVM du serveur • Java Server Pages (JSP) • Langage de script Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  6. Java et le Web (2) • Quel est l’apport de Java pour le web? • Langage de haut niveau (OO) • Un ensemble de classes/packages dans l ’API • HTTP • Servlet/Jsp • De l’objet dans le web… • Encapsulation du protocole • Objets request, response • Accesseurs sur des attributs d’objets plutôt que sur des chaînes de caractères • Gestion plus fine et plus simple des fonctionnalités • Authentification, session ... Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  7. Java et le Web (3) Client Web Serveur Web HTTP Servlet container Servlet1 Servlet2 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  8. Les serveurs de servlet • Tomcat, Jakarta Project (gratuit) • Open Source • Respecte toujours les dernières spécifications des normes • WebSphere Application Server ($795 à $6000) • BEA Weblogic Application Server ($4000) • Écrit entièrement en Java • Allaire Jrun Web Server • Gratuit pour une utilisation non commerciale • iPlanet Web Server Entreprise Edition ($1495/processeur) • Netscape/Sun • Une des meilleures implantations d’un serveur de Servlet Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  9. Le serveur applicatif Tomcat • Jakarta (http://jakarta.apache.org) • Ensemble de projets Open Source autour d’Apache et Java • Librairies, outils, Api (Ant, Log4j, Taglibs, …) • Frameworks, moteurs (Struts, Turbine, cactus, …) • Serveurs d’applications (Tomcat, Jetspeed, James, …) • Respect des normes du W3C • Tomcat 4.x • Java Servlet 2.2 • Java Server Page 1.2 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  10. Les Servlets • Java et le Web • Les Servlets • Rappel sur le CGI • Introduction aux Servlets • Structure et exemples • API • Gestion des sessions (Session Tracking) • Les JSP Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  11. Rappel sur les formulaires et CGI Client Web Serveur Web HTML/HTTP CGI Script CGI 1- Requête Chargement du formulaire 2- Envoi Complètement puis 3- Validation 4- Envoi vers CGI Traitement des données 5- Expédition sortie Réception sortie (HTML) 6- Envoi sortie Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  12. Exemple de CGI • Affiche les variables d’environnement #!/bin/bash # Affiche les variables d’environnement # #En-tête HTTP echo “Content-type: text/html“ echo “” echo “” #Corps HTTP echo "<html>" echo "<body>" echo "<h1>Variables CGI</h1>" echo "<pre> " # #La commande set affiche les variables d’environnement # set # #Fermeture des balises ouvertes echo "</pre>" echo "</body> " echo "</html> " Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  13. Les Servlets • Modèle objet des servlets Objet Session • getAttribute Servlet1 Objet Request Objet Response • getParameter • getAttribute • getHeaders • getCookies • setBufferSize • setHeader • setRedirect Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  14. Les Servlets (2) • Parallèle CGI / servlet • Procédurale (C, script shell, perl, …) / OO • Avantages des servlets • Efficacité : • CGI : 1 utilisateur / 1 processus • Servlet • Initialisation = JVM • Processus légers (thread) • Système // objet • Convivialité • Pas de nouveau langage (!) • Langage OO, haut niveau Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  15. Les Servlets (3) • Puissances • Fonctionnalités dans l’API • HTTP est invisible pour le programmeur (protocole de transport) • Facilités de l’API Java (JDBC, caching, tracking, …) • Portabilités (API standard) • Code indépendant du système • Code indépendant du serveur d’applications • Une servlet est du bytecode Java (.class) • Elle doit être compilée! (javac) Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  16. Les Servlets - structures • MaServlet.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MaServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Objet "request" permet de lire l’en-tête HTTP (ex: cookies, …) // ainsi que les données d’un formulaire HTML // Objet "response" permet de spécifier la réponse (en-tête HTTP) comme // le type des données en retour (Cf. content-type) PrintWriter out = response.getWriter(); // objet out permet de renvoyer le contenu HTML au navigateur client } } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  17. Les Servlets - exemples • HelloWWW.java import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); } } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  18. Les Servlets – exemples (2) • UtilitaireServlet.java package monPackage; public class UtilitaireServlet { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  19. Les Servlets – exemples (3) • HelloWWW2.java package monPackage; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(UtilitaireServlet.headWithTitle("Hello WWW") + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); } } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  20. API javax.servlet.* • Javax.servlet.HttpServlet • Méthode d’initialisation • Init() • Traitement et réponse à une requête HTTP GET • doGet(HttpServletRequest request, HttpServletResponse response) • Traitement et réponse à une requête HTTP POST • doPost(HttpServletRequest request, HttpServletResponse response) • Traitement et réponse à une requête HTTP GET ou POST • service(HttpServletRequest request, HttpServletResponse response) Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  21. API javax.servlet.*(2) • Objets utiles et fonctionnement de base • javax.servlet.http.HttpServletRequest • Gestion de la requête HTTP • Lire des données d’un formulaire / URL • Lire l’entête HTTP • Méthodes sur Header • Enumeration getHeaderNames() • Méthodes sur données d’un formulaire et des cookies • Enumeration getParameterNames() • String getParameter(String nomParam) • String[] getParameterValues(String nomParam) • Cookie[] getCookies() • Variables CGI • String getRemoteHost() • String getMethod() • String getQueryString() • Enumeration getHeaderNames() Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  22. API javax.servlet.*(3) • javax.servlet.http.HttpServletResponse • Méthodes sur le code de retour (status code) • Les codes de retour sont des attributs static • Ex : response.sendError (int code, String message) • Méthodes sur Header • setContentType(String type) • setContentLength() • addCookie(Cookie cookie) • sendRedirect(String location) • SetHeader(String name, String value) • Méthodes sur les données (corps HTTP) • PrintWriter getWriter() Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  23. Formulaires et Servlets • Lecture de trois paramètres package monPackage; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.util.*; public class TroisParams extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = « Lecture de trois paramètres d’un formualire"; out.println(ServletUtilities.headWithTitle(title) + …. …. Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  24. Formulaires et Servlets (2) • Lecture de trois paramètres (suite) "<BODY>\n" + "<H1 ALIGN=CENTER>" + title + "</H1>\n" + "<UL>\n" + " <LI>param1: " + request.getParameter("param1") + "\n" + " <LI>param2: " + request.getParameter("param2") + "\n" + " <LI>param3: " + request.getParameter("param3") + "\n" + "</UL>\n" + "</BODY></HTML>"); } public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request, response); } } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  25. API javax.servlet.*(4) • javax.servlet.http.Cookie • Constructeur • Cookie Cookie(String name, String value) • Accesseurs sur attributs d’un Cookie • String getName() • String getValue() • setValue(String newValue) • Exemple d’envoie d’un cookie au client Cookie userCookie = new Cookie(" user " , " uid1234"  ); Response.addCookie(userCookie); Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  26. Session Tracking • Le protocole HTTP bien que persistant est un protocole sans état (respect des propriétés des transactions pour le télécommerce) • Solutions • Problème: bien que simple dans leur implantation, mécanisme complexe sont nécessaires • Cookie (solution la plus répandue) • URL rewriting • Hidden form fields • <input type=«hidden» name=« session » value=« valeur »> • Session tracking API (HttpSession API) • Offre une interface de haut niveau pour gérer ces solutions Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  27. Session Tracking (2) • Créer une session • HttpSession session = request.getSession(true) • Obtenir des informations sur une session • boolean isNew() • Obtenir l’identifiant d’une session • String getId() • Obtenir la date de création d’une session • Long getCreationTime() … • Associer des informations à une session • Associer un objet à une session: • setAttribute(String name, Object objet) • Retourne un objet à partir d’une clé: • Object getValue(String name) Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  28. Session Tracking - exemple • Gestion d’un caddy HttpSession session = request.getSession(true); //Ici on écrase la précédente valeur de la page de référence session.setAttribute("referringPage", (String)request.getHeader("Referer")); Caddy articles = (Caddy)session.getAttribute("articles"); if (articles == null) { articles = new Caddy(...); } String itemID = request.getParameter("itemID"); articles.addArticles(Catalog.getArticles(itemID)); // On fait un setAttribute pour sauvegarder le caddy au cas où // c’est la création du caddy. Ici, on met maj le Caddy session.setAttribute("articles", (Caddy) articles); Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  29. Les JSP • Java et le Web • Les Servlets • Les JSP Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  30. Les JSP • Parallèle avec les langage de scripts PHP ou ASP • Langage de script • Au sein du code HTML, on insert du code java qui sera compilé (lors du premier accès à une page JSP) • Exécutées sur le serveur • Extensible via des librairies de tag existantes ou définis par le développeur • Avantages par rapport au Servlet et CGI • Une page dynamique générée par un CGI ou une servlet possède toujours une partie statique • Les JSP permettent de bien séparer les deux Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  31. Les JSP - exemples • Mapage.jsp <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD> <TITLE>Bienvenue au cours d’architecture Web</TITLE> </HEAD> <BODY> <H1>Bienvenue</H1> <SMALL>Bonjour, <!– getUserName renvoie le nom de l’utilisateur associé à son cookie --> <% out.println(Utils.getUserNameFromCookie(request)); %> Pour accéder au serveur Tomcat, cliquer <A HREF=« http://tparchiweb:8080">ici.</A></SMALL> <P> <!– Reste de la page --> </BODY> </HTML> Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  32. Les JSP (2) • Vie d’une JSP • Le serveur d’applications (tomcat) transforme le fichier .jsp en source java • Le code source correspond au code d’une servlet • Le HTML est transformé en • out.print(« mon code HTML ») • Le code java est transformé et inclus dans le corps de la méthode servlet.service() • Le fichier java est ensuite compilé en .class • la servlet est prête à être exécutée • Importance du serveur d’applications dans la phase de génération du code (respect de l’API et de ses spécifications) Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  33. Les JSP – exemple de code généré • Mapage.java public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { printWriter out = response.getWriter(); out.println(" <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">\n"); … out.println(Utils.getUserNameFromCookie(request)); ... out.println("Pour accéder au serveur Tomcat, cliquer"); out.println("<A HREF="http://tparchiweb:8080">ici.</A></SMALL>"); … out.println("</HTML>"); out.close(); } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  34. Les JSP (3) • Balises • JSP Expressions • <%= expression java %> • out.print(expression java) • JSP Scriptlets • <% … %> • Code java inclus dans le corps de la méthode service() • JSP Déclarations • <%! Java code %> • Déclaration d’attributs ou de méthodes de la classe servlet générée • Ex : redéfinition de la méthode init() Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  35. Les JSP (4) • JSP Directives • JSP page directive • Ensemble de raccourcis vers des attributs du protocoles HTTP et du contenu HTML • Content-Type • Session • isErrorPage • JSP include directive • Inclus un fichier dans la jsp juste avant la génération du code java • ex : header, tailer, menu, … • Actions • jsp:include • Inclus une page(URL) au moment ou la servlet répond à une requête • Inclusion dynamique de contenu • choix dynamique de la page à inclure : l ’attribut page peut être une expression java • si la page est une jsp, celle-ci est executée avant d ’être incluse Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  36. Les JSP (5) • jsp:useBean, jsp:setProperty et jsp:getProperty • Instancie un objet et l’initialise en dehors d’une JSP Scriptlet • jsp:forward • Équivaut setLocation() • jsp:plugin • Description XML d’un plugin dans une page HTML • Variables prédéfinies • request, response, out, session, .. • Accesseurs sur des attributs des objets • Servlet • session • Les arguments de la méthode service • request • response Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  37. Les JSP (6) • Limites des JSP • Propreté du code : mélange code applicatif et code de présentation • Ex : connexion JDBC, mise en page, … • Les JSP doivent essentiellement (exclusivement) être utilisées pour la présentation (modèle MVC) • Solution : JSP Action et taglib qui permettent de décrire en XML du code • une JSP est son propre contrôleur • Pas de génération de code dynamique • Problèmes rencontrés lors d’inclusions multiples Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  38. JSP Expressions • Variables ou constantes intégrées dans la page résultat <%= "tralala" %> Code JSP public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... out.print( "tralala" ); … } Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  39. JSP Scriptlets • Bloc de code Java intégrés dans la JSP <% String s = "tralala"; out.print(s); %> Code JSP public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... String s = "tralala"; out.print(s); ... } Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  40. JSP Declarations • Comme en Java <%! String s = "tralala"; public String maMethode(String s) { return "Chaine à traiter : " + s; } %> Code JSP public class test$jsp extends HttpJspBase { String s = "tralala"; public String maMethode(String s) { return "Chaine à  traiter : " + s; } Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  41. JSP Page Directive • Traitées lors de la compilation de la page en servlet: include <%@ page import="java.util.Vector" %> ou <jsp:directive.page import="java.util.Vector"/> Code JSP package org.apache.jsp; import java.util.Vector; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; import org.apache.jasper.runtime.*; public class test$jsp extends HttpJspBase { ... Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  42. JSP Page Directive (2) • Paramètres HTTP <%@ page contentType="text/plain"%> ou <% response.setContentType("text/plain"); %> Code JSP public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... response.setContentType("text/plain"); ... } Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  43. JSP Include Directive • Include Code JSP <%@ include file="file.txt" %> public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... out.write("Contenu du fichier file.txt"); ... } Code Java Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  44. JSP useBean, setProperty, getProperty • Accesseurs et modifieurs d’attributs <jsp:useBean id="monBean" class="test.MonBean"> <jsp:setProperty name="monBean"  property="att1"  value="valeur1"/> <jsp:setProperty name="monBean" property="att2" value="valeur2"/> </jsp:useBean> Code JSP Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  45. JSP useBean, setProperty, getProperty (2) • Code Java public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { ... test.MonBean monBean = null; boolean _jspx_specialmonBean = false; synchronized (pageContext) { monBean= (test.MonBean) pageContext.getAttribute("monBean",PageContext.PAGE_SCOPE); if ( monBean == null ) { _jspx_specialmonBean = true; try { monBean = (test.MonBean) java.beans.Beans.instantiate(this.getClass().getClassLoader(), "test.MonBean"); } catch (ClassNotFoundException exc) { throw new InstantiationException(exc.getMessage()); } catch (Exception exc) { Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  46. JSP useBean, setProperty, getProperty (3) • Code Java (suite) throw new ServletException (" Cannot create bean of class "+"test.MonBean", exc); } pageContext.setAttribute("monBean", monBean, geContext.PAGE_SCOPE); } } if(_jspx_specialmonBean == true) { JspRuntimeLibrary.introspecthelper(pageContext.findAttribute("monBean"), "att1","valeur1",null,null, false); JspRuntimeLibrary.introspecthelper(pageContext.findAttribute("monBean"), "att2","valeur2",null,null, false); } ... } Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  47. Formulaires et JSP • Lecture de deux paramètres <html> <head> <title> Exemple JSP </title> </head> <body> <h1>Exemple JSP </h1> <% String sn1, sn2; int param1,param2; sn1 = request.getParameter(" param1"); sn2 = request.getParameter(" param2"); param1 = Integer.parseInt(sn1); param2 = Integer.parseInt(sn2); out.println("Les paramètres sont: " + sn1 + " et " + sn2); out.println("<br>"); out.println("La somme est égale à: " + (param1+param2)); %> </body> </html> Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

  48. Questions ? ? ? ? ? ? ? Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB

More Related