+++ /dev/null
-<?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 © 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'><");
- code = code.replace (/>>>/g,"></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><%@ … %></tt> (options HTML,
- import de packages, …)</li>
- <li>Balise de déclarations : <tt><%! … %></tt> (déclarer des
- attributs et des méthodes)</li>
- <li>Balises d'instructions : <tt><% … %></tt> (permet de mettre
- une suite d'instructions)</li>
- <li>Balises d'expressions : <tt><%= … %></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<String, String[]><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 class="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 class="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></p>
-</div>
-</body>
-</html>