Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Daniel Hagimont
IRIT/ENSEEIHT
2 rue Charles Camichel - BP 7122 Remerciements
31071 TOULOUSE CEDEX 7
Noël Depalma
Daniel.Hagimont@enseeiht.fr
http://hagimont.perso.enseeiht.fr
1
Le WWW
HTTP
Contenu statique
Page web html
Contenu dynamique
Page web html généré dynamiquement
Éventuellement à partir d’informations provenant d’une BD
Catalogue.html
Bd catalogue
2
Serveurs Web à contenu
dynamique
Architecture multi-tiers
un serveur Web
un serveur d’application
une base de données
Motivations de J2EE
Faciliter la programmation d’application web
C lie n t
Database
Web server server
3
Plan
CGI
PHP
Servlet
JSP
MVC
EJB
4
Requête à un serveur Web
Envoi de paramètre
champ1=valeur1&champ2=valeur2...
<html>
<head><title>MaBanque</title></head>
<body>
<form method="post" action="/servlet/BanqueAccount">
<p>numero de compte<input type="text" name= "num"></p>
<p>montant<input type="text" name= "val"></p>
<p><input type="submit" name="operation" value="solde">
<input type="submit" name="operation" value="debit">
<input type="submit" name="operation" value="credit"></p>
</form>
</body>
</html>
6
Scripts CGI
7
Exemple GET
Script cgi
#!/bin/sh
echo "Content-Type: text/html"
echo ""
echo ""
java getecho $QUERY_STRING
echo ""
Applets
Programme Java
Référencé depuis une page HTML
Stocké sur le serveur Web
Chargé et exécuté par le client (browser) web
JavaScript
Langage de script
Balises spécifiques au sein d'une page HTML
Chargé et exécuté par le client (browser) web
11
PHP
Langage de script
Générer des pages dynamiques
Intégré dans des pages web
Interprété (PHP3) ou compilé (PHP4)
Dérive de C et Perl
Facilite les accès à une BD
h ttp d h ttp d
...
PHP PHP
H TTP SQL
C lie n t Database
Web server server
Fichier .php
Html + script
<html> <?php
<body> echo "<html>\n<body>\n";
<h1>mon premier script</h1> echo "<h1>mon premier
<?php echo "Bonjour\n";?> script</h1>\n";
</body> echo "Bonjour\n";
</html> echo "</body>\n</html>\n";
?>
13
Résultat
14
Un peu de syntaxe (1/2)
Variable Chaîne
$toto $hi="bonjour";
Affectation $ch= "$hi \n toto";
$toto=3;
Tableaux
Type de données $t[0]=1;
Entiers
$t[1]=2;
• $dec=16
$t[]=3; // ajout en fin
• $hex=0x10
Nombres décimaux Opérateurs &
• $var=0.017 Structure de ctrl
• $var=17.0E-3 Idem que C
15
Un peu de syntaxe (2/2)
16
Petit annuaire
Formulaire HTML
<html>
<head><title>Annuaire</title></head>
<body>
<h1>Nom de la personne à rechercher</h1>
<form action= "annuaire.php" method="post">
<p>Name<input type="text" name="name">
<input type="submit" value="Envoyer"></p>
</form>
</body>
</html>
17
Petit annuaire
page PHP
annuaire.php
<html>
<body>
<h1>email crawler</h1>
<?php if strcmp($_POST['name'], "depalma"){
echo "Noel.Depalma@inrialpes.fr";
}else if strcmp($_POST['name'], "sicard"){
echo "Daniel.Hagimont@enseeiht.fr";
} else echo "personne inconnue";
?>
</body>
</html>
18
Accès à une BD (MySql)
Connection
$db = mysql_connect($host,$user,$passwd)
• Connection à un SGBD
Selection base
mysql_select_db($base, $db);
Requete
$res = mysql_query($query, $dbs);
• $query : une requête SQL
• $res : resultat
Resultat
$row = mysql_fetch_row($res)
• $row : tableau 19
Annuaire
<html><body><h1>email crawler</h1>
<?php
BD annuaire
$dbs = mysql_connect("localhost", "root", "");
Table person
if (!$dbs) {echo "error connect";}
name email $res = mysql_select_db("annuaire", $dbs);
if (!$res) {echo "error select";}
$res = mysql_query("SELECT * FROM person
WHERE name=$_POST['name']", $dbs);
if (!$res) {echo "error query";}
while ($row = mysql_fetch_row($res)) {
echo "email de $row[0] : $row[1]";
}
?>
</body></html>
20
PHP
Bilan
Facile à utiliser
Juste des pages Web étendues
Pas toujours très propre
Script, pas du Java
Interfaces aux BD adhoc (pas JDBC)
Mélange entre aspects présentation (génération
HTML), code métier et code d'accès aux données
persistantes
21
Servlets Java
C lie n t MySQL
Apache Tomcat
Database server
Web server Servlet server
22
Les servlets
23
Servlet HTTP - API
24
Exemple (1/3)
<html>
<head><title>MaBanque</title></head>
<body>
<form method="post" action="/servlet/BanqueAccount">
<p>numero de compte<input type="text" name= "num"></p>
<p>montant<input type="text" name= "val"></p>
<p><input type="submit" name="operation" value="solde">
<input type="submit" name="operation" value="debit">
<input type="submit" name="operation" value="credit"></p>
</form>
</body>
</html>
25
Exemple 2/3
String op = req.getParameter("operation");
int num = Integer.parseInt(req.getParameter("num"));
int val = Integer.parseInt(req.getParameter("val"));
resp.setContentType("text/html"); // type mime
PrintWriter out = resp.getWriter(); // pour faire des println
Notion de session
Une requête dépend du résultat des requêtes
précédentes
Ex : caddie
Création de session
HttpSession HttpServletRequest.getSession()
HttpSession HttpServletRequest.getSession
(boolean create)
28
HttpSession
Object getAttribute(String name)
Enumeration getAttributeNames()
Long getCreationTime()
String getId()
int getMaxInactiveInterval()
void invalidate()
void removeAttribute(String name)
void setAttribute(String name, Object value)
void setMaxInactiveInterval(int interval)
...
29
Cookies
Cookie[] HttpServletRequest.getCookies()
HttpServletResponse.addCookie(javax.servlet.http.Cookie)
30
Cookies
API :
Cookie(java.lang.String name, java.lang.String value)
Void setValue(java.lang.String newValue)
Void setMaxAge(int expiry)
Void setDomain(java.lang.String pattern)
java.lang.String getValue()
java.lang.String getDomain()
Int getMaxAge()
…
Ex :
Cookie c =new cookie("uid", "joe");
c.setMaxAge(-1);
c.setDomain(".toto.com ");
res.addCookie(c);
31
Packaging d'une servlet
Un répertoire par application
Pages web (html)
Répertoire "WEB-INF"
• Répertoire "classes" : les classes des servlets
• "web.xml" : descripteur des servlets
<web-app>
<servlet>
<servlet-name>myBanque</servlet-name>
<servlet-class>BanqueAccount</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>myBanque</servlet-name>
<url-pattern>/URL_Banque</url-pattern>
</servlet-mapping>
32
Installation dans Tomcat
33
Servlet
Bilan
Facile à programmer
Programmation en Java et API simple
Mais pas aussi simple qu'un script comme PHP
Mieux adapté que les scripts à des traitements
plus complexes
Interface JDBC pour accès à différentes BD SQL
Extension plus facile (liaison dynamique de Java) que
les extensions d'un langage de script
Le traitement des données récupérées de la BD
peuvent être lourds (d'où les EJB)
34
JSP (Java Server Page)
Langage de script (proche de Java)
Générer des pages dynamiques
Intégré dans des pages web
Compilé dynamiquement en servlet
Interation avec des classes Java
35
Un petit exemple
36
Les directives
3 directives possibles :
page : informations relatives à la page (langage et import)
include : fichiers à inclure littéralement (file)
Taglib : permet d'utiliser des librairies de tags personnalisés
37
Les scripts Java
38
Les actions
</jsp:usebean>
Importe un attribut si il existe, le crée sinon
<jsp:usebean id="personne" class="testjsp.Personne"
scope="session/>
équivaut à
équivaut à
40
Les actions
équivaut à
41
Les actions
42
Exemple : un annuaire
43
Exemple : architecture
44
Exemple : user.jsp
45
Exemple : personne.jsp
47
Exemple : listeuser.jsp
<%
Enumeration enu = listeuser.liste.elements();
while (enu.hasMoreElements()) {
Personne personne = (Personne)enu.nextElement();
%>
<tr>
<td><%= personne.user %></td>
<td><%= personne.nom %></td>
<td><%= personne.prenom %></td>
<td><%= personne.telephone %></td>
</tr>
<% } %>
</table>
</body>
</html>
48
Exemple : action.java (servlet)
if (formulaire == null) {
RequestDispatcher disp = request.getRequestDispatcher("user.jsp");
disp.forward(request, response);
}
49
Exemple : action.java (servlet)
if (formulaire.equals("user")) {
Personne personne = new Personne();
personne.user = request.getParameter("user");
session.setAttribute("user", personne);
ListePersonne listeUser = (ListePersonne)context.getAttribute("listeuser");
if (listeUser == null) {
listeUser = new ListePersonne();
context.setAttribute("listeuser", listeUser);
}
if (listeUser.isRegistered(personne.user)) {
RequestDispatcher disp = request.getRequestDispatcher("listeuser.jsp");
disp.forward(request, response);
} else {
RequestDispatcher disp = request.getRequestDispatcher("personne.jsp");
disp.forward(request, response);
}}
50
Exemple : action.java (servlet)
if (formulaire.equals("personne")) {
Personne personne = (Personne)session.getAttribute("user");
personne.nom = request.getParameter("nom");
personne.prenom = request.getParameter("prenom");
personne.telephone = request.getParameter("telephone");
51
Exemple : les beans
53
Modèle MVC
servlet
session
request code
context métier
javaBeans
pages
JSP
54
JSP - Bilan
Présentation
Sous forme de pages HTML
Programmation en Java dans les pages
Code métier
Sous forme de servlet
Échange de données avec les pages sous forme de javaBeans
Modèle MVC donne une séparation claire entre
Présentation (page JSP)
Contrôle (servlet)
Métier (programmes Java)
Le traitement des données récupérées de la BD peuvent être lourds
(d'où les EJB)
55