Les applications Web

Download Report

Transcript Les applications Web

Applications Web avec Java
AgroParisTech : Module 2A
Duke
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
2
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
3
Les différents types d’applis
• Applications autonomes
Exécutable
Données
Applications Web en Java
4
Les différents types d’applis
• Applications déportées
Terminal ou
émulateur
Gestionnaire
d'écrans
Applications Web en Java
Données
5
Les différents types d’applis
• Applications client/serveur
Exécutable
Données
Applications Web en Java
6
Les différents types d’applis
• Applications client/serveur distribuées ou 3tiers
Exécutable
Exécutable
Applications Web en Java
Données
7
Les différents types d’applis
• Les applications client léger ou applications
web
Navigateur
HTML/Javascript
Serveur
d'applications
Applications Web en Java
Données
8
AWT
Swing
SWT
Applications Java
• Java permet de réaliser tous les types d'applications
• Mais les interfaces utilisateur développées en Java sont
relativement peu performantes
• Par contre, Java est très adapté pour réaliser des
applications Web :
– développer sous Windows, déployer sous UNIX
– richesse des programmes et API disponibles
– peu d’impacts sur les performances
Applications Web en Java
9
Sommaire
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Structurer d'une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
10
Historique du Web
• Le Web à l'origine :
– permet d'accéder à des pages d'informations reliées
par des liens hypertextes
– nécessite uniquement la présence d'un navigateur
Web sur le poste de l'utilisateur
– permet de générer des pages dynamiquement pour
des applications spécifiques et limitées (ex :
moteur de recherche)
Applications Web en Java
11
Outils du web à l’origine
• Editeurs de pages HTML/Javascript :
– Microsoft FrontPage
– Macromédia DreamWeaver
– NVU
• Transfert de pages :
– FTP
– webdav
FTP
WebDav
Applications Web en Java
12
Evolution du Web
• Développement des pages dynamiques :
– générées à partir d'une base de données : pas
besoin d'écrire des centaines de pages HTML
(ex : site de presse)
– apportent un contenu personnalisé à l'utilisateur
(ex : Mon Yahoo!)
– ne nécessitent pas d'installation sur le poste de
l'utilisateur
HTML
(ex : annuaire de l'école)
Applications Web en Java
13
Technologies du web dynamique
• 3 solutions :
– ASP (.Net) :
• Active Server Page
• fonctionne uniquement avec un serveur MS Windows
– PHP :
•
•
•
•
•
PHP Hypertext Processor
gratuit : communauté libre
fonctionne avec tout type de serveur
simple à apprendre
limité (mais nouvelles versions…)
Applications Web en Java
ASP
PHP
14
Technologies du web dynamique
• 3 solutions :
– Java : Servlets/JSP :
•
•
•
•
•
•
gratuit , mais sous la houlette de Sun
fonctionne avec tout type de serveur
programmation objet structurée, modulaire et évolutive
richesse des interfaces
répandu dans les entreprises
peu d’hébergements disponibles
servlet
JSP
Applications Web en Java
15
Web dynamique : principes
Formulaire :
- champs de saisie
- bouton de
validation
Applications Web en Java
16
Web dynamique : principes
Transmission des
données du
formulaire
Réponse à la
demande
Applications Web en Java
17
Web dynamique : principes
1 : le navigateur rassemble
les informations du
formulaire, il se connecte au
serveur et lui transmet ces
informations dans une
requête HTTP
4 : le navigateur
affiche la page et
rompt la connexion
2 : le serveur accepte la
connexion reçoit la
requête, retrouve les
informations transmises
et recherche les données
correspondantes
3 : le serveur génère
dynamiquement une page
avec le résultat, l'envoie
en réponse HTTP au
navigateur
Applications Web en Java
18
Web dynamique : session
• Le dialogue entre le navigateur et le serveur est
déconnecté :
1 : le navigateur se connecte au serveur Web
2 : le navigateur envoie une requête
3 : le serveur renvoie une réponse
4 : la connexion est rompue !
• Comment assurer le « suivi de l'utilisateur »
(ex : webmail, panier dans un site de
commerce) ?
Applications Web en Java
19
Web dynamique : cookies
1 : le navigateur rassemble les
informations du formulaire, il se
connecte au serveur et lui transmet ces
informations dans une requête HTTP
2 : le serveur accepte la connexion reçoit
la requête, retrouve les informations
transmises et recherche les données
correspondantes.
Il génère également un cookie et garde en
mémoire les informations associées
3 : le serveur génère dynamiquement une
page avec le résultat, l'envoie en réponse
HTTP au navigateur, accompagnée du
cookie.
4 : Le navigateur
garde le cookie et
affiche la page
5 : lors de la requête suivante, le
navigateur retransmet le cookie au
serveur, qui saura ainsi identifier
l'utilisateur...
5 : etc.
3 : le serveur génère une page en
fonction de l'utilisateur identifié par
son cookie
Alfred
Gérard
Applications Web en Java
20
Les applications Web en Java
• Serveur web capable d'exécuter du Java :
– serveur d'application J2EE
– web container J2EE
J2EE
• Un serveur J2EE est capable d'exécuter :
– des servlets : classes Java exécutées côté serveur
– des JSP :
• Java Server Pages
• Fichiers de script qui « mélangent » du Java et du
HTML/Javascript
Applications Web en Java
21
Sommaire
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Structurer d'une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
22
Tomcat
• Un « conteneur web » (web container) J2EE
• Implémentation Java de référence
• Serveur open-source gratuit et multiplateformes (écrit en Java)
Applications Web en Java
23
Tomcat installation
• Prérequis :
– nécessite un Software Development Kit
• JDK : Java Development Kit
http://www.oracle.com/technetwork/java/javase/downloads/index.html
• Eclipse Europa pour développement J2EE
http://www.eclipse.org/downloads/moreinfo/jee.php
• Tomcat
http://jakarta.apache.org/tomcat
Applications Web en Java
24
Tomcat : organisation générale
Exécutables
Classes Java communes
à toutes les applications
Fichiers de configuration
Fichiers de logs
(messages d'erreurs…)
Emplacement par défaut
des applications
Applications Web en Java
25
Tomcat / eclipse
• Création d'un serveur Tomcat sous eclipse
– Fichier/Nouveau/Autres
– Serveur/Serveur, Next
– Apache/Tomcat 5.5 Server, Finish
Applications Web en Java
26
Tomcat : démarrage/arrêt
Applications Web en Java
27
Tomcat : bon fonctionnement
• http://localhost:8080
Applications Web en Java
28
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
29
Créer une Application Web
• Dans Eclipse :
–
–
–
–
–
Menu File > New > Project…
Sélectionner Web > Dynamic Web Project
Project name : TestTomcat
Target runtime : Apache tomcat V5.5
finish
Applications Web en Java
30
Arborescence d'une application
Applications Web en Java
31
TP1
•
•
•
•
Démarrer Tomcat sur le poste de travail
Tester le bon fonctionnement de l'application
Créer un projet TestTomcat
Créer une servlet, via les menus d’Eclipse,
selon les indications données par l’enseignant
Applications Web en Java
32
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
33
Servlet : création
• Une servlet est une classe dérivée de
javax.servlet.http.HttpServlet. On la trouve
dans l'arborescence WEB-INF/src
• Cette classe définit (surtout) 4 méthodes :
–
–
–
–
init(ServletConfig)
doGet(HttpServletRequest, HttpServletResponse)
doPost(HttpServletRequest, HttpServletResponse)
destroy()
Applications Web en Java
34
Servlet : méthodes
• init(ServletConfig)
exécutée au chargement de la servlet
• doGet(HttpServletRequest, HttpServletResponse)
exécutée à chaque connexion d'un navigateur
• doPost(HttpServletRequest, HttpServletResponse)
exécutée à chaque validation de formulaire
• destroy()
exécutée lors de l'arrêt du serveur
Applications Web en Java
35
Servlet : paramètres
• Paramètre HttpServletRequest :
– encapsule la requête HTTP issue du navigateur
– permet d'accéder aux valeurs du formulaire :
String nom = request.getParameter( "nom");
• Paramètre HttpServletResponse :
– encapsule la réponse renvoyée au navigateur
– permet de générer par exemple du HTML :
PrintWriter out = response.getWriter();
out.println("…");
out.close();
Applications Web en Java
36
Servlet : exemple simple
public class SimpleServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Bonjour !</h1>");
out.println("</html>");
out.println("</body>");
out.close();
}
}
http://localhost:8080/TestTomcat/servlet/SimpleServlet
Applications Web en Java
37
Servlet : avec un formulaire
• Mentionner la servlet comme action dans le
formulaire HTML :
<form name="Formulaire" method="post"
action="servlet/FormulaireServlet">
Entrez votre nom :
<input type="text" name="nom">
<input type="submit" value="valider">
</form>
http://localhost:8080/TestTomcat/Formulaire.html
Applications Web en Java
38
Servlet : réponse au formulaire
• La servlet récupère le nom et génère une page
avec :
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
String nom = request.getParameter("nom");
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<h1>Bonjour " + nom + " !</h1>");
out.println("</html>");
out.println("</body>");
out.close();
}
Applications Web en Java
39
Servlet : récapitulatif formulaire
Formulaire.html
Servlet/FormulaireServlet
1 : le navigateur rassemble
les informations du
formulaire, il se connecte au
serveur et lui transmet ces
informations dans une
requête HTTP
2 : le serveur génère
dynamiquement une page
avec le résultat, l'envoie
en réponse HTTP au
navigateur
Applications Web en Java
40
Servlet : GET ou POST ?
• Attribut method de la balise form
• GET : correspond à l'appel d'une page par le
navigateur (barre d'adresse ou lien)
Transmet les paramètres dans l'URL :
http://localhost:8080/servlet/test?param=value
• POST : plus adapté au transfert de données
Method POST
depuis un formulaire
Method GET
• Une servlet peut déterminer ainsi si elle est
appelée comme validation d'un formulaire ou
non
Applications Web en Java
41
Servlet : formulaire et traitement
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Méthode GET : barre d'adresse
response.setContentType("text/html");PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<html>");
out.println("<form name=\"Formulaire\" method=\"post\"
action=\"FormulaireServletDeuxEnUn\">");
out.println("Entrez votre nom :");
out.println("<input type=\"text\" name=\"nom\">");
out.println("<input type=\"submit\" value=\"valider\">");
out.println("</form>");
out.println("</html>");
out.println("</body>");
out.close();
}
Applications Web en Java
42
Servlet : formulaire et traitement
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Méthode POST : validation du formulaire
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
String nom = request.getParameter("nom");
out.println("<h1>Bonjour " + nom + " !</h1>");
out.println("</html>");
out.println("</body>");
out.close();
}
Applications Web en Java
43
Servlet : récap formulaire/traitement
1 : appel de la servlet via la barre
d'adresse : méthode GET
2 : renvoi du formulaire
3 : appel de la servlet via le bouton
de validation : méthode POST
4 : renvoi du résultat
Applications Web en Java
44
TP2
• Dans le projet TestTomcat, développer une
servlet qui demande un nombre à l'utilisateur
et renvoie le calcul de la factorielle de ce
nombre
Applications Web en Java
45
Servlet : session
• L'objet requête passée en paramètre permet de
fixer/retrouver des objets pour une session
utilisateur
• L'objet session est une collection d'objets
associés à des clés
Applications Web en Java
46
HttpSession
import javax.servlet.http.HttpSession;
…
HttpSession session = request.getSession();
…
MaClasse monObjet =
(MaClasse)session.getAttribute("nom");
…
session.setAttribute("nom", monObjet);
Applications Web en Java
47
Servlet : exemple session
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HttpSession session = request.getSession();
ArrayList listeCourse = (ArrayList) session.getAttribute("listeCourse");
if (listeCourse == null) {
// La liste des courses de l'utilisateur n'a pas ete créée
session.setAttribute("listeCourse", new ArrayList());
}
//...
}
Applications Web en Java
48
TP3
• Ecrire une servlet qui initialise une somme à 0
et demande un nombre via un formulaire
• Ce nombre est ajouté à la somme renvoyée à
l'utilisateur, auquel on demande aussi un
nouveau nombre (affichage du résultat
précédent et du formulaire sur la page)
• Le nouveau nombre vient s'ajouter à la somme
• Et ainsi de suite...
Applications Web en Java
49
Les JSP
• Inconvénients des servlets :
– générer du code HTML est fastidieux (plusieurs
lignes de out.println("")
– impossible d'utiliser les outils WYSIWYG HTML
(Frontpage, Dreamweaver…) pour concevoir la
partie présentation des pages
JSP
• Une solution : les Java Server Pages !
Applications Web en Java
50
JSP :exemple
<%@ page session ="true" %>
<%@ page buffer="none" %>
<%@ page import="java.util.*" %>
<%@ page import="java.text.*" %>
<html>
<head>
<title>Test JSP</title>
</head>
<body>
<% DateFormat df = SimpleDateFormat.getInstance(); %>
<h1>Maintenant : <%= df.format(new Date()) %></h1>
</body>
</html>
Applications Web en Java
51
JSP : principe
• Au lieu d' écrire du HTML dans une classe
Java, on inclut du Java dans une page HTML
• Des tags spécifiques :
– <%@ %> : directives (imports, etc.)
– <% %> : code Java à exécuter
– <%= %> : résultat Java à afficher
tags
request
response
• Des variables implicites : request, response,
session, out, etc.
Applications Web en Java
52
JSP : exécution
• Lors de la demande d'une page JSP :
– si c'est la première demande, ou si la page a été
modifiée depuis la dernière demande, la page JSP
est transformée automatiquement en servlet ;
– le moteur de servlet exécute la servlet
correspondante et renvoie le résultat de l'exécution
Applications Web en Java
53
TP4
• Ecrire une page JSP qui affiche la table de
multiplication du nombre 7
• Modifier cette page pour pouvoir passer le
nombre dont on veut la table dans la requête :
http://…/multiplication.jsp?nombre=5
• Ajout d’un fichier .jsp :
– Clic droit sur WebContentJSP
Applications Web en Java
54
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
55
Servlets & JSP
• Servlets :
– Adaptées pour programmer des traitements en Java
• JSP :
– Adaptés pour réaliser l'affichage dans une page
HTML
• Conclusion : il faut combiner servlets & JSP !
Applications Web en Java
56
Le modèle MVC
• Consiste à séparer les différentes fonctions du
logiciel
• Séparation :
– Modèle : les données manipulées par le logiciel
– Vue : l'affichage présenté à l'utilisateur
– Contrôleur : traite les actions de l'utilisateur
MVC
Applications Web en Java
57
Le modèle MVC Web
Servlet : contrôleur
(réception/envoi des données)
1 : Transmission des
informations du formulaire
2 : Traitements et instanciation
des objet
Objet
Objet
Objet
Java
Java
Java
2 : Transmission des objets à la
page JSP pour afficher le résultat
(traitement)
JSP : vue
(affichage)
Applications Web en Java
58
Bonus
• Pool de connexions
• JavaScript
Applications Web en Java
59
Utiliser Javascript
• Dans les exemples précédents, les contrôles
sont réalisés dans la servlet après validation du
formulaire
• Or, Javascript permet de réaliser des contrôles
dans le navigateur avant la validation du
formulaire, ce qui évite un aller-retour sur le
réseau
javascript
Applications Web en Java
60
JavaScript : exemple (1/3)
function contientNombre(champ) {
// La valeur du champ
contenu = champ.value;
// Création de l'expression régulière
e = new RegExp(/^\d+$/);
// Test de conformité
return e.test(contenu);
}
Applications Web en Java
61
Javascript : exemple (2/3)
function validation(formulaire) {
var message ='';
if (!contientNombre(formulaire['base'])) {
message +='Vous devez choisir un nombre entier pour la base !\n';
}
if (!contientNombre(formulaire['hauteur'])) {
message += '... un nombre entier pour la hauteur !\n';
}
if (message.length == 0) {
// Pas d'erreur : on peut valider le formulaire
return true;
}
else {
// Erreur : on affiche le message
alert(message);
return false;
}
}
Applications Web en Java
62
Javascript : exemple (3/3)
• Il faut appeler la méthode de validation sur
l'événement onSubmit() du formulaire :
<form
name="calculAire" method="post"
action="servlet/AireServletAvecValidation"
onSubmit="return validation(document.forms['calculAire']);">
Applications Web en Java
63
Les services Web
• Comment fournir un service à tous
– Utilisation des services web
– Transport de l’information en XML
• Les protocoles
–
–
–
–
Web service
REST
SOAP
XML
XML-RPC
SOAP (le plus utilisé et le plus répandu)
HESSIAN (mode binaire, pas de xml)
Applications Web en Java
64
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
65
Schéma général
1 : requête HTTP
depuis un
formulaire
2 : connexion à la
base de données
3 : objet connexion
4 : requête SQL
6 : page de
réponse générée
à partir des
résultat
Applications Web en Java
Données
5 : ensemble de
données extraites
de la base
66
Problématique
• Ouvrir une connexion sur une base de données
prend du temps
• On ne peut pas utiliser la même connexion
pour différentes requêtes simultanées
 La solution réside dans la constitution d'un
pool de connexion
Applications Web en Java
67
Architecture optimisée
1 : requête HTTP
depuis un
formulaire
POOL
2 : demande de
connexion au pool
3 : récupération
d'une connexion
disponible
4 : requête SQL
6 : page de
réponse générée
à partir des
résultat
Applications Web en Java
5 : ensemble de
données extraites
de la base
Données
68
Configuration du pool (1/2)
• Dans tomcat\conf\server.xml :
<Context path="/TestBD" reloadable="true"
docBase="C:\Applis\eclipse\workspace\TestBD "
workDir="C:\Applis\eclipse\workspace\TestBD\work\org\apache\jsp" >
...
<Resource name="jdbc/TestBD" auth="Container" type="javax.sql.DataSource"/>
<ResourceParams name="jdbc/TestBD">
...
<!-- MySQL dB username and password for dB connections -->
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value></value>
</parameter>
Applications Web en Java
69
Configuration du pool (2/2)
•
<!-- Class name for mm.mysql JDBC driver -->
<parameter>
<name>driverClassName</name>
<value>com.mysql.jdbc.Driver</value>
</parameter>
<!-- The JDBC connection url for connecting to your MySQL dB.
The autoReconnect=true argument to the url makes sure that the
mm.mysql JDBC Driver will automatically reconnect if mysqld closed the
connection. mysqld by default closes idle connections after 8 hours.
-->
<parameter>
<name>url</name>
<value>jdbc:mysql://127.0.0.1/TestBD?autoReconnect=true</value>
</parameter>
</ResourceParams>
</Context>
Applications Web en Java
70
Récupération d'une connexion
• D’abord récupérer le contexte de l’application
web…
• … puis la connexion
Context ctx = new InitialContext();
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/TestBD");
Connection conn = ds.getConnection();
• … utilisation de la connexion
Applications Web en Java
71
TP 5
• Une base de données existante contient une table
Personne, avec 3 champs : id, nom, prenom, age
• Suivre les indications de l'enseignant pour obtenir les
paramètres de connexion à la base de données
• Programmer une servlet/un JSP qui affichent dans un
tableau les noms de toutes les personnes triés par
ordre alphabétique
• Programmer une servlet/un JSP qui affichent les
détails d'une personne dans une fenêtre Popup
lorsqu'on clique sur le nom d'une personne
Applications Web en Java
72
Sommaire
•
•
•
•
•
•
•
•
Les différents types d'applications
Les applications Web
Présentation de Tomcat
Utilisation d’Eclipse
Servlets & JSP
Structurer une application Web
Base de données et serveurs d'applications
Déployer son application Web
Applications Web en Java
73
Déployer une application
• L’hébergement d’une application nécessite un
serveur :
– Windows NT/2000/XP
– Linux
• 2 solutions :
– création de son propre serveur
– délégation de l’hébergement à un professionnel
Applications Web en Java
74
Comment créer son serveur ?
•
•
•
•
•
Utiliser un PC robuste et bien ventilé
Installer/Configurer Linux ou Windows
Installer/Configurer Java
Installer/Configurer MySQL
Installer/Configurer Tomcat
Applications Web en Java
75
Webographie
• JAVA
– http://java.sun.com/
• HTML/CSS/javascript
– http://www.devguru.com/
– http://www.w3schools.com/
• Serveurs d’applications
– http://www.jboss.com/products/jbossas/
– http://tomcat.apache.org/
Applications Web en Java
76
Webographie
• Développement
– http://lomboz.objectweb.org/
• Framework
–
–
–
–
–
http://www.springframework.org/
http://ws.apache.org/axis/
http://struts.apache.org/
http://java.sun.com/products/jsp/jstl/
http://jakarta.apache.org/commons/
Applications Web en Java
77