Title: Applications Web avec Java
1Applications Web avec Java
Duke
2Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
3Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
4Les différents types dapplis
Données
Exécutable
5Les différents types dapplis
Données
Gestionnaired'écrans
Terminal ouémulateur
6Les différents types dapplis
- Applications client/serveur
Données
Exécutable
7Les différents types dapplis
- Applications client/serveur distribuées ou 3-tiers
Données
Exécutable
Exécutable
8Les différents types dapplis
- Les applications client léger ou applications web
Données
NavigateurHTML/Javascript
Serveurd'applications
9Applications Java
AWT Swing SWT
- 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 dimpacts sur les performances
10Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Structurer d'une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
11Historique 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)
12Outils du web à lorigine
- Editeurs de pages HTML/Javascript
- Microsoft FrontPage
- Macromédia DreamWeaver
- NVU
- Transfert de pages
- FTP
- webdav
FTP WebDav
13Evolution 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(ex annuaire de l'école)
HTML
14Technologies 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)
ASP PHP
15Technologies 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 dhébergements disponibles
servlet JSP
16Web dynamique principes
Formulaire - champs de saisie - bouton de
validation
17Web dynamique principes
Transmission des données du formulaire
Réponse à la demande
18Web dynamique principes
2 le serveur accepte la connexion reçoit la
requête, retrouve les informations transmises et
recherche les données correspondantes
19Web 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) ?
20Web dynamique cookies
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
21Les applications Web en Java
- Serveur web capable d'exécuter du Java
- serveur d'application J2EE
- web container 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
J2EE
22Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Structurer d'une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
23Tomcat
- Un conteneur web (web container) J2EE
- Implémentation Java de référence
- Serveur open-source gratuit et multi-plateformes
(écrit en Java) - Téléchargeable sur http//jakarta.apache.org/tomca
t
24Tomcat installation
- Prérequis
- nécessite un SDK
- http//java.sun.com/j2se/1.4.2/download.html
- Installation possible
- programme dinstallation sous Windows
- installation manuelle sous Linux après
décompression de fichier darchive
25Tomcat 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
26Tomcat démarrage/arrêt
27Tomcat bon fonctionnement
28Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
29Créer une Application Web
- Dans Eclipse
- Menu File gt New gt Project
- Sélectionner Web gt Dynamic Web Project
- Project name TestTomcat
- Target runtime Apache tomcat V5.0
- finish
30Arborescence d'une application
31TP1
- 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 dEclipse, selon
les indications données par lenseignant
32Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
33Servlet 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()
34Servlet 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
35Servlet 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.prin
tln("")out.close()
36Servlet exemple simple
public class SimpleServlet extends HttpServlet
public void doGet(HttpServletRequest request,
HttpServletResponse response) throws
ServletException, IOException response.setCont
entType("text/html") PrintWriter out
response.getWriter() out.println("lthtmlgt") o
ut.println("ltbodygt") out.println("lth1gtBonjour
!lt/h1gt") out.println("lt/htmlgt") out.println(
"lt/bodygt") out.close()
http//localhost8080/TestTomcat/servlet/SimpleSer
vlet
37Servlet avec un formulaire
- Mentionner la servlet comme action dans le
formulaire HTML - ltform name"Formulaire" method"post"
action"servlet/FormulaireServlet"gt - Entrez votre nom
- ltinput type"text" name"nom"gt
- ltinput type"submit" value"valider"gt
- lt/formgt
http//localhost8080/TestTomcat/Formulaire.html
38Servlet 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("lthtmlgt")
- out.println("ltbodygt")
- out.println("lth1gtBonjour " nom " !lt/h1gt")
- out.println("lt/htmlgt")
- out.println("lt/bodygt")
- out.close()
-
39Servlet récapitulatif formulaire
1 le navigateur rassemble les informations du
formulaire, il se connecte au serveur et lui
transmet ces informations dans une requête HTTP
Formulaire.html
Servlet/FormulaireServlet
2 le serveur génère dynamiquement une page avec
le résultat, l'envoie en réponse HTTP au
navigateur
40Servlet 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//localhost8080/ser
vlet/test?paramvalue - POST plus adapté au transfert de données depuis
un formulaire - Une servlet peut déterminer ainsi si elle est
appelée comme validation d'un formulaire ou non
Method POST Method GET
41Servlet 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("lthtmlgt")
- out.println("lthtmlgt")
- out.println("ltform name\"Formulaire\"
method\"post\" action\"FormulaireServlet
DeuxEnUn\"gt") - out.println("Entrez votre nom ")
- out.println("ltinput type\"text\"
name\"nom\"gt") - out.println("ltinput type\"submit\"
value\"valider\"gt") - out.println("lt/formgt")
- out.println("lt/htmlgt")
- out.println("lt/bodygt")
- out.close()
42Servlet 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("lthtmlgt")
- out.println("ltbodygt")
- String nom request.getParameter("nom")
- out.println("lth1gtBonjour " nom " !lt/h1gt")
- out.println("lt/htmlgt")
- out.println("lt/bodygt")
- out.close()
-
43Servlet récap formulaire/traitement
44TP2
- Dans le projet TestTomcat, développer une servlet
qui demande un nombre à l'utilisateur et renvoie
le calcul de la factorielle de ce nombre
45Servlet 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
46HttpSession
- import javax.servlet.http.HttpSession
-
- HttpSession session request.getSession()
-
- MaClasse monObjet (MaClasse)session.getAttribute
("nom") -
- session.setAttribute("nom", monObjet)
47Servlet 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()) -
- //...
-
48TP3
- 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...
49Les 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 - Une solution les Java Server Pages !
JSP
50JSP exemple
- lt_at_ page session "true" gt
- lt_at_ page buffer"none" gt
- lt_at_ page import"java.util." gt
- lt_at_ page import"java.text." gt
- lthtmlgt
- ltheadgt
- lttitlegtTest JSPlt/titlegt
- lt/headgt
- ltbodygt
- lt DateFormat df SimpleDateFormat.getInstance(
) gt - lth1gtMaintenant lt df.format(new Date())
gtlt/h1gt - lt/bodygt
- lt/htmlgt
51JSP principe
- Au lieu d' écrire du HTML dans une classe Java,
on inclut du Java dans une page HTML - Des tags spécifiques
- lt_at_ gt directives (imports, etc.)
- lt gt code Java à exécuter
- lt gt résultat Java à afficher
- Des variables implicites request, response,
session, etc.
tags request response
52JSP 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
53TP4
- 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?nombre5 - Ajout dun fichier .jsp
- Clic droit sur WebContent?JSP
54Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
55Servlets 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 !
56Le 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
57Le 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 Java
Objet Java
Objet Java (traitement)
2 Transmission des objets à la page JSP pour
afficher le résultat
JSP vue (affichage)
58Utiliser 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
59JavaScript 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)
60Javascript 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
-
-
61Javascript exemple (3/3)
- Il faut appeler la méthode de validation sur
l'événement onSubmit() du formulaire - ltform name"calculAire" method"post" action"se
rvlet/AireServletAvecValidation"
onSubmit"return validation(document.forms'cal
culAire')"gt
62Les services Web
- Comment fournir un service à tous
- Utilisation des services web
- Transport de linformation en XML
- Les protocoles
- REST
- XML-RPC
- SOAP (le plus utilisé et le plus répandu)
- HESSIAN (mode binaire, pas de xml)
Web service SOAP XML
63Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
64Schéma général
1 requête HTTP depuis un formulaire
2 connexion à la base de données
Données
3 objet connexion
4 requête SQL
5 ensemble de données extraites de la base
6 page de réponse générée à partir des résultat
65Problé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
66Architecture optimisée
POOL
1 requête HTTP depuis un formulaire
2 demande de connexion au pool
3 récupération d'une connexion disponible
Données
4 requête SQL
5 ensemble de données extraites de la base
6 page de réponse générée à partir des résultat
67Configuration du pool (1/2)
- Dans tomcat\conf\server.xml
- ltContext path"/TestBD" reloadable"true"
docBase"C\Applis\eclipse\workspace\TestBD "
workDir"C\Applis\eclipse\workspace\TestBD\work\o
rg\apache\jsp" gt - ...
- ltResource name"jdbc/TestBD" auth"Container"
type"javax.sql.DataSource"/gt - ltResourceParams name"jdbc/TestBD"gt
- ...
- lt!-- MySQL dB username and password for dB
connections --gt - ltparametergt
- ltnamegtusernamelt/namegt
- ltvaluegtrootlt/valuegt
- lt/parametergt
- ltparametergt
- ltnamegtpasswordlt/namegt
- ltvaluegtlt/valuegt
- lt/parametergt
-
68Configuration du pool (2/2)
- lt!-- Class name for mm.mysql JDBC driver --gt
- ltparametergt
- ltnamegtdriverClassNamelt/namegt
- ltvaluegtcom.mysql.jdbc.Driverlt/valuegt
- lt/parametergt
- lt!-- The JDBC connection url for connecting
to your MySQL dB. - The autoReconnecttrue 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. - --gt
- ltparametergt
- ltnamegturllt/namegt
- ltvaluegtjdbcmysql//127.0.0.1/TestBD?autoRec
onnecttruelt/valuegt - lt/parametergt
- lt/ResourceParamsgt
- lt/Contextgt
-
69Récupération d'une connexion
- Dabord récupérer le contexte de lapplication
web - puis la connexion
- Context ctx new InitialContext()
- DataSource ds (DataSource)ctx.lookup("javacomp/
env/jdbc/TestBD") - Connection conn ds.getConnection()
- utilisation de la connexion
70TP 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
71Sommaire
- Les différents types d'applications
- Les applications Web
- Présentation de Tomcat
- Utilisation dEclipse
- Servlets JSP
- Structurer une application Web
- Base de données et serveurs d'applications
- Déployer son application Web
72Déployer une application
- Lhébergement dune application nécessite un
serveur - Windows NT/2000/XP
- Linux
- 2 solutions
- création de son propre serveur
- délégation de lhébergement à un professionnel
73Comment 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
74Webographie
- JAVA
- http//java.sun.com/
- HTML/CSS/javascript
- http//www.devguru.com/
- http//www.w3schools.com/
- Serveurs dapplications
- http//www.jboss.com/products/jbossas/
- http//tomcat.apache.org/
75Webographie
- 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/