.
authorKim Nguyễn <kn@lri.fr>
Mon, 3 Nov 2014 12:43:01 +0000 (13:43 +0100)
committerKim Nguyễn <kn@lri.fr>
Mon, 3 Nov 2014 12:43:01 +0000 (13:43 +0100)
xpi/xpi_08.xhtml [new file with mode: 0644]

diff --git a/xpi/xpi_08.xhtml b/xpi/xpi_08.xhtml
new file mode 100644 (file)
index 0000000..98f30fd
--- /dev/null
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+          "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
+>
+<html xmlns="http://www.w3.org/1999/xhtml" >
+  <head>
+    <title>JSP</title>
+
+    <meta http-equiv="Content-Type"
+          content="text/html; charset=utf-8" />
+    <meta name="copyright"
+          content="Copyright &#169; 2013 Kim Nguyễn" />
+
+    <!-- Load jQuery -->
+    <script src="../jquery-1.9.1.min.js" type="text/javascript" ></script>
+    <!-- Load the library -->
+    <script src="../simpleWebSlides.js" type="text/javascript" ></script>
+
+    <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css"  media="all" />
+    <!-- Load a custom Theme, the class-element marks this style-sheet
+      a "theme" that can be swtiched dynamicaly -->
+    <link class="sws-theme" rel="stylesheet"  title="U-Psud style"  href="../themes/uPsud.css" type="text/css" />
+
+    <!-- Customize some templates and initialize -->
+    <style type="text/css">
+      .xml-tag { color: #00486c; }
+    </style>
+    <script type="text/javascript">
+      <![CDATA[
+      SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
+      SWS.Config['sws-object-deactivate'] =  SWS.Effects.objectDeactivateFadeOut;
+      SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
+
+      //Ensures that we load SWS at the very end, after MathJax has
+      //been initialized
+
+      $(window).load(function () {
+       $(".inline-xml").each(function(i, elem)
+      {
+      var jelem = $(elem);
+      var code = jelem.html();
+      code = code.replace ("<![CDATA" + "[", "").replace ("]" + "]>", "");
+      code = code.replace (/>/g, ">>>");
+      code = code.replace (/</g, "<span class='xml-tag'>&lt;");
+      code = code.replace (/>>>/g,"&gt;</span>");
+
+      jelem.html(code);
+      });
+  });
+
+      var checkSVG = function (o, i)
+      {
+            if (i >= 10 || SWS.Utils.isUndefined(o) || o == null) return;
+            var svg = o.getSVGDocument();
+            if (svg == null) {
+              setTimeout(function() { checkSVG(o, i+1); }, 200);
+            } else {
+         var alltext = $(svg).find("text");
+         alltext.css("font-family", "DIN");
+         alltext.css("font-size", "70%");
+
+            };
+      };
+      $(window).load(function() {
+      $("embed").ready(function() {
+         setTimeout(function() {
+         $("embed").each(function(i, o) { checkSVG(this,0);   });
+}, 1000);
+        });
+     });
+      $(window).load(SWS.Presentation.init);
+
+       ]]>
+
+    </script>
+
+  </head>
+  <body>
+    <a href="xpi_07.xhtml" class="sws-previous"/>
+    <div class="sws-slide sws-cover sws-option-nofooter">
+      <h1>XML et Programmation Internet</h1>
+      <h1>Cours 8</h1>
+      <a href="mailto:kn@lri.fr">kn@lri.fr</a>
+    </div>
+    <h1>Principe</h1>
+    <div class="sws-slide">
+      <h1>Programmation Web coté serveur</h1>
+      <p>(rappel) génération de pages-web dynamiques (<i>i.e.</i> dont
+      le contenu est calculé en fonction de la requête
+      HTTP). Plusieurs choix de langage côté serveur.
+      </p>
+      <ul>
+       <li>PHP (déploiement de site très simple,
+         langage <span style="text-decoration:line-through">merdique</span>
+         particulier)
+       </li>
+       <li>Python, Ruby (manque de standardisation, plusieurs
+       framework concurrents, problèmes de performances)</li>
+       <li>ASP .NET (microsoft) </li>
+       <li><a>Java/JSP</a> (langage raisonnable, déploiement complexe)</li>
+      </ul>
+
+  </div>
+    <div class="sws-slide">
+      <h1>JSP</h1>
+      <p>JSP (Java Server Pages) est un <i>framework</i> permettant de
+       créer des pages Web dynamiques en Java. Il fait partie de la
+       suite Java EE (Entreprise Edition). Rappel :
+      </p>
+      <ul>
+       <li>Java Card (Java pour cartes de crédit, très peu de choses,
+       pas de GC)</li>
+       <li>Java ME (Micro Edition, pour les périphériques embarqués,
+       mobiles, etc.)</li>
+       <li>Java SE (Standard Edition, java « normal »)</li>
+       <li>Java EE (Entreprise Edition, SE + packages pour JSP, et autres)</li>
+      </ul>
+    </div>
+    <div class="sws-slide">
+      <h1>Architecture</h1>
+      <p>Nécessite un serveur Web particulier. Le standard est Apache Tomcat.</p>
+      <ul>
+       <li>Le programmeur écrit des fichiers <tt>.jsp</tt>, contenant
+         du HTML + du java dans des balises spéciales</li>
+       <li>(Le programmeur déploie les fichiers sur le serveur
+         Tomcat)</li>
+       <li>L'utilisateur navigue vers une page <tt>foo.jsp</tt></li>
+       <li>Le serveur Tomcat génère <tt>fooServlet.class</tt></li>
+       <li>La classe est chargée dans la JVM java et (sa métode
+         principale) est exécutée, produisant une page HTML</li>
+       <li>La page HTML est envoyée au navigateur</li>
+      </ul>
+    </div>
+    <div class="sws-slide">
+      <h1>Exemple</h1>
+      <code class="background:white;">
+ <![CDATA[<%@ page contentType="text/html; charset=UTF-8" %>
+
+ <!DOCTYPE html>
+ <html>
+ <head><title>test JSP</title>
+       <meta charset="UTF-8"/>
+ </head>
+ <body>
+ Page created on
+ <%]]>
+       java.util.Date d = new java.util.Date();
+       <s>out</s>.println(d.toString());
+ <![CDATA[%>
+ </body>
+ </html>]]></code>
+    </div>
+<div class="sws-slide">
+<h1>balises spéciales JSP</h1>
+<p>JSP introduit 4 balises spéciales qui sont interprétée par le
+  serveur Tomcat.
+</p>
+<ul>
+  <li>Balise de configuration : <tt>&lt;%@ … %&gt;</tt> (options HTML,
+  import de packages, …)</li>
+  <li>Balise de déclarations : <tt>&lt;%! … %&gt;</tt> (déclarer des
+  attributs et des méthodes)</li>
+  <li>Balises d'instructions : <tt>&lt;% … %&gt;</tt> (permet de mettre
+  une suite d'instructions)</li>
+  <li>Balises d'expressions : <tt>&lt;%= … %&gt;</tt> (permet de mettre
+  une expression dont le résultat est converti en <tt>String</tt>)</li>
+</ul>
+</div>
+    <div class="sws-slide">
+      <h1>Exemple complet</h1>
+      <code style="background:white;">  <![CDATA[<%@ page contentType="text/html; charset=UTF-8" %>
+  <%@ page import="java.util.Date" %>
+  <!DOCTYPE html>
+  <html>
+  <head><title>test JSP</title>
+        <meta charset="UTF-8"/>
+  </head>
+  <%!
+         Date maDate;
+
+         Date maMethode() {
+             return new Date();
+         }
+  %>
+   <body>
+  <%
+     maDate = maMethode();
+  %>
+   Page created on <%= maDate %>
+  </body>
+  </html>]]></code>
+    </div>
+<div class="sws-slide">
+  <h1>Objets par défaut</h1>
+<p>Le code placé dans les balises spéciales a accès à certains objets
+  automatiquement déclarés. Parmi les principaux :
+</p>
+<ul>
+  <li><tt>out</tt> de type <tt>JspWrite</tt>
+  (comme <tt>System.out</tt> mais écrit dans la page Web générée
+  </li>
+  <li><tt>session</tt> de type <tt>HttpSession</tt> : permet de
+  définir et récupérer des variables de sessions (i.e. Objets que l'on
+  stocke « globalement » et que l'on peut récupérer d'une page à
+  l'autre)</li>
+  <li><tt>request</tt> de type <tt>HttpServletRequest</tt> : permet
+  de récupérer les paramètres passés dans une requête HTTP (par
+  exemple les valeurs d'un formulaire)</li>
+  <li><tt>response</tt> de type <tt>HttpServletResponse</tt> : permet
+    de spécialiser la réponse envoyée au client (en-têtes HTTP,
+    cookies, …)</li>
+</ul>
+</div>
+
+<div class="sws-slide">
+  <h1>Classe JspWriter</h1>
+  <p>Fonctionne comme <tt>System.out</tt> (on peut donc
+    appeler <tt>.print/.println</tt>) mais correspond a un endroit
+    particulier de la page HTML</p>
+</div>
+
+<div class="sws-slide">
+<h1>Classe HttpSession</h1>
+<p>Propose plusieurs méthodes : </p>
+<code style="background:white">  //Renvoie la valeur stockée sous le nom name
+  Object <u>getAttribute</u>(String name)
+
+  //Stocke l'objet value sous le nom name
+  void <u>setAttribute</u>(String name, Object value)
+
+  //Supprime l'association name value
+  void <u>removeAttribute</u>(String name)
+
+  //Définit la durée (en secondes) d'inactivité d'une session
+  void <u>setMaxInactiveInterval</u>(int interval)
+
+  //Renvoie la durée (en secondes) d'inactivité d'une session
+  int <u>getMaxInactiveInterval</u>()
+
+  //Renvoie la date (en mili-secondes depuis EPOCH) de dernière utilisation
+  long <u>getLastAccessedTime</u>()
+
+  //Détruit la session en cours
+  void <u>invalidate</u>()</code>
+</div>
+<div class="sws-slide">
+<h1>Classe HttpServletRequest</h1>
+<p>Propose plusieurs méthodes : </p>
+<code style="background:white">  //Récupère la valeur des cookies:
+  String[] <u>getCookies()</u>
+
+  //Récupère les paramètres passés par un formulaire :
+  Map&lt;String, String[]&gt;<u>getParameterMap</u>()
+
+  //Récupère un paramètre particulier
+  String[]<u>getParameter</u>(String name)
+</code>
+</div>
+<div class="sws-slide">
+<h1>Classe HttpServletResponse</h1>
+<p>Propose plusieurs méthodes : </p>
+<code style="background:white">  //Renvoie une erreur HTTP (404 par exemple)
+  void <u>sendError(int code)</u>
+
+  //Ajoute un cookie au site
+  void <u>addCookie</u>(Cookie c)
+
+  //Effectue une redirection temporaire
+  void <u>sendRedirect</u>(String url)
+</code>
+</div>
+<div class="sws-slide">
+<h1>Classe Cookie</h1>
+<p>Propose plusieurs méthodes : </p>
+<code style="background:white">  //Constructeur
+  <u>Cookie</u>(String name, String value)
+
+  //Expiration en secondes
+  void <u>setMaxAge</u>(int a)
+</code>
+</div>
+<h1>Spécificités de Tomcat</h1>
+<div cass="sws-slide">
+  <h1>Chemins par défaut</h1>
+<p>Par défaut le serveur Tomcat tourne sur le port 8080 (configurable)</p>
+<ul>
+  <li><tt>/var/lib/tomcat/webapps/toto/</tt> correspond à l'URL
+    <tt>http://domaine:8080/toto</tt>
+</li>
+  <li><tt>/var/lib/tomcat/webapps/toto/WEB-INF/</tt> contient des
+  fichiers de configuration</li>
+  <li><tt>/var/lib/tomcat/webapps/toto/WEB-INF/classes/</tt> contient des
+  fichiers <tt>.class</tt> auxiliaires</li>
+</ul>
+<p>(ce sera configuré légèrement différement au PUIO)</p>
+</div>
+<h1>Accès aux classes JSP</h1>
+<div cass="sws-slide">
+  <p>Il faut avoir le fichier <tt>jsp-api.jar</tt> dans le
+  classpath</p>
+<code> javac -cp /chemin/vers/jsp-api.jar MaClasse.java </code>
+<p>On peut ensuite copier le <tt>.class</tt>
+  dans <tt>WEB-INF/classes</tt>
+</div>
+</body>
+</html>