1 <?xml version="1.0" encoding="utf-8" ?>
2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
3 "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"
5 <html xmlns="http://www.w3.org/1999/xhtml" >
9 <meta http-equiv="Content-Type"
10 content="text/html; charset=utf-8" />
11 <meta name="copyright"
12 content="Copyright © 2013 Kim Nguyễn" />
15 <script src="../jquery-1.9.1.min.js" type="text/javascript" ></script>
16 <!-- Load the library -->
17 <script src="../simpleWebSlides.js" type="text/javascript" ></script>
19 <link rel="stylesheet" href="../simpleWebSlides.css" type="text/css" media="all" />
20 <!-- Load a custom Theme, the class-element marks this style-sheet
21 a "theme" that can be swtiched dynamicaly -->
22 <link class="sws-theme" rel="stylesheet" title="U-Psud style" href="../themes/uPsud.css" type="text/css" />
24 <!-- Customize some templates and initialize -->
25 <style type="text/css">
26 .xml-tag { color: #00486c; }
28 <script type="text/javascript">
30 SWS.Config['sws-slide-change'] = SWS.Effects.slideChangeFadeOutIn;
31 SWS.Config['sws-object-deactivate'] = SWS.Effects.objectDeactivateFadeOut;
32 SWS.Config['sws-object-activate'] = SWS.Effects.objectActivateFadeIn;
34 //Ensures that we load SWS at the very end, after MathJax has
37 $(window).load(function () {
38 $(".inline-xml").each(function(i, elem)
41 var code = jelem.html();
42 code = code.replace ("<![CDATA" + "[", "").replace ("]" + "]>", "");
43 code = code.replace (/>/g, ">>>");
44 code = code.replace (/</g, "<span class='xml-tag'><");
45 code = code.replace (/>>>/g,"></span>");
51 var checkSVG = function (o, i)
53 if (i >= 10 || SWS.Utils.isUndefined(o) || o == null) return;
54 var svg = o.getSVGDocument();
56 setTimeout(function() { checkSVG(o, i+1); }, 200);
58 var alltext = $(svg).find("text");
59 alltext.css("font-family", "DIN");
60 alltext.css("font-size", "70%");
64 $(window).load(function() {
65 $("embed").ready(function() {
66 setTimeout(function() {
67 $("embed").each(function(i, o) { checkSVG(this,0); });
71 $(window).load(SWS.Presentation.init);
79 <a href="xpi_07.xhtml" class="sws-previous"/>
80 <div class="sws-slide sws-cover sws-option-nofooter">
81 <h1>XML et Programmation Internet</h1>
83 <a href="mailto:kn@lri.fr">kn@lri.fr</a>
86 <div class="sws-slide">
87 <h1>Programmation Web coté serveur</h1>
88 <p>(rappel) génération de pages-web dynamiques (<i>i.e.</i> dont
89 le contenu est calculé en fonction de la requête
90 HTTP). Plusieurs choix de langage côté serveur.
93 <li>PHP (déploiement de site très simple,
94 langage <span style="text-decoration:line-through">merdique</span>
97 <li>Python, Ruby (manque de standardisation, plusieurs
98 framework concurrents, problèmes de performances)</li>
99 <li>ASP .NET (microsoft) </li>
100 <li><a>Java/JSP</a> (langage raisonnable, déploiement complexe)</li>
104 <div class="sws-slide">
106 <p>JSP (Java Server Pages) est un <i>framework</i> permettant de
107 créer des pages Web dynamiques en Java. Il fait partie de la
108 suite Java EE (Entreprise Edition). Rappel :
111 <li>Java Card (Java pour cartes de crédit, très peu de choses,
113 <li>Java ME (Micro Edition, pour les périphériques embarqués,
115 <li>Java SE (Standard Edition, java « normal »)</li>
116 <li>Java EE (Entreprise Edition, SE + packages pour JSP, et autres)</li>
119 <div class="sws-slide">
120 <h1>Architecture</h1>
121 <p>Nécessite un serveur Web particulier. Le standard est Apache Tomcat.</p>
123 <li>Le programmeur écrit des fichiers <tt>.jsp</tt>, contenant
124 du HTML + du java dans des balises spéciales</li>
125 <li>(Le programmeur déploie les fichiers sur le serveur
127 <li>L'utilisateur navigue vers une page <tt>foo.jsp</tt></li>
128 <li>Le serveur Tomcat génère <tt>fooServlet.class</tt></li>
129 <li>La classe est chargée dans la JVM java et (sa métode
130 principale) est exécutée, produisant une page HTML</li>
131 <li>La page HTML est envoyée au navigateur</li>
134 <div class="sws-slide">
136 <code class="background:white;">
137 <![CDATA[<%@ page contentType="text/html; charset=UTF-8" %>
141 <head><title>test JSP</title>
142 <meta charset="UTF-8"/>
147 java.util.Date d = new java.util.Date();
148 <s>out</s>.println(d.toString());
153 <div class="sws-slide">
154 <h1>balises spéciales JSP</h1>
155 <p>JSP introduit 4 balises spéciales qui sont interprétée par le
159 <li>Balise de configuration : <tt><%@ … %></tt> (options HTML,
160 import de packages, …)</li>
161 <li>Balise de déclarations : <tt><%! … %></tt> (déclarer des
162 attributs et des méthodes)</li>
163 <li>Balises d'instructions : <tt><% … %></tt> (permet de mettre
164 une suite d'instructions)</li>
165 <li>Balises d'expressions : <tt><%= … %></tt> (permet de mettre
166 une expression dont le résultat est converti en <tt>String</tt>)</li>
169 <div class="sws-slide">
170 <h1>Exemple complet</h1>
171 <code style="background:white;"> <![CDATA[<%@ page contentType="text/html; charset=UTF-8" %>
172 <%@ page import="java.util.Date" %>
175 <head><title>test JSP</title>
176 <meta charset="UTF-8"/>
187 maDate = maMethode();
189 Page created on <%= maDate %>
193 <div class="sws-slide">
194 <h1>Objets par défaut</h1>
195 <p>Le code placé dans les balises spéciales a accès à certains objets
196 automatiquement déclarés. Parmi les principaux :
199 <li><tt>out</tt> de type <tt>JspWrite</tt>
200 (comme <tt>System.out</tt> mais écrit dans la page Web générée
202 <li><tt>session</tt> de type <tt>HttpSession</tt> : permet de
203 définir et récupérer des variables de sessions (i.e. Objets que l'on
204 stocke « globalement » et que l'on peut récupérer d'une page à
206 <li><tt>request</tt> de type <tt>HttpServletRequest</tt> : permet
207 de récupérer les paramètres passés dans une requête HTTP (par
208 exemple les valeurs d'un formulaire)</li>
209 <li><tt>response</tt> de type <tt>HttpServletResponse</tt> : permet
210 de spécialiser la réponse envoyée au client (en-têtes HTTP,
215 <div class="sws-slide">
216 <h1>Classe JspWriter</h1>
217 <p>Fonctionne comme <tt>System.out</tt> (on peut donc
218 appeler <tt>.print/.println</tt>) mais correspond a un endroit
219 particulier de la page HTML</p>
222 <div class="sws-slide">
223 <h1>Classe HttpSession</h1>
224 <p>Propose plusieurs méthodes : </p>
225 <code style="background:white"> //Renvoie la valeur stockée sous le nom name
226 Object <u>getAttribute</u>(String name)
228 //Stocke l'objet value sous le nom name
229 void <u>setAttribute</u>(String name, Object value)
231 //Supprime l'association name value
232 void <u>removeAttribute</u>(String name)
234 //Définit la durée (en secondes) d'inactivité d'une session
235 void <u>setMaxInactiveInterval</u>(int interval)
237 //Renvoie la durée (en secondes) d'inactivité d'une session
238 int <u>getMaxInactiveInterval</u>()
240 //Renvoie la date (en mili-secondes depuis EPOCH) de dernière utilisation
241 long <u>getLastAccessedTime</u>()
243 //Détruit la session en cours
244 void <u>invalidate</u>()</code>
246 <div class="sws-slide">
247 <h1>Classe HttpServletRequest</h1>
248 <p>Propose plusieurs méthodes : </p>
249 <code style="background:white"> //Récupère la valeur des cookies:
250 String[] <u>getCookies()</u>
252 //Récupère les paramètres passés par un formulaire :
253 Map<String, String[]><u>getParameterMap</u>()
255 //Récupère un paramètre particulier
256 String[]<u>getParameter</u>(String name)
259 <div class="sws-slide">
260 <h1>Classe HttpServletResponse</h1>
261 <p>Propose plusieurs méthodes : </p>
262 <code style="background:white"> //Renvoie une erreur HTTP (404 par exemple)
263 void <u>sendError(int code)</u>
265 //Ajoute un cookie au site
266 void <u>addCookie</u>(Cookie c)
268 //Effectue une redirection temporaire
269 void <u>sendRedirect</u>(String url)
272 <div class="sws-slide">
273 <h1>Classe Cookie</h1>
274 <p>Propose plusieurs méthodes : </p>
275 <code style="background:white"> //Constructeur
276 <u>Cookie</u>(String name, String value)
278 //Expiration en secondes
279 void <u>setMaxAge</u>(int a)
282 <h1>Spécificités de Tomcat</h1>
283 <div class="sws-slide">
284 <h1>Chemins par défaut</h1>
285 <p>Par défaut le serveur Tomcat tourne sur le port 8080 (configurable)</p>
287 <li><tt>/var/lib/tomcat/webapps/toto/</tt> correspond à l'URL
288 <tt>http://domaine:8080/toto</tt>
290 <li><tt>/var/lib/tomcat/webapps/toto/WEB-INF/</tt> contient des
291 fichiers de configuration</li>
292 <li><tt>/var/lib/tomcat/webapps/toto/WEB-INF/classes/</tt> contient des
293 fichiers <tt>.class</tt> auxiliaires</li>
295 <p>(ce sera configuré légèrement différement au PUIO)</p>
297 <h1>Accès aux classes JSP</h1>
298 <div class="sws-slide">
299 <p>Il faut avoir le fichier <tt>jsp-api.jar</tt> dans le
301 <code> javac -cp /chemin/vers/jsp-api.jar MaClasse.java </code>
302 <p>On peut ensuite copier le <tt>.class</tt>
303 dans <tt>WEB-INF/classes</tt></p>