Escolar Documentos
Profissional Documentos
Cultura Documentos
Nhan LE THANH
- 1-
V- PROGRAMMATION CLIENT/SERVEUR
OBJECTIF Mettre en place des applications externes de la base de donnes. Trois modes de programmations seront tudis :
- Approche CL/SV avec pr-compilation : Pro-C - Approche CL/SV avec un mdiateur : JDBC - Approche CL/SV via un serveur de mtiers et HTTP : Servlet et JSP
- 2-
V- PROGRAMMATION CLIENT/SERVEUR
Serveur SQL
JDBC
Client SQL en Java
V- PROGRAMMATION CLIENT/SERVEUR
Architectures Client/Serveurs Architectures 2-tiers (2 tages) Premire approche : Clients muscls et serveur
SQL lger
Client en charge de lapplication et du dialogue Serveur SQL limits aux donnes Avantages : BD relativement portable Inconvnients : Difficult dployer et maintenir les clients Peu de factorisation de programmation
- 4-
V- PROGRAMMATION CLIENT/SERVEUR
Architectures Client/Serveurs Architectures 2-tiers (2 tages) Deuxime approche : Clients lgers et serveur SQL lourd
Client limit aux dialogues et/ou aux interfaces graphiques Serveur SQL en charge des services mtiers (procdures stockes, dmons, ) Inconvnients :
BD non portable (langage des serveurs non normaliss)
Avantages :
Clients plus faciles dployer et maintenir Factorisation de la programmation Minimise les changes rseau
- 5-
V- PROGRAMMATION CLIENT/SERVEUR
http
ODBC
JDBC JDBC
Serveur SQL
Serveur SGBD de donnes Serveur dApplications centralises (services mtiers ) Client SQL Client lger / universel (navigateur web) en charge du dialogue et/ou des interfaces
- 6-
V- PROGRAMMATION CLIENT/SERVEUR
Inconvnients
Gestion de plusieurs serveurs Cots dachat plus lvs
- 7-
V- PROGRAMMATION CLIENT/SERVEUR
Architectures Client/Serveurs Deux mode de programmation Client/Serveur Une couche rseau propritaire + API langage :
ODBC + pilote (API C/C++ pour serveurs MS) SQLnet + OCI (API C/C++ pour Oracle)
- 8-
* Utilisation des variables locales * Connexion et communication * Manipulation de donn es sans curseurs * Manipulation de donn es avec curseurs * Contrles transactionnels * Excution dynamique * Administration de base de donnes
- 9-
0- Architecture de lapproche
PROGRAMme C : CLIENT Programme C+ SQL Interface Runtime Pr-complilateur C-SQL SGBD : SERVEUR
Bib. Runtime
Programme excutable
- 10 -
- 11 -
-> Utilisation d'un fichier externe des dfinitions On peut intgrer un fichier externe contenant les dclarations des variables locales dans le programme par l'instruction SQL "include" : - syntaxe : - exemple : exec sql include nom_fichier ; exec sql begin declare section; exec sql include 'mesvar.dec' ; exec sql end declare section;
- 12 -
- 13 -
- 14 -
- 15 -
- Types particuliers
- Variables systmes LEVEL - UID - USER - SYSDATE - ROWID - ROWNUM - Variables d'indicateur de valeur NULL : INPUT: -1 valeur NULL en entr e 0 valeur non NULL en entre OUTPUT: -1 valeur NULL en sortie 0 valeur exacte > 0 valeur exacte tronque
Dans une instruction SQL, toute variable locale doit tre prfixe par :
- 16 -
SQLCA
-> La zone de communication (SQLCA) permet SGBD de fournir au programme htedes informations sur l'tat de l'excution d'une instruction SQL : codes d'erreur, nombre de lignes au rsultat, ... ->dfinir cette zonne de communication exec sql include sqlca ;
- sqlerrd
tableau de 6 long entiers (4 octetsx6) : (errortext), sqlerrd(3), (sqlerrd(2) dans C) contient le nombre de lignes procdes par une des instructions : "delete", "fetch ", "insert", "update", "copy", "modify" ou "create as select"
- sqlwarn0 - sqlwarn78 octets qui dsignent une anomalie d'excution (valeur 'w') 0 1 2 3 4 6 5 et 7 s'il y a au moins une anomalie s'il y a une troncature d'une chane s'il y a une limination d'une valeur nulle dans une agrgation type ambige entre une variable locale et une colonne si on prpare une "update" ou "delete" sans "where" si la transaction termine anormalement non utiliss
- 18 -
= = = =
vrai s'il y a une anomalie vrai s'il y a une erreur d'excution vrai s'il le r sultat est vide vrai s'il y a une diffusion de message dans une procdure
continuer le programme arrter le programme brancher une autre partie du programme appeler une procdure
-> Rcupration des messages d'erreur : On peut rcuprer les messages d'erreur par l'instruction exec sql inquire_sql(chaine_var = errortext) ;
- 19 -
- 20 -
-> syntaxe
-> la disconnexion du programme de la base de donn es se fait avec l'instruction"disconnect" exec sql disconnect;
-> Quand l'instruction "stop" est excute par un "whenever ", la "disconnect" est excute automatiquement avant l'arrt du programme
-> Exemple
- 21 -
Rsultat de la requte
- Dans l'interface de prog . SQL, il est possible de d finir plusieurs curseurs d'usager pour une requte SQL. Ces curseur sont visibles aux usagers
Souplesse du SGF
- 22 -
- La recherche singleton rend au programme maximum une ligne de r sultat - S'il y a plusieurs lignes de rsultat, seule la premire ligne est prise en compte
if (errcode > 0) && (errcode != 100) then printf (... nom, sal) else prinf ('erreur') ;
- On ne peut pas effectuer plusieurs accs au mme fichier rsultat. A chaque fois, la requte doit tre cite explicitement dans le programme
- 24 -
Squence recherche sans modification Q1) Dclarer un curseur sur l'ensemble des employs (nom et salaire) du d partement "info" qui sont classs dans l'ordre ascendant des noms et descendant des salaires exec sql declare c1 cursor for select enom, salaire from employ where dept = select distint dno from dpartement where dnom = 'info' order by 1 asc, 2 desc ;
Squence recherche avec modification Q2) Dclarer un curseur de mise jour (salaire) sur l'ensemble des employs ayant un nom dbutant par la lettre "A"
critre = 'A%'; exec sql declare c2 cursor for select enom, salaire from employ where enom like :critre for update of salaire ;
- 26 -
- squence recherche pour les mises jour exec sql declare curseur_nom | string_var cursor for update_select [for [deferred | direct] update of column {, column }]; Update_select select result_expression {, result_expression } from table_name [corr_name ] [where search_condition ]
- 27 -
- union
- Close :
- Fetch :
Syntaxe
exec sql open curseur_nom [for readonly] ; exec sql close curseur_nom ; exec sql fetch curseur_nom into variable {, variable} ;
- 29 -
- L'instruction "fetch " opre sur une seul ligne la fois. Elle peut donc tre utilise dans une boucle du langage hte
- Quand "fetch " applique sur la derni re ligne de la squence, le curseur maintient sa derni re position et la variable "sqlcode" de la SQLCA prend la valeur 100. Aucun changement sera produit par fetch sur les variables locales cites dans la clause "into"
- On peut utiliser l'instruction "whenever " pour contrler la fin d'une boucle de parcours avec "fetch " en testant l'indicateur "not found" qui sera signal quand "sqlcode" a la valeur 100. Dans ce cas, l'instruction "goto" est souvent utilise pour mettre en ouvre une rupture de squence
- 30 -
exec sql include sqlca ; exec sql begin declare section ; char nom[20] ; unsigned age ; exec sql end declare section ; ... exec sql declare c1 cursor for select enom, salaire from employ where dept = 5 order by 1 asc, 2 desc ;
exec sql whenever not found goto close_cursor; exec sql open c1; repeat exec sql fetch c1 into :nom, :age ; printf(... nom, age) ; end repeat ; close_cursor : exec sql whenever not_found continue ; exec sql close c1;
- 31 -
-> Description - Les curseurs impliqu es dans une mise jour ou une suppression doivent pr alablement tre dclar s avec la syntaxe de "update_cursors" - Pour les mises jour, si l'option "direct" est mentionn e, toutes les mises jours effectues dans une squence peuvent tre visibles dans les autres squences sur cette table sans attendre la clture de la squence
- 32 -
2- Privilge exec sql grant all [privileges] on table_name { ,table_name } to public | user_name{, user_name}; exec sql grant priv {, priv } on table_name {, table_name } to public | user_name{, user_name}; priv : delete, execute, insert, select, update (column {, column })
- 34 -
- 36 -
- 37 -
/* Cr ation de la table EMP */ exec SQL CREATE TABLE emp emo number , enom char(15), ejob char(10), edent date, esal number , deptno number , echef number ); printf("table EMP est cr e \n"); /* commit et dconnexion de l'ORACLE */ exec SQL COMMIT WORK RELEASE; exit(0); }
Le middleware
Le middleware est le logiciel du milieu qui assure les dialogues entre clients et serveurs souvent htrognes. Ensemble des services logiciels construits au-dessus d'un protocole de transport afin de permettre l'change de requtes et des rponses associes entre client et serveur de manire transparente Un systme ouvert est un systme dont les interfaces obissent des standards internationaux tablis au sein de structures accessibles tous. De nombreux groupes proposent des standards, dont l'ISO, l'ANSI, le CCITT, l'IEEE.
- 39 -
SERVEUR
interface
API Transport
- 40 -
Adaptateur
1.
Gnralits
Open Data Base Connectivity Implmentation du standard CLI Accs normalis des SGBD relationnels diffrents (Oracle, DB2 ...) Accs mme des pseudo-SGBD, ou des tableurs, ou encore des gestionnaires de fichiers Interoprabilit avec des sources de donnes htrognes Avec ODBC, il est possible de d velopper une application sans se soucier de la source de donnes qui sera utilise en exploitation API C (SDK ODBC) et classes C++ (MFC)
- 43 -
2.
Source de donnes
Source de donnes
Source de donnes
- 44 -
3.
Gestionnaire de pilotes
Charge dynamiquement les pilotes correspondant aux sources de donnes auxquelles l'application souhaite se connecter Consulte le fichier ODBC.INI / administrateur OGBC pour retrouver le pilote Transmet les requtes au pilote Transmet les rsultats l'application Pour accder un nouveau SGBD, il suffit d'installer un pilote spcifique ce SGBD (aucun changement dans l'application) Une application peut tablir plusieurs connexions diffrentes sources de donnes
- 45 -
Fichier ODBC.INI
Dfinit des sources de donnes Exemple [ODBC Data Sources] iut1=Oracle73 Ver 2.5 (32 bit) ... [iut1] Driver32=C:\ORANT\ODBC250\sqo32_73.dll La section [ODBC Data Sources] donne le nom de chaque source disponible et le pilote associ A chaque source correspond une section particulire donnant des informations supplmentaires : le nom du serveur, le protocole utilis pour les communications ...
- 46 -
Administrateur ODBC
ajoute les sources de donnes dans le fichier ODBC.INI en utilisant l'utilitaire ODBC Administrator installe les pilotes ODBC tablit les connexions avec des BD physiques
Source de donnes
Donnes auxquelles un utilisateur souhaite accder Identifie par une entre dans le fichier ODBC.INI Chaque entre de nom de source dans ODBC.INI spcifie des informations de connexion
- 47 -
4. Niveaux de conformit
En principe, une application ODBC devrait pouvoir interoprer avec n'importe quelle source de donnes. Mais en pratique, les pilotes et les sources de donnes associes n'offrent pas tous les mmes possibilits de fonctionalits de l'API et de requtes SQL Niveaux de conformit API Dfinit diffrents niveaux de fonctions de l'API Un pilote particulier prcise son niveau de conformit API Niveaux de conformit SQL Dfinit diffrents niveaux de grammaire SQL
- 48 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 1. ODBC Niveaux de conformit API
Le niveau noyau (Core API) Correspond au standard CLI de l'X/Open Allocation et lib ration de descripteurs d'environnement, de connexion et d'instruction Fonction de connexion Prparation et excution d'instruction SQL Excution directe d'instructions SQL Liaison pour des paramtres SQL et des colonnes de r sultats Validation ou annulation de transactions Rcupration d'informations sur des erreurs Le niveau 1 (Level 1 API)
Noyau + Fonctions permettant d'obtenir des informations issues du catalogue d'une base, ainsi que des informations sur un pilote ou une source de donnes
- 49 -
- 50 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 1. ODBC 5. Structure d'un programme ODBC
SQLAllocEnv
dfinit un descripteur d'environnement pour l'application ce descripteur est l'adresse d'une zone mmoire o seront places des informations globales pour l'application, par exemple, le descripteur de la connexion courante dfinit un descripteur de connexion ce descripteur est l'adresse d'une zone mmoire o seront places des informations concernant une connexion un descripteur de - 51 connexion est toujours associ un descripteur
SQLAllocEnv SQLAllocConnect SQLConnect SQLAllocStmt Envoi de requtes SQL SQLFreeConnect SQLFreeStmt CLOSE option DROP option SQLDisconnect SQLFreeConnect SQLFreeEnv
SQLAllocConnect
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 1. ODBC SQLConnect charge un pilote et tablit une connexion entre l'application et une source de donnes SQLDisconnect termine une connexion entre l'application et une source de donnes SQLFreeConnect libre un descripteur de connexion SQLFreeEnv libre un descripteur d'environnement
- 52 -
Exemple de programmation
#include <windows.h> #include <sql.h> #include <sqlext.h> HENV henv; // descripteur d'environnement HDBC hdbc; // descripteur de connexion // Allouer un descripteur d'environnement SQLAllocEnv(&henv); // Allouer un descripteur de connexion SQLAllocConnect(henv, &hdbc); // Etablir la connexion SQLConnect( hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS ); /* TRAITER LES REQUETES SQL */ // Terminer la connexion SQLDisconnect(hdbc); // Liberer les descripteurs SQLFreeConnect(hdbc); SQLFreeEnv(henv);
- 53 -
Mode transactionnel
SQLConnectOptions permet de spcifier diffrentes options de connexion, en particulier le mode de validation il faut utiliser SQLConnectOptions avant d'tablir la connexion SQLTransact termine une transaction soit en la validant \verb+SQL_COMMIT+ soit en l'annulant \verb+SQL_ROLLBACK+
- 54 -
Exemple de programmation
SQLAllocEnv(&henv); SQLAllocConnect(henv, &hdbc); SQLSetConnectOption(hdbc, SQL_AUTOCOMMIT, SQL_AUTOCOMMIT_OFF); SQLConnect( hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS ); /* mise a jour no 1 */ /* mise a jour no 2 */ /* mise a jour no 3 */ SQLTransact(henv, hdbc, SQL_COMMIT); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv);
L'appel SQLTransact(henv, hdbc, SQL_COMMIT) permet de valider en bloc les 3 mises jour effectues dans le contexte de la connexion hdbc.
- 55 -
- 56 -
SQLPrepare
SQLExecute
excute une instruction SQL prpare en utilisant les valeurs courantes des ventuels param tres on utilise cette fonction lorsqu'on doit excuter plusieurs fois la mme instruction dans l'application, dans ce cas, l'instruction n'est pr par e qu'une seule fois
Requte en boucle ?
SQLSetParam
permet d'associer un paramtre d'une instruction SQL, une variable contenant la valeur du param tre l'utilisation de cette fonction est dconseill depuis ODBC v2.0 o elle a t remplace par SQLBindParameter mais qui est une fonction du niveau 1
- 57 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 1. ODBC Terminer le traitement d'une instruction SQL
La fonction SQLFreeStmt permet de lib rer les ressources associ es un descripteur d'instruction Elle possde quatre options:
Exemple de rogrammation
SQL_CLOSE
Ferme le curseur ventuellement Le descripteur d'instruction peut tre utilis nouveau
SQL_DROP
Ferme le curseur ventuellement Libre toutes les ressources associ es au descripteur d'instruction
SQL_UNBIND
Libre tous les buffers lis par SQLBindCol
SQL_RESET_PARAMS
Libre tous les buffers requis par SQLBindParameter
- 58 -
rc = SQLAllocEnv(&henv); rc = SQLAllocConnect(henv, &hdbc); rc = SQLConnect(hdbc, "oracle", SQL_NTS, "scott", SQL_NTS, "tiger", SQL_NTS); rc = SQLAllocStmt(hdbc, &hstmt); rc = SQLExecDirect(hstmt, "select * from employe ", SQL_NTS); /* RECUPERATION DES RESULTATS */ SQLFreeStmt(hstmt, SQL_UNBIND); SQLFreeStmt(hstmt, SQL_DROP); SQLFreeStmt(hstmt, SQL_CLOSE); SQLDisconnect(hdbc); SQLFreeConnect(hdbc); SQLFreeEnv(henv);
SELECT
SQLBindCol SQLFetch
D autres lignes ? oui non
- 59 -
SQLRowCount
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC (Java Data Base Connectivity)
Objectfs :
Simple, Complet (en cours...), Portable, Modules rutilisables et/ou gnriques, Integration aux ateliers de dveloppement
- 61 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : architecture de mise en oeuvre
- 62 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Structure logicielle
- 63 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Dclaration du pilote JDBC
L'appel a forName dclenche un chargement dynamique du pilote. Un programme peut utiliser plusieurs pilotes, un pour chaque base de donnes. Le pilote doit tre accessible partir de la variable d'environnement CLASSPATH.
- 64 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Connexion la base de donne
jdbc:odbc:msql;USER=fred;PWD=secret
- 65 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Les requtes en JDBC
Voici une utilisation type : Statement st = conn.createStatement(); ResultSet rs = st.executeQuery( "SELECT Nom,Prenom,Age FROM personne " + "ORDER BY age"); while (rs.next()) { System.out.println("Nom : " + rs.getString(1)); System.out.println("Prenom : " + rs.getString(2)); System.out.println("Age : " + rs.getString(3)); } rs.close(); // Fermeture st.close(); conn.close();
- 66 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : La classe java.sql.ResultSet
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : La classe java.sql.ResultSet
Pour les dates : java.sql.Date : codage de la date, java.sql.Time : codage de l'heure, java.sql.TimeStamp : date et heure,
- 68 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Appel de procdures stockes dans le SGBD
Appel type :
CallableStatementst = conn.prepareCall("{call nom_de_fonction stocke[(?,?)]}" ); // fixer le type de parametre de sortie st.registerOutParameter(2, java.sql.Types.FLOAT); st.setInt(1, valeur); // fixer la valeur du param tre st.execute(); System.out.println("resultat = " + st.getFloat(2));
Avantages : - efficacit (moins de transfert de donnes), - compilation des procdures Inconvnient : pas de norme !
- 69 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Erreurs et warnings
- 70 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Gestion des transactions
Le mode par defaut est Auto Commit On peut utiliser le mode manuel en dsactivant le mode Auto Commit :
connexion.setAutoCommit(false) ;
- 71 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Mta informations sur les Result Set et Base de donnes
Exemple 1 ResultSetMetaData m = rs.getMetaData(); Exemple 2
DataBaseMetaData dbmd = connexion.getMetaData() ;
Informations disponibles :
nombre de colonnes Libelle d'une colonne table d'origine type associe a une colonne la colonne est-elle nullable ? etc.
Informations disponibles :
tables existantes dans la base nom d'utilisateur version du pilote prise en charge des jointure externes ?
etc.
Avantages :
Code indpendant Code rutilisable !
- 72 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Complments sur les Result Set
- 73 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Complments sur les Result Set
Modication :
rs.absolute(100); rs.updateString("Nom", "Fred"); rs.updateInt("Age", 30); rs.updateRow ();
Destruction :
rs.deleteRow ();
Insertion :
rs.moveToInsertRow (); rs.updateString("Nom", "Fred"); rs.updateInt("Age", 30); rs.insertRow (); rs.first();
- 74 -
V- PROGRAMMATION CLIENT-SERVEUR II- APPROCHE DE MEDIATEUR : ODBC et JDBC 2. JDBC : Complments sur les Result Set
Amliorations :
Save point : pose de point de sauvegarde. Connection Pool : Gestion des ensembles de connexions partagees . Support des sequences (auto generation de valeurs). Augmentation et mise a jour des types
Les RowSet :
javax.sql.rowset.CachedRowSet rs = new com.sun.rowset.CachedRowSetImpl(); rs.setUrl("jdbc:mysql://localhost/dbessai"); rs.setCommand("SELECT * FROM personne"); rs.setUsername("massat "); rs.setPassword("..."); rs.setConcurrency (ResultSet.CONCUR_UPDATABLE); rs.execute(); while (rs.next()) {System.out.println("Nom : " + rs.getString("nom")); } rs.close();
- JDBCRowSet (base sur JDBC), - CachedRowSet (dconnecte de la base), - WebRowSet (change base sur des flux XML)
- 75 -
programme composant d'un serveur Web ou d'un serveur d'applications classe Java gre par un Servlet Container Charge dynamiquement par le serveur engendre des contenus dynamiques interagit avec un client en mode request/response
correspond aux cgi-bin aux Nescape Server APIs aux Modules Apache
- 76 -
- 77 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : prsentation
Servlet Container
Partie d'un serveur WEB ou d'un serveur d'applications (type J2EE) soit partie intgrante du serveur soit composant ajout soit serveur lui-mme Protocoles supports HTTP1.1, HTTPS Obligatoire dans un serveur Java2EnterpriseEdition(J2EE)
- 78 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : prsentation
HTTP
response request
cgi-bin
jvm
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Modle de programmation
- 80 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
L'interface Servlet Abstraction racine de toutes les implmentations des servlets Dclare les mthodes pour grer un servlet et pour communiquer avec le client Web Ces mthodes sont implmentes par exemple par la classe HttpServlet ou par une classe drive HttpServlet crite par le programmeur
- 81 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
Structure dune servlet import javax.servlet.*; public class first implements Servlet { public void init(ServletConf config) throws ServletException {} public void service( ServletRequest req, ServletResponse rep) throws ServletException, IOException {} public void destroy() {} } - 82 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
- 83 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
L'interface Servlet
Servlet GenericServlet
classe
HttpServlet
classe
doGet(HttpServletRequest req, HttpServletResponse resp ) doPost(, ) doGet( HttpServletRequest req, HttpServletResponse resp ) doPost(, )
- 85 -
MaServlet
classe
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
- 86 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
La communication avec le client du Servlet Capture des requtes HTTP de type GET Lorsque le client envoie un URL ou un formulaire avec action=GET
http://monserveur/unservlet?nom=toto
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
{ resp.setContentType("text/html"); PrintWriter out = resp.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>Essai1 </title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>ESSAI1 </h3> <br> Coucou"); out.println("</body>"); out.println("</html>"); }
- 90 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
La communication avec le client: HttpServletResponse Interface implment par le servlet engine Type de l'objet qui permet de rpondre au client (dpendant de lobjet pass comme paramtre dans doGet ou doPost)
- 92 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
- 93 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
- 94 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
La communication avec le client: HttpServletRequest Interface implment par le servlet engine Type de l'objet qui permet de rcuprer les donnes du client (paramtre, IP, )
(dpensez de lobjet pass comme paramtre dans doGet ou doPost)
- 95 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
Exemple
if ( req.getParameter("serveur").equals("oracle") ) {}
- 96 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
Exemple
if ( req.getParameterValues.length() == 1 ){}
- 97 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
- 98 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
La communication avec le client: HttpSession Interface (implmentes par le Servlet Engine) Type de l'objet session rcupr dans un requte Permet de garder des objets ("nomms") persistants Les objets stocks sont aussi appels "valeurs" Implment avec un sessionId stock dans les cookies du client
- 101 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
import java.io.*; import java.servlet. *; import javax.servlet. *; public class DemandeInfos extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println ("<html> ");out.println ("<body>"); out.println("<head>"); out.println("<title >DemandeInfos</title>"); out.println ("</head>"); out.println("<body> "); out.println ("<h3>Informations</h3>");
- 103 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
import java.io.*; import java.servlet.*; import javax.servlet.*; public class DemandeInfos extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title>DemandeInfos</title>"); out.println("</head>"); out.println("<body>"); out.println("<h3>Informations</h3>"); out.println("Method: " + request.getMethod()); out.println("Chaine URI:"+request.getRequestURI()); out.println("AddresseIP:"+request.getRemoteAddr()); out.println("</body>"); out.println("</html>"); }
- 104 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Le Package javax.servlet
import java.io.*; import java.servlet.*; import javax.servlet.*; public class DemandeInfos extends HttpServlet { public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException { } public void doPost(HttpServletRequest req, HttpServletResponse rep) throws IOException, ServletException { doGet (req, rep); } }
- 105 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
Exemple dutilisation
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } }
- 106 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
Compilation et installation
Une application web = un espace virtuel Contient html, images, servlets, jsp... Avec Tomcat : Editer <tomcat_dir>/server.xml pour dfinir une application Web
<Context path= nlt " docBase ="pit " defaultSessionTimeOut ="30" isWARExpanded ="true" isWARValidated ="false " isInvokerEnabled="true" isWorkDirPersistent ="false " />
" Dans cet exemple, l'application web se nomme pit " Mettre les classes dans <tomcat_dir>/nlt/WEB-INF/classes " Editer <tomcat_dir>/nlt/WEB-INF/web.xml
- 107 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
Application web
Linstallation varie dun serveur l'autre Pour compiler : Positionner le classpath, puis depuis le rpertoire hall/ : javac -classpath .:<tomcat_dir>/lib/servlet.jar HelloWorld.java Deux manires de tester : Avec JSWDK, mettre hall.HelloWorld dans le rpertoire d'exemple Avec Apache Tomcat : crer une application web
- 108 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
Application Web (suite) Une fois une application web cre, on peut mettre autant de servlets que l'on veut... Relancer Tomcat chaque modif des fichiers XML server.xml et/ou web.xml Pour invoquer la servlet, utiliser l'alias : http://host/nlt/servlet/HelloWorld ou le nom complet... http://host/nlt/servlet/hall.HelloWorld
- 110 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
Chargement / invocation dune servlet D'une manire gnrale, une URL du type :
- 111 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
- 112 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Application WEB avec TOMCAT
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des formulaires HTML
La partie complique = paramtres du formulaire Visibles ou non dans l'URL (GET : visible /POST: non visible) Ces paramtres doivent tre dcods !
" Partie la plus difficile. Encodage = norme CGI
- 114 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des formulaires HTML
Rcuprer les paramtres Mthode getParameter() de HttpServletRequest (Fonctionne avec GET ou POST)
public class ShowParameters extends HttpServlet { public void doGet(HttpServletRequest request,...) { out.println(request.getParameter(param1) ); Enumeration paramNames=request.getParameterNames(); String[] paramValues = request.getParameterValues(paramNames);
} }
- 115 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
Cest quoi ? : Morceaux dinformations envoys par le serveur et renvoys par le client quand il revient visiter le mme URL
Dure de vie rglable Permet la persistance
A quoi a sert ?
Identification des utilisateurs (e-commerce) Eviter la saisie dinformations rptition login, password, adresse, tlphone Grer des prfrences utilisateur sites portails
- 116 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
Attention : scurit : Jamais interprt ou excut : pas de virus Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site) : pas de surcharge de disque Bien pour rendre prives des donnes non sensibles nom, adresse, mais pas No CB ! mais ne constitue pas un traitement srieux de la scurit
- 117 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
Manipulation de cookies :
Utiliser les fonctions de l API des servlets crer un cookie : classe Cookie, crire/lire un cookie : addCookie(cookie), getCookies(), positionner des attributs dun cookie : cookie.setXxx()
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
- 119 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
- 120 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des cookies
- 122 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
Problmatique
Protocole HTTP = protocole Internet dconnect diffrent de Telnet, Ftp, traite les requtes et les rponses comme transactions simples et isoles (requtes non apparentes)
Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes ie. maintenir une connexion de lutilisateur sur le serveur pour se faire : concept de "suivi de sessions"
- 123 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
4 mthodes avec les servlets Java 1) utilisation des cookies (dj vu) 2) rcriture d'URL : passage de paramtres 3) utilisation des champs de formulaire "hidden" 4) utilisation du JSDK (HttpSession API)
- 124 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
l'ID utilisateur est transmis en mme temps que la requte; il est accd par chaque servlet mentionne qui rcupre les informations persistantes (BD, fichiers) partir de cet ID Limitations : donnes volumineuses, caractres autoriss, longueur URL, donnes visibles (s curit)
- 125 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
<INPUT TYPE="HIDDEN" NAME="uid" VALUE= nlt"> Limitations : idem la "rcriture d'URL" sauf pour la scurit (utilisation de POST)
- 126 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
Servlet session
Trs simple avec l'API des servlets (JSDK) objet HttpSession
Principe : Un objet "session" peut tre associ avec chaque requte Il va servir de "container" pour des informations persistantes Dure de vie limite et rglable
- 127 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Gestion des session
- 129 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 1. SERVLET : Connexion Base de donnes
- 130 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP (Java Server Pages)
Solution de Java alternative ASP/PHP, etc... Technologie qui permet de mixer Java et HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Welcome to Our Store</TITLE></HEAD> <BODY> <H1>Welcome to Our Store</H1> <SMALL>Welcome, <!-- User name is "New User" for first-time visitors --> <% out.println (Utils.getUserNameFromCookie(request)); %> To access your account settings , click <A HREF="Account -Settings.html">here.</A></SMALL> <P> Regular HTML for all the rest of the on-line stores Web page. </BODY></HTML>
- 131 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP (Java Server Pages)
http Navigateur WEB HTML JSP
Navigateur WEB
formulaire http
Serveur SQL
beans : services Java ralisant la couche mtier JSP : permet me mixage Java/HTML. En charge du dialogue
- 132 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP (Java Server Pages)
Un exemple :
<html>< head><title>Un exemple de page JSP</ title></head ><body> <!-- dfinit les informations globales a la page --> <%@page language ="java" %> <!-- Dclare la variable c --> <%! char c = 0; %> <!-- Scriplet (code java) %> <% for(int i = 0; i < 26; i++){ for(int j = 0; j < 26; j++){ c = (char)(0x41 + (26 - i + j)%26); %> <%= c %> <% } %> <br> <% } %> </body></html>
- 133 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
Trois types de balise utiliss dans html : 1 - Scripting elements : pour le code java 2 - directives : pour le contrle de la structure 3 - actions : pour limportation de composants existants
- 134 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
Scripting elements :
Forme : <%= expression %>
Exemple : Il est <%= new java.util.Date() %> <P>
et votre hostname est <%= request.getRemoteHost() %>
permet dintgrer des valeurs dans le code HTML ces valeurs sont values, converties en cha nes de caractres et affiches les objets implicites (request, response, session, out, ...) disponibles
- 135 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
cest un bloc de code Java plac dans _jspService() de la servlet gnre ayant accs : aux variables et beans dclars ( <%! %> ) aux objets implicites (voir plus loin)
- 136 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
dfinitions des m thodes et variables de classe utiliser dans toute la page dfinit les m thodes jspInit() et jspDestroy()
- 137 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
Directives :
Forme : <%@ directive attribut1="valeur"
attribut2="valeur"... %>
2 directives possibles (jsp1.0) : page : informations relatives la page include : fichiers inclure littralement
- 138 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Trois types de balise
- 140 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Variables prdfinies
Ou "objets implicites", ils sont accessibles dans les scripting elements : request : le HttpServletRequest response : le HttpServletResponse session : le HttpSession out : flot de sortie (idem response.getWriter()) application : le ServletContext (idem getServletConfig().getContext() ) config, pageContext , page... : peu utiles
- 141 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Actions
Permettent de faire des actions au moment o la page est demande par un client : inclure dynamiquement un fichier utiliser des beans rediriger vers une autre page etc... Syntaxe XML
- 142 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Actions (suite)
- 143 -
V- PROGRAMMATION CLIENT-SERVEUR III- APPROCHE DE programmation Web : Servlet et JSP 2. JSP : Usebean
et getProperty
/> Pour lire une proprit du bean : <jsp:getProperty name="name" property="property" />
- 144 -
2. JSP : Usebean
Initialise tous les attributs de l objet name avec les paramtres HTTP du mme nom En 2 lignes !
- 145 -
2. JSP : Usebean
- 146 -
et getProperty Exemple dutilisation dun bean : (suite) Le code source Java du bean :
SimpleBean.java package tpinfo; public class SimpleBean { private String message = "no message"; public String getMessage() { return message; } public void setMessage (String message) { this.message = message; } }
- 147 -
2. JSP : Usebean
et getProperty Exemple dutilisation dun bean : (suite) Le code source Java du bean :
SimpleBean.java package tpinfo; public class SimpleBean { private String message = "no message"; public String getMessage() { return message; } public void setMessage (String message) { this.message = message; } }
- 148 -
2. JSP : Usebean