Java côté serveur. Eugen Dedu Eugen.Dedu@pu-pm.univ-fcomte.fr http://lifc.univ-fcomte.fr/~dedu/ UFC, IUP 3ème année Montbéliard septembre 2004



Documents pareils
JavaServer Pages (JSP)

Introduction à JDBC. Accès aux bases de données en Java

Java DataBaseConnectivity

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Web Tier : déploiement de servlets

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Application web de gestion de comptes en banques

OpenPaaS Le réseau social d'entreprise

Licence Bio Informatique Année Premiers pas. Exercice 1 Hello World parce qu il faut bien commencer par quelque chose...

Accès aux bases de données

Application Web et J2EE

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Module BD et sites WEB

Java et les bases de données

TP Programmation Java / JDBC / Oracle

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Java Licence Professionnelle Cours 7 : Classes et méthodes abstraites

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Stockage du fichier dans une table mysql:

Compte Rendu d intégration d application

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

Application BdD et JDBC. Introduction 1/28. I Dans tout les cas, une seule problématique. I Quelques alternatives :

BTS S.I.O PHP OBJET. Module SLAM4. Nom du fichier : PHPRévisionObjetV2.odt Auteur : Pierre Barais

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

Cours 14 Les fichiers

Développement Logiciel

Tp 1 correction. Structures de données (IF2)

JAVA 8. JAVA 8 - Les fondamentaux du langage. Les fondamentaux du langage Java. Avec exercices pratiques et corrigés JAVA 8 29,90.

Programmation par les Objets en Java

DOM - Document Object Model

La base de données XML exist. A. Belaïd

Serveur d'archivage 2007 Installation et utilisation de la BD exist

Compte-rendu de projet de Système de gestion de base de données

Programmer en JAVA. par Tama

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Module Com231A - Web et Bases de Données Notion 5 : Formulaires et utilisation des Bases de Données avec PHP

Mise en œuvre des serveurs d application

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

TP JAVASCRIPT OMI4 TP5 SRC

as Architecture des Systèmes d Information

Le développement d applications Web

Plan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Premiers Pas en Programmation Objet : les Classes et les Objets

Plan du cours. Historique du langage Nouveautés de Java 7

Best Practices : Utilisation des APIs de Lotus Web Content Management

L envoi d un formulaire par courriel. Configuration requise Mail Texte Mail HTML Check-list

Programmation d application Bases de données avec Java

TP1. Outils Java Eléments de correction

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Groupe Eyrolles, 2005, ISBN :

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Chapitre 2. Classes et objets

1. Installation d'un serveur d'application JBoss:

Structure d un programme et Compilation Notions de classe et d objet Syntaxe

La programmation orientée objet Gestion de Connexions HTTP Manipulation de fichiers Transmission des données PHP/MySQL. Le langage PHP (2)

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

TP1 : Initiation à Java et Eclipse

RAPPELS SUR LES METHODES HERITEES DE LA CLASSE RACINE Object ET LEUR SPECIALISATION (i.e. REDEFINITION)

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

4. Groupement d objets

Définition des Webservices Ordre de paiement par . Version 1.0

PHP 4 PARTIE : BASE DE DONNEES

Documentation CAS à destination des éditeurs

RMI le langage Java XII-1 JMF

PDO : PHP Data Object 1/13

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Gestion de stock pour un magasin

Plateforme PAYZEN. Définition de Web-services

4. SERVICES WEB REST 46

Alfstore workflow framework Spécification technique

Mise en oeuvre d'une base de données mono-utilisateur avec SQLite

1. Langage de programmation Java

Programmation Web. Madalina Croitoru IUT Montpellier

Programmation Orientée Objet - Licence TIS CM8/9. Rappel sur la séance précédente. Lancelot Pecquet Lancelot.Pecquet@math.univ-poitiers.

Chapitre VI- La validation de la composition.

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

Logiciel de gestion de caisse et d ardoises

Bases Java - Eclipse / Netbeans

PHP 5.4 Développez un site web dynamique et interactif

Héritage presque multiple en Java (1/2)

Architecture Orientée Service, JSON et API REST

Aspects techniques : guide d interfaçage SSO

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Les architectures 3-tiers Partie I : les applications WEB

Tutoriel: Création d'un Web service en C++ avec WebContentC++Framework

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

.NET - Classe de Log

Flux de données Lecture/Ecriture Fichiers

Architectures client/serveur

Première coupe : Introduction à la plateforme Java EE JAVA JAVA. Introduction à la plateforme Java EE. Introduction à la plateforme Java EE

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Architectures web/bases de données

Cours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java

Transcription:

Java côté serveur Eugen Dedu Eugen.Dedu@pu-pm.univ-fcomte.fr http://lifc.univ-fcomte.fr/~dedu/ UFC, IUP 3ème année Montbéliard septembre 2004

Plan Pages avec contenu mixte (Java Server Pages) beans Intégration servlets / Accès aux bases de données 2

Pages avec contenu mixte - méthodologie - Retour d'un contenu HTML et les objets associés (e.g. images) Cas classique (HTML) : plusieurs requêtes à des fichiers distincts : A.html, 1.jpg, 2.png,... Cas des servlets : soit image statique : out.println ("<IMG SRC=... >"); soit image dynamique voir transparent suivant 3

Pages avec contenu mixte - méthodologie - Cas des servlets, images dynamiques : la même servlet répond à toutes les requêtes (les images renvoient à la servlet aussi) retourner l'url courant sans paramètres : StringBuffer req.getrequesturl () 4

Pages avec contenu mixte - méthode de la récriture de l'url - http://.../servlets/test : retourne le fichier HTML "<img src=\"" + req.getrequesturl() + "?img=1\"...>" http://.../servlets/test?img=1 : renvoie l'image if (req.getparameter ("img")!= null) comme HTML, mais avec des paramètres Ne marche pas avec des images dynamiques (dont les données changent dans le temps) : entre la requête HTML et la requête de l'image il passe un certain temps => HTML et image peuvent être incohérents ex. : L'heure à Paris est [image] et à Londres est [image]. 5

Pages avec contenu mixte - méthode de la session - Stocker les données (ou les images-mêmes) dans HttpSession exemple : dans les attributs "image1" et "image2" http://.../servlets/test : retourne le fichier HTML http://.../servlets/test?img=image1 : renvoie l'image stockée dans l'attribut image1 http://.../servlets/test?img=image2 : renvoie l'image stockée dans l'attribut image2 6

Pages avec contenu mixte - méthode de la session - Marche avec des images dynamiques Pratique si les sessions sont de toute façon utilisées dans le site On peut utiliser un mécanisme de session distinct, manuel, e.g. par récriture de l'url tâche complexe cependant 7

Pages avec contenu mixte - méthode du stockage côté client - Stocker les données côté client, dans l'url.../?num=3&v0=apache 70&v1=IIS 22&v2=Autres 8 NB : l'ordre des paramètres est aléatoire! Il faut deux méthodes : Image -> StringBuffer String -> Image Les données sont transférées deux fois (serveur->client et client->serveur) Pratique pour des images à très faible volume de données (e.g. diagrammes) 8

Pages avec contenu mixte - création d'une image - Graphics.fillArc () Utilisation des bibliothèques non inclues en Java SDK création d'images PNG, JPG,... 9

Pages avec contenu mixte - envoi de données binaires - But : envoi d'images, d'exécutables (bouton Download),... Méthode :.getoutputstream () Utiliser des chemins complets pour les fichiers! Fichiers binaires : FileInputStream fis = new FileInputStream ("chemin"); while ((int c = fis.read ())!= -1) req.getoutputstream().print ((char)c); Fichiers texte : BufferedReader br = new BufferedReader (new FileReader ("/chemin/complet")); 10

Pages avec contenu mixte - exemple complet - Exemple complet d'une servlet envoyant une page HTML avec : du texte une image paysage.png par récriture de l'url 11

Pages avec contenu mixte - données binaires : en-têtes utiles - gzip : String s = req.getheader ("Accept-Encoding"); if (s.indexof ("gzip")!= -1) res.setheader ("Content-Encoding", "gzip"); PrintWriter out = new PrintWriter (new GZIPOutputStream (res.getoutputstream ())); Image : en-tête envoyé par le client : Accept: image/png, image/jpg, */* 12

(Java Server Pages) - introduction - Insérer, à la PHP, du code servlet dans des fichiers HTML Tomcat = serveur apache + servlets + moteur Raison : pas pratique d'envoyer dans des servlets du code HTML avec out.println () permet d'utiliser les éditeurs HTML sépare la présentation du contenu (traitement) 13

- exemple complet - HelloWWW.jsp : <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html><head> <title>hello WWW</title> <meta http-equiv="content-type"... > </head><%-- commentaire --%> <body> Hello <%= request.getparameter ("title") %>. </body></html> Compilation, en servlet : <H2>Titre</H2> -> out.println ("<H2>Titre</H2>"); 14

- fonctionnement interne - Le serveur HTML demande au moteur la page.jsp pas besoin de compilation ou de répertoire spécial Si la page.jsp n'est pas compilée (en servlet) ou si elle est plus récente, le moteur : la compile (en la passant à javac) répertoire où les pages compilées sont stockées : /var/cache/tomcat4/ à regarder les pages compilées! crée une instance A et exécute A.init() Sinon, il utilise l'instance A créée auparavant! Le moteur exécute A.service() Quand le moteur finit ou temps d'objet dépassé, il exécute A.destroy() 15

- types d'éléments - Expressions : chaînes affichées dans la page <%= expression %> Scriptlets : code servlet <% code %> Déclarations : méthodes/variables propres à la page <%! déclaration %> Directives : informations globales <%@ directive attribut="valeur" %> Autres directives (forward, inclusion, beans) <jsp:xxx...="..." /> 16

- expressions <%=...%> - Évaluation, conversion, affichage Placées à l'intérieur de out.println (); => pas de point-virgule à la fin! Exemple :...<BODY> Le paramètre title de la page est : <%= request.getparameter ("title") %>. </BODY></HTML> 17

- scriptlets <%...%> - Du code servlet Peut accéder aux variables et composants déclarés Insérés tels quels dans la méthode _jspservice de la servlet (get et post) Pas nécessairement des expressions complètes : <% for (int i=0 ; i<4 ; i++){ %> La valeur du compteur est <%= i %>. <BR> <% } %> 18

- scriptlets : variables prédéfinies - request response session application getservletconfig().getcontext ()... out type JspWriter (PrintWriter bufferisé) config l'objet ServletConfig 19

- déclarations <%!...%> - Inserées telles quelles (variables / méthodes) dans la déclaration de la classe Exemples : <%! private int age = 25; %> <%! public void getage () {...}; %> Les champs persistent entre appels! <%! private int nbconn = 0; %> Number of total connexions : <%= ++nbconn %> (voir servlets aussi) 20

- déclarations : méthodes - out, request etc. sont locales à jspservice => pour les utiliser, passer-les en paramètre aux méthodes pourquoi pas champs d'instance? (partage) <%! void printtitle (HttpServletRequest req, JspWriter o) throws java.io.ioexception { o.println (req.getparameter ("title")); } %>... <% printtitle (request, out); %> jspinit, jspdestroy fonctions vides par défaut appelées par init et destroy de la servlet générée 21

- directives <%@...%> - Informations globales à la page <%@ directive attribute="value"...%> Directives : include fichiers à inclure littéralement pendant la compilation, à l'intérieur de out.println pour l'inclusion de la sortie d'un pendant l'exécution : voir plus tard page informations relatives à la page Directive include : <%@ include file="..." %> incohérence possible si le fichier à inclure est modifié! 22

- directive page - import="java.io.*,java.awt.*" session="true false" (true par défaut) buffer="none Nkb" (8 kb par défaut) la taille du buffer de sortie autoflush="true false" (false par défaut) si buffer plein, vidange du buffer ou exception isthreadsafe="true false" (true par défaut) info="text" accessible par Servlet.getServletInfo () contenttype="text/html; charset=iso-8859-1" errorpage="..." page appelée si exception non gérée 23

- directive page : explications - buffer : il est possible d'écrire dans les en-têtes HTML tant qu'aucune donnée n'ait pas été écrite du buffer à la sortie errorpage : dans la page gérant l'erreur, la variable exception représente l'exception générée exceptions pouvant apparaître : IOException, ServletException et toute exception non vérifiable <%@ iserrorpage="true" %> dans la page gérant l'erreur (nécessaire pour générer le code d'initialisation de la variable exception ci-dessus) 24

- accès concurrent : problème - Page concurrent.jsp : <%! private int i = 0; %> <%= i++ %> i est un champ d'instance Une même instance peut être exécutée en parallèle (si plusieurs requêtes client) par le moteur : Servlet serv = new MaServlet (req, res); while (requête) serv.service (...); => i est une variable / zone partagée 25

- accès concurrent : problème - i++ (ou i = i+1) est composée de deux opérations : calcul de i+1 affectation du résultat à i Les deux threads peuvent se trouver en même temps entre les deux opérations => race condition à i++! 26

Utiliser : - accès concurrent : solution - synchronized : <% synchronized (this){ i++; } %> (voir cours de parallélisme) isthreadsafe=false performance dégradée utiliser seulement si strictement nécessaire 27

- transfert de contrôle - <jsp:forward page="..." /> chemin relatif à la servlet Efface la sortie actuelle Exemple : <% if (request.getparameter ("db") == null) { %> <jsp:forward page="help.jsp" /> <% } %> 28

- inclusion de fichiers - <jsp:include page="..." /> Inclut la sortie du fichier pendant l'exécution => le fichier est exécuté => fichier non modifié si le fichier inclu est modifié 29

- beans : définition - Java Bean = composant (classe) obéissant à certaines conventions : classe publique constructeur publique sans argument écrire un tel constructeur, s'il n'existe pas pas de champ d'instance publique remplacer les champs publiques par des champs privés (propriétés) méthodes get/is et set pour accéder aux propriétés propriété color : type getcolor (), void setcolor (type) propriété done : boolean isdone (), void setdone (boolean) 30

- beans : exemple - Dans ~/public_html/web-inf/classes/exemple : package exemple; public class SBean{ private int size = 162; public int getsize (){ return size; } public void setsize (int newsize){ size = newsize; } } 31

- beans prédéfinis - Les composants de Swing : JButton, JDialog, JFrame, JTextField,... Diverses classes : Calendar,... 32

- beans : avantages convention - Rajout de contraintes sur les valeurs : public void setsize (int newsize){ if (newsize < 0) senderrormessage (...); else size = newsize; } 33

- beans : avantages convention - Changement du code interne : public void setsize (int newsize){ size = meter2inch (newsize); } Effets secondaires : public void setsize (int newsize){ size = newsize; updatesizelabel (); } 34

- beans : intérêt pour - Le nom des méthodes est trouvé, par réflexion, à partir du nom des propriétés => programmation visuelle possible Avec : instanciation simple des classes Java, sans écrire du code complet Java réutilisation de code 35

- beans : exemple d'utilisation - <!DOCTYPE...> <html> <head>... </head> <body> <jsp:usebean id="bean" class="exemple.sbean" /> Value of bean : <jsp:getproperty name="bean" property="size" /> </body> </html> 36

- beans : instanciation - <jsp:usebean attribut="valeur" /> Exemples d'attributs : id="name", permet de référencer plus tard cette instance de bean si une instance de bean avec mêmes nom et portée existe, utilise celleci utile surtout pour portées session et application sinon, crée une instance erreur si un bean de même nom et portée différente existe class="pacquetage.class", nom complet du bean un bean doit toujours se trouver dans un paquetage type="pacquetage.class", synonime de class 37

- beans : instanciation - Exemples d'attributs : scope="page request session application", portée du bean page (valeur par défaut) : disponible seulement dans cette page request : disponible pendant la requête, avec ServletRequest (détruit à la fin de la requête) session : disponible pendant toute la session, avec HttpSession.getAttribute (nom) application : existe pendant toute l'application Un bean en vie signifie que la valeur de ses champs est gardée 38

- beans : utilisation - <jsp:usebeans id="bean" class="exemple.sbean" /> <% exemple.bean bean = new exemple.bean (); %> <jsp:setproperty name="bean" property="size" value="173" /> <% bean.setsize (173); %> conversion automatique! <jsp:getproperty name="bean" property="size" /> <%= bean.getsize () %> Imbrications dans les valeurs possible : <jsp:setproperty name="..." property="title" value="<%= request.getparameter (\"title\") %>" /> pour les types autres que String, utiliser e.g. Integer.parseInt 39

- beans : avantages - Les beans peuvent être remplacés par des scriptlets Mais : beans peuvent être partagés entre pages / servlets voir <jsp:usebean scope="..." /> beans plus faciles pour lecture des paramètres 40

- beans : utilisation des paramètres - Association d'une propriété à un paramètre du même nom : <jsp:setproperty name="bean" property="size" /> Association d'une propriété à un paramètre : <jsp:setproperty name="bean" property="size" param="taille" /> Association de toutes les propriétés aux paramètres : <jsp:setproperty name="bean" property="*" /> propriété non initialisée si pas de paramètre du même nom 41

- beans : exemple complet - Exemple complet avec : un bean, avec : propriétés i et j méthode String generate () retournant tous les nombres compris entre i et j une page recevant comme paramètres les deux propriétés du bean, qui exécute generate () voir le résultat si deux appels : le 1er avec les deux paramètres le 2ème avec un seul paramètre (paramètre retenu du 1er) voir ses différentes portées 42

- beans : opérations conditionnelles - Instancie un bean et initialise des propriétés seulement lorsque le bean est instancié <jsp:usebean...> xyz </jsp:usebean> instancie un bean s'il n'est pas instancié xyz (éléments setproperty) seront exécutées seulement si un bean nouveau est créé pas de / à la fin de l'ouverture de la balise! 43

meilleur : Intégration servlets / - introduction - génération de contenu HTML Servlet meilleure : traitement complexe formatage HTML complexe sortie binaire (e.g. image) => combiner servlets et pour des pages complexes 44

Intégration servlets / - méthodologie - Requête originale affectée à une servlet éventuellement, elle dispatche à la servlet appropriée Servlet fait le traitement Les résultats sont mis dans des beans Requête transférée au approprié pour affichage 45

Intégration servlets / - côté servlet - Écrire / extraire des données d'un bean request.setattribute ("key", new Expl ()); request.getattribute ("key"); Transférer le contrôle à une servlet / page getservletcontext().getrequestdispatcher("path").forward (request, response); "path" commence par / et est relatif à l'application exemple : "/servlet/achat" la sortie générée est effacée => il faut qu'aucune sortie n'ait pas été envoyée au client 46

Intégration servlets / - côté - Récupérer un bean <jsp:usebean id="key" class="pkg.expl" scope="request" /> le id est le même que la clé de setattribute! utiliser <jsp:setproperty... /> et les autres Transférer le contrôle à une servlet / page <jsp:forward... /> "path" commence par / et est relatif à l'application 47

Intégration servlets / - partage des beans - scope=page rien scope=request request.setattribute scope=session HttpSession.setAttribute scope=application getservletcontext.setattribute? 48

JDBC Une SGBD utilise une certaine API (interface) Plusieurs APIs existent JDBC (Java Database Connectivity) = API SQL de bas niveau bibliothèque standard pour accéder à des BDs utilisable par toutes les SGBD import java.sql.* Voir la documentation 49

JDBC - fonctionnement - établir connexion effectuer des requêtes erreur si la BD ne reconnaît pas la requête utiliser les données obtenues (e.g. affichage) besoin de types de variables conformes à SQL, e.g. dates et valeurs monétaires mettre à jour les informations terminer connexion 50

JDBC - API - DriverManager : chargement de pilotes et connexion à la BD Connection : une connexion Statement : une requête SQL ResultSet : résultat d'une requête DriverManager Connection Connection Connection Statement Statement Statement Statement ResultSet ResultSet ResultSet 51

JDBC - exemple - URL url = new URL ("jdbc:odbc:annuaire"); Connection c = DriverManager.getConnection (url, "", ""); Statement s = c.createstatement (); ResultSet rs = s.executequery ("select * from phone"); while (rs.next ()){ } String nom = rs.getstring ("nom");... rs.executeupdate ("delete from phone where nom='...'");.close () sur tous les objets Voir... pour un exemple complet 52