You are on page 1of 65

Interoprabilit des applications rseaux

FSTG Marrakech BENHADDI Meriem

Pr-requis
Langage Java : codage Langage UML : conception des tudes de cas raliser Quelques connaissances en dveloppement web (HTML, navigateur, )

J2SDK

J2SDK est une plate-forme ou un kit de dveloppement java. Un kit de dveloppement ou trousse de dveloppement logiciel est un ensemble d'outils permettant aux dveloppeurs de crer des applications de type dfini (par exemple pour Android ou J2EE). Les kits de dveloppement logiciels sont souvent dsigns par le sigle anglais SDK (Software Development Kit)
J2SDK comprend 3 ditions : le Kit de dveloppement standard : J2SE le kit enterprise edition : J2EE le kit de dveloppement micro edition : J2ME J2SDK contient les outils ncessaires au dveloppement, compilation et excution des programmes : un JDK et un JRE

J2SE

J2SE contient : le noyau (langage sur lequel se base la plate-forme) : le langage Java Un ensemble dAPIs permettant le dveloppement dapplications API : Une interface de programmation (Application Programming Interface ou API) est une interface fournie par un programme informatique, et permet l'interaction des programmes les uns avec les autres (rutilisation dun programme par un autre).

Une API dfinit la manire dont un composant informatique peut tre invoqu par un autre. Il sagit dun ensemble de fonctions, procdures ou classes que lon peut utiliser et appeler. Une API est un package = ensemble de classes

J2SE

Les APIs de Java SE consistent en des technologies de base, des technologies de bureau (ou clientes), et dautres technologies. Les composantes de base fournissent des fonctionnalits essentielles pour criture des programmes puissants, telles que l'accs aux bases de donnes, la scurit, Remote Method Invocation (RMI), et les communications rseaux TCP/IP. Les composants du bureau ajoutent un ventail complet de fonctionnalits, telles que lAPI de modlisation des composants JavaBeans, et une interface utilisateur graphique tel que lAPI Swing. Dautres composants.

J2SE

http://www.oracle.com/technetwork/java/javase/tech/index.html

J2SE

J2SE contient les APIs suivantes :


java.lang : toutes les classes de base pour le langage (String, Thread) java.util : divers utilitaires (Date, Vector, Hashtable) java.math : si les fonctions mathmatiques sont dj implmentes dans le package java.lang, ce package permet les calculs sur des numriques de trs grande taille java.io : toutes les entres/sorties (console, fichiers, filtres, pipelines) java.awt : ddie la cration dinterfaces graphiques, au dessin de graphiques et dimages java.applet : le support des applets java.sql : laccs aux bases de donnes (JDBC : Java DataBase Connector) java.beans : La construction de composants JavaBeans java.rmi : linvocation de mthodes dobjets distants (RMI : Remote Method Invocation) au-dessus du protocole IIOP de CORBA java.net : le support du rseau TCP/IP (sockets, UDP) javax.swing : mme rle que l'API AWT javax.naming : API JNDI, fournit un accs aux services de nommage ou annuaires de faon uniforme: consultation et recherche. DNS, LDAP. (utilis gnralement avec les EJB, RMI, JMS) Javax.xml : API pour la manipulation des documents

Prsentation de J2EE

Java 2 Platform Enterprise Edition est sorti officiellement en 1998 en mme temps que les Enterprise JavaBeans.
Concrtement, J2EE est un ensemble de plus dune vingtaine de spcifications destines aux applications dentreprises, chacune faisant lobjet dune description dans un document. Raliser une application J2EE peut consister assembler ces spcifications. J2EE peut tre vu comme une extension du langage Java, afin de faciliter la cration dapplications rparties, robustes, performantes et haute disponibilit. J2EE est compos de plusieurs couches, et J2SE constitue la couche de base. Il est n de besoins grandissant des entreprises pour dvelopper des applications complexes distribues et ouvertes sur lInternet.

J2EE

J2EE est une plate forme compose de deux parties essentielles :


un

ensemble d'API qui peut tre obtenu et utilis sparment. ensemble de spcifications pour une infrastructure dans laquelle s'excutent les composants crits en Java : un tel environnement se nomme serveur d'application.

un

Prsentation de J2EE

APIs de J2EE : en plus des APIs de J2SE


API Rle composants Web composants Web

Servlets: javax.servlet Java Server Pages (JSP)

Entreprise Java Bean (EJB): javax.ejb


Java Messaging service (JMS): javax.jms

composants mtiers
accder divers services de messageries. permet d'envoyer et de recevoir des messages de manire asynchrone entre applications ou composants Java. JMS sappuie sur les MOMs (Message Oriented Middleware) Envoie et rception demails. support des protocoles pour le courrier lectronique (SMTP, POP3, IMAP) accder un service de transactions rpartis. JTS spcifie limplmentation dun gestionnaire de transaction qui supporte la spcification JTA

JavaMail: javax.mail

Java Transaction Service (JTS)

Java Transaction (JTA) : javax.transaction Fournit les interfaces entre le gestionnaire de transaction et les diffrentes parties impliques dans un systme de transactions distribues.

Technologies J2EE
Les API de J2EE peuvent tre regroupes en trois grandes catgories : Technologies composants Contient la partie la plus importante de l'application : la logique mtier 3 types de composants : les JSP, les Servlets et les EJB Technologies de services fournissent aux composants de l'application des services connexes leur permettant de sinterfacer et communiquer avec dautres systmes: JDBC, JTA/JTS, JNDI, JCA (intgration avec des systmes autres que J2EE: C++, COBOL), JAAS (scurit:
authentification)

Technologies de communication prvoient les mcanismes de communication entre les diffrentes parties de l'application, qu'elles soient locales ou distantes: RMI-IIOP, JMS, Java Mail

Technologies J2EE

Technologies composants Quelle que soit l'application, le but essentiel est de modliser la logique mtier ncessaire en utilisant les composant, units rutilisables au niveau applicatif Donc, mme si linfrastructure (serveur dapplication) est en mesure de fournir l'environnement d'excution, la couche de communication ainsi que de nombreux services, la cration des composants applicatifs incombe au dveloppeur Toutefois, ces composants dpendront de leurs serveurs dapplication pour de nombreux services, tels que la gestion du cycle de vie, le threading, la scurit... => Ceci permet de se consacrer uniquement aux mthodes mtier sans s'appesantir sur la smantique de bas niveau du conteneur

La plate-forme J2EE

Environnement d'excution de J2EE J2EE propose des spcifications pour une infrastructure dans laquelle s'excutent les composants.

J2EE prsente les spcifications l'aide dun ensemble dAPIs qui spcifient un certain nombre de fonctionnalits que doivent implmenter l'environnement d'excution: =>J2EE noffre pas une infrastructure prte lemploi: il donne juste une spcification, ensuite implante par les diteurs logiciels qui mettent au point les serveurs d'applications. J2EE fait abstraction de linfrastructure d'excution

La plate-forme J2EE
Infrastructure J2EE :

J2EE introduit la notion de conteneur, et via les API J2EE, il labore un contrat entre le conteneur et les applications

Pour excuter les composants de natures diffrentes, J2EE dfini des conteneurs pour chacun de ces composants. Il dfinit pour chaque composant des interfaces qui leur permettront de dialoguer avec les autres composants lors de leur excution. Les conteneurs permettent aux applications d'accder aux ressources et aux services en utilisant les API. Les appels aux composants se font par des clients via les conteneurs. Les clients n'accdent pas directement aux composants mais sollicitent le conteneur pour les utiliser. C'est le vendeur du conteneur qui se charge de mettre en uvre les services pour les dveloppeurs d'applications J2EE, dans le respect des standards (spcifications J2EE)

Architecture J2EE

Les conteneurs assurent la gestion du cycle de vie des composants qui s'excutent en eux. Un composant est un lment de base d'un ensemble plus complexe (structur ou composite), lequel est un assemblage de composants souvent diffrents. Un composant informatique est un lment d'un systme rendant un service prdfini et capable de communiquer avec d'autres composants. Cycle de vie dun composant: instanciation (cration), activation, destruction Les conteneurs fournissent des services qui peuvent tre utiliss par les applications lors de leur excution. La plate-forme J2EE est constitue de quatre environnements de programmation baptiss conteneurs (moteurs) :

le container Web le container EJB le container Application-Client le container Applet

Architecture J2EE - Conteneurs

Quelques services du conteneur Gestion de la dure de vie des composants applicatifs Cette gestion implique la cration de nouvelles instances de composants applicatifs ainsi que le pooling (rassemblement) et la destruction de ces composants lorsque les instances ne sont plus ncessaires

Clustering sur plusieurs machines Rpartition de charge ou "Load Balancing" Scurit ...

Le container Applet

Il permet lexcution des Applets Java.


Cet environnement est gnralement intgr au sein du navigateur Web.

Le container Web

Le conteneur web est une implmentation des spcifications servlets et des spcifications des JSP. Ce type de conteneur est compos de deux lments majeur : un moteur de servlets (servlets engine) et un moteur de JSP (JSP engine).
Il fournit un environnement pour le dveloppement, le dploiement et la gestion de lexcution des Servlets et des JSP: gestion des requtes HTTP et renvoi des rponses aux clients.

Architecture J2EE Conteneurs Web

API de services de conteneurs


Conteneur Web
Servlets Java Servlets Java Servlets Java Pages JSP Pages JSP Pages JSP RMI/IIOP JavaMail JDBC JNDI

JMS

JAF

JTA

Interface des services Implmentation des services

Le container EJB

Environnement pour le dveloppement, le dploiement et la gestion de lexcution des beans enterprise.


Un bean enterprise est un composant qui implmente un processus et une entit mtier de lEntreprise. Cest un modle de composant ct serveur.

Le container Application-Client (ACC)


Il fournit lenvironnement d excution des clients J2EE, comportant des interfaces bases sur AWT et Swing. Depuis la premire version de J2EE, il existe un conteneur web et un conteneur EJB. Le conteneur Application-Client a t cr dans le J2EE5 pour apporter les mmes services pour les applications standalone : scurit, service de nommage JNDI, Il sagit essentiellement de Java 2 Standard Edition (J2SE). Les application-client sont similaires aux applications autonomes Java2 SE; exception, les application-client dpendent du conteneur application-client pour fournir l'accs des ressources et des installations sur un serveur distant J2EE. D'un point de vue pratique, le conteneur application-client permet aux dveloppeurs de crer des applications Java robustes qui ont galement accs des ressources J2EE tels que les sources de donnes ou les EJB.

Le container Application-Client (ACC)


Le ACC utilise particulirement : JNDI : pour la recherche de ressources au niveau du serveur dapplications distant RMI : toutes les invocations des ressources distantes sont ralises avec RMI Quel est lapport du conteneur Application-Client ? Mcanisme dinjection 1- permet de dlguer lobtention des rfrences des objets distants au conteneur, et de les injecter dans des variables. JNDI est toujours sollicit mais de faon plus discrte. 2- existe partir de J2EE 1.5 : en J2EE 1.4 le client doit explicitement appeler les classes de lAPI JNDI pour obtenir les rfrences des objets distants.

Le container Application-Client (ACC)

Si une application Swing est excute en dehors dun conteneur ACC, elle ne peut pas utiliser le mcanisme dinjection et doit raliser les lookups JNDI elle-mme. Les composants sexcutant dans des conteneurs web ou EJB peuvent toujours utiliser le mcanisme dinjection. Grce au mcanisme dinjection, le dveloppeur na plus besoin de faire des appels explicites JNDI. Le conteneur ApplicationClient injecte une rfrence linterface distante invoque. Le code est ainsi allg parce quil ny a plus dinvocations directes des classes de lAPI JNDI.

Le container Application-Client (ACC)

En gnral, pour raliser des application-client, on suit les constructions de ralisation d'applications standards J2SE. Toutefois, les application-client exploitent galement les facilits J2EE offertes par le conteneur application-client (ACC) et qui ne sont pas disponibles dans le cas des applications standards J2SE.
Sans lACC:

Le container Application-Client (ACC)

Avec lACC:
Annotation @EJB private Catalog catalog (il faut avoir dclar le nom et chemin du Bean Catalog dans le fichier de configuration)

Annotation: permet de marquer ou annoter des lments afin de leur ajouter une proprit particulire. Ces annotations sont utilises lors de la compilation ou lexcution pour automatiser certaines tches (ex. appels de JNDI)

Le container Application-Client (ACC)

Exemple : un systme de gestion des commandes base d'EJB, avec une interface swing.

Interfaces Swing

RMI/IIOP

Composants EJB de gestion des commandes

Architecture J2EE

Architecture J2EE

Les serveurs d'applications peuvent fournir un conteneur web uniquement (exemple : Tomcat) ou un conteneur d'EJB uniquement (exemple : JBoss, Jonas, ...) ou les deux (exemple : Websphere, Weblogic, GlassFish ...).

Avantages de J2EE

Informatique distribue "traditionnelle" = souvent problmes lis non pas la logique propre l'application mais la mise en uvre de services complexes (threading, transactions, scurit) (pas de standards et dAPIs qui grent ces services) Pour les diteurs de serveurs: compatibilit entre les serveurs (mme spcifications) Pour les dveloppeurs : implmenter des produits compatibles J2EE nest pas un simple regroupement d APIs (Interfaces de programmation), il dfinit galement un environnement de programmation bas sur une architecture dexcution Offre de plusieurs services de scurit et de gestion Le programmeur n'a plus se soucier que de la rdaction de la logique mtier de son application : se concentrer sur le business au lieu de rsoudre les problmes dintgration augmenter ka productivit

Architecture en couches

Larchitecture logicielle dcrit dune manire schmatique les diffrents lments dun systme informatique, leurs interrelations et leurs interactions: image physique organise du systme. Une AL capture la structure "brute" dun systme :

Comment celui-ci est compos de parties en interaction Comment les interactions ont lieu

Contrairement aux spcifications produites par lanalyse fonctionnelle, le modle d'architecture, produit lors de la phase de conception, ne dcrit pas ce que doit raliser un systme informatique mais plutt comment il doit tre conu de manire rpondre aux spcifications. Lanalyse dcrit le quoi faire alors que larchitecture dcrit le comment le faire .

Architecture en couches

Un AL doit offrir au minimum les concepts de :


Composant : unit de calcul/stockage Connecteur : unit dinteraction Configuration : assemblage de composants et de connecteurs

Architecture en couches

Raliser des applications en utilisant les technologies J2EE ncessite de dcouper les applications en plusieurs couches: afin dorganiser et placer les composants
Larchitecture en couches : les composants de la couche suprieure utilisent ceux de la couche infrieure et ainsi de suite. Lapplication tend donc devenir une sorte d'empilement de composants. Larchitecture en couches est reprsente avec le diagramme de paquetages dUML. Les diagrammes de paquetages sont la reprsentation graphique des relations existant entre les paquetages composant un systme

Architecture deux-tiers

2-tiers = client/serveur La partie applicative est du ct client (client lourd)

Tiers Client Prsentation GUI

Tiers Serveur de donnes

PC Client Logique de prsentation,


Logique mtier

Rseau

Interactions et traitements de lentreprise

Serveur de bases de donnes

Limites de larchitecture deux-tiers


Administration difficile lorsque la logique mtier doit tre modifie. Transgression de la scurit en altrant un processus business. (modification des traitements sur le client) Application lie un seul type de prsentation Client lourd

Architecture trois niveaux

Sparation de la logique de prsentation et de la logique mtier.

Tiers Interface

Tiers Mtier

Tiers Donnes

Ordinateur Client Logique de Logique de prsentation, Prsentation

Rseau

Serveur intermdiaire Logique de business

Rseau

Serveur de bases de donnes

Architecture quatre niveaux

Introduction et dveloppement dapplications orientes Web: J2EE

Tiers Interface

Tiers Services Web

Tiers Mtier

Tiers Donnes

Ordinateur Client

Internet Serveur Web

Serveur Mtier Logique de business

Affichage

Application Web

Serveur de bases de donnes

Avantages de larchitecture trois niveaux


Meilleure rpartition de la charge Meilleure performance, scurit et gestion de l application. Modification et adaptation facile de la logique mtier : + volutif Possibilit de crer plusieurs types de client pour la mme application Client lger (tche unique daffichage; ressources du poste client peuvent tre sollicites pour dautres tches)

Modle J2EE pour les architectures deux niveaux


Tiers Client Poste Client Conteneur Application-Client Composants Prsentation Tiers Serveur de donnes

JDBC

Serveur de bases de donnes

Composants Mtiers

Dveloppement classique J2SE

Modle J2EE pour les architectures trois niveaux


Tiers Interface Tiers Mtier Tiers Donnes

Poste Client

Serveur Mtier

Conteneur Application-Client Logique de prsentation, Composants Prsentation

RMI
IIOP

Conteneur EJB JDBC Bean Enterprise

Serveur de bases de donnes

Modle J2EE pour les architectures quatre niveaux


Tiers Interface Tiers Services Web Serveur Web Conteneur Internet Web Tiers Mtier Tiers Donnes

Navigateur Conteneur Applet

Serveur Mtier Conteneur EJB Bean Enterprise

Applet/ HTML

Application Web/JSP

Serveur de bases de donnes

Modle J2EE pour les architectures en couches

Larchitecture J2EE nimpose pas que toutes les couches dune application fonctionnent sur des machines diffrentes : le partitionnement est logique et non pas physique.
Il est possible de pousser plus loin le processus de partitionnement de lapplication en multipliant le nombre de couches fonctionnelles de plus en plus fines : Architecture N-tiers. Toutefois, on atteint rapidement un point au-del duquel lintrt de cette division est contrebalanc par la diminution des performances entraine par la multiplication des communications sur le rseau entre les divers composants.

Les

servlets

Les servlets

HTML et HTTP sont utiliss pour permettre aux clients dinternet daccder facilement aux donnes et ressources : les servlets dfinissent une solution pour rpondre aux requtes HTTP.
Traditionnelement, pour permettre un utilisateur de modifier les donnes dune base de donnes, ce dernier remplit un formulaire, valide avec un bouton. Les donnes sont ensuites envoyes avec un URL qui dit au serveur ce quil doit faire en spcifiant la localisation dun programme (Perl, Python, C, C++, ..) que le serveur fait tourner. Le programme vrifie la validit des donnes du formulaire, procde aux traitements et produit une page HTML retourner au client.

Les servlets

La solution idale est celle qui utilise Java : Portabilit Accs toutes les APIs et bibliothques Java Solution 1 : Utilisation dune applet cot client pour valider et envoyer les donnes Utilisation dune servlet cot serveur pour recevoir et traiter les donnes Inconvnient : les applets posent le problme de version de Java supporte par les navigateurs. Quelques navigateurs ne supportent pas Java.
Solution 2 : Placer tout le traitement cot serveur : Utilisation de servlets : aucun client ne refusera lutilisation de votre site.

Les servlets

Larchitecture de lAPI des servlets consiste en : Un classic fournisseur de service avec la mthode service(), travers laquelle toutes les requtes clientes sont envoyes au serveur Les mthodes du cycle de vie des servlets : init() et destroy(), qui sont appeles uniquement quand la servlet est charge et dcharge (lors du dmarrage du serveur)
public interface Servlet { public void init(ServletConfig config) throws ServletException; public ServletConfig getServletConfig(); public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException; public String getServletInfo(); public void destroy(); }

Les servlets

Entre chaque requte du client les Servlets persistent sous forme dinstances dobjet Au moment o le code dune Servlet est charg, le serveur ne cre quune seule instance de classe Linstance (unique) traite chaque requte effectue sur la Servlet
Les avantages : Le surcot en temps li la cration dun nouvel objet pour la Servlet est limin La persistance est possible cest--dire la possibilit de conserver ltat de lobjet chaque requte (un exemple: le compteur)

Les servlets

getServletConfig( ) : son but est de retourner un objet ServletConfig qui contient les paramtres dinitialisation et de dmarrage de cette servlet. Cet objet est cr par la mthode init. getServletInfo( ) : retourne une chaine de caractres contenant des informations sur la servlet, comme lauteur, la version, et le copyright.
La classe GenericServlet est une implmentation de cette interface. La classe HttpServlet est une extension de GenericServlet et est dsigne spcialement pour le protocol HTTP. HttpServlet est la classe la plus utilise.

Les servlets

Si on regarde la mthode service( ) dans linterface Servlet , on remarque quelle a deux paramtres: ServletRequest et ServletResponse. Avec la classe HttpServlet ces deux objets sont tendus pour HTTP: HttpServletRequest et HttpServletResponse. Exemple dutilisation de HttpServletResponse:
out.print("<HEAD><TITLE>"); out.print("A server-side strategy"); out.print("</TITLE></HEAD><BODY>"); i++; public class ServletsRule extends HttpServlet { out.print("<h1> Servlets Rule a t appel " int i = 0; // Servlet persistence + i+ " fois"); public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, out.print("</h1></BODY>"); out.close(); IOException { }} res.setContentType("text/html"); PrintWriter out = res.getWriter(); import javax.servlet.http.*; import java.io.*;

Les servlets

Rsultat : un fichier html cr la vole


<HEAD> <TITLE> A server-side strategy </TITLE> </HEAD> <BODY> <h1>Servlets Rule a t appel 1 fois</h1> </BODY>

Les servlets

ServletsRule reprsente une servlet simple: les servlets doivent hriter de la classe HttpServlet. La servlet est initialise uniquement en appelant la mthode init( ) , en chargeant la servlet aprs le dmarrage du conteneur des servlets. Quand le client fait une requte un URL qui reprsente la servlet, le conteneur de servlet interprte cette requte et fait un appel la mthode service( ), aprs avoir initialis les objets HttpServletRequest et HttpServletResponse. La principale responsibilit de la mthode service( ) est dinteragir avec la requt HTTP que le client a envoy, et de construire une rponse HTTP base sur les attributs contenus dans la requte. ServletsRule manipule uniquement lobjet de rponse sans regarder ce que le client a pu envoy.

Les servlets
Aprs avoir spcifi le type du contenu (texte, image, fichier pdf,) de la rponse (qui doit tre toujours fait avant lappel de getWriter). La mthode getWriter( ) de lobjet de rponse (HttpServletResponse) produit un objet PrintWriter, qui est utilis pour crire une rponse forme par des caractres(alternativement, getOutputStream( ) produit un OutputStream, utilis pour les rponses binaires).
Le reste du programme envoie simplement du HTML au client comme une squence de Strings. Le compteur reprsent par la variable i est automatiquement converti en un String par la mthode print( ).

Les servlets

Quand le programme est tourn, on remarque que la valeur de i est prsrve entre les requtes de la servlet. Ceci est une proprit importante des servlets :
Tant que la servlet nest pas dcharge (le conteneur de servlet nest pas arrt, arrt de lordinateur serveur), nimporte quel champs de la classe servlet devient un objet persistant : Les valeurs peuvent tre maintenues entre les requtes, alors quavec les programmes (C,C++) on doit sauvegarder les valeurs sur le disque (plus de traitement et despace mmoire). Quand le serveur est reboot, les mthodes destroy() et init() sont automatiquement appeles permettant de sauvegarder les donnes pendant le redmarrage du serveur.

Les servlets

A chaque fois quune form est valide vers un servlet, le HttpServletRequest vient pr-charg avec toutes les donnes du form, stock comme des paires cl-valeur. Si vous connaissez les noms des champs, vous pouvez les utiliser directement avec la mthode getParameter( ) pour chercher les valeurs. Vous pouvez galement avoir une numration des noms des champs avec getParameterNames.

Exemple : Si lnumration est vide, il ny a pas de champs (aucun form na t envoy) le form est produit et le bouton de validation va r-appeler la mme servlet. Si les champs existent, ils sont affichs.

Les servlets

Exemple :

import javax.servlet.*; import javax.servlet.http.*; import java.io.*; import java.util.*; public class EchoForm extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); Enumeration flds = req.getParameterNames(); if(!flds.hasMoreElements()) { // Pas de form soumis crer un form: out.print("<html>"); out.print("<form method=\"POST\"" + " action=\"EchoForm\">"); for(int i = 0; i < 10; i++) out.print("<b>Field" + i + "</b> " +

"<input type=\"text\""+ " size=\"20\" name=\"Field" + i + "\" value=\"Value" + i + "\"><br>"); out.print("<INPUT TYPE=submit name=submit"+ " Value=\"Submit\"></form></html>"); } else { out.print("<h1>Votre form contenait:</h1>"); while(flds.hasMoreElements()) { String field= (String)flds.nextElement(); String value= req.getParameter(field); out.print(field + " = " + value+ "<br>"); } } out.close(); } }

Les servlets et le multi-threading

Une thread (appele aussi processus lger, ou activit, ou unit de traitement) est une suite d'instructions l'intrieur d'un processus. Un programme monothread est un programme cod en squentiel, c'est dire que les instructions sont excutes les unes aprs les autres. Il y a un seul thread pour le processus. Les programmes qui utilisent plusieurs threads en parallle sont dits multithreads: programmation multithreade ou concurrente. (avec un seul processeur, il ya simulation de lexcution parallle).

Les servlets et le multi-threading

Le conteneur des servlets possde un pool de threads quil gre fin de traiter les requtes des clients : il est fort probable que deux requtes de clients arrivent en mme temps, donc votre servlet (mthode service()) doit tre capable de les servir en mme temps la mthode service( ) doit tre crite de faon grer le multi-threading : tout accs commun aux ressources (fichiers, base de donnes) doit tre surveill en utilisant les mots-cls synchronized. Exemple : code de servlet

import javax.servlet.http.*; import java.io.*; public class ThreadServlet extends HttpServlet { int count; public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter();

count++; //(variable globale) out.println(cette servlet a t excute " + count + " fois."); out.close; }}

Les servlets et le multi-threading

Si deux clients envoient deux requtes en mme temps cette servlet, il yaura un thread pour chaque requte, et lordre dexcution peut tre :
count++ // count++ // out.println // out.println // Thread 1 Thread 2 Thread 1 Thread 2

lincrmentation aura lieu 2 fois de suite, le rsultat sera le mme pour les deux clients.

Les servlets et le multi-threading

Solution :
import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ThreadServlet extends HttpServlet { int i; public void service(HttpServletRequest req, HttpServletResponse res) throws IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); synchronized(this) { count++; //(variable globale) out.println(cette servlet a t excute + count + " fois."); } out.close(); }}

Excution atomique des deux instructions

Les HttpServlet sont conus pour rpondre aux requtes HTTP


Au lieu dutiliser la mthode service(), on peut utiliser les deux mthodes doGet() et doPost() :

doGet() : traite les requtes GET doPost() : traite les requtes POST

La signature des deux mthodes est :


doXXX(HttpServletRequest request, HttpServletResponse response)

Crez une nouvelle application Crez votre classe servlet Crez votre fichier HTML qui pointera sur la servlet Modifiez le fichier web.xml de votre application pour quil tienne en compte votre nouvelle servlet et la charge son dmarrage : <servlet> <servlet-name>MaServlet</servlet-name> <servlet-class>MaServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MaServlet</servlet-name> <url-pattern>/servlets/servlet/MaServlet</url-pattern> </servlet-mapping>
Redmarrez le serveur dapplication

Exemple : login 1- Crer le fichier login.java, le compiler Login.class 2- Crer le fichier login.html 3- Crer votre dossier dapplication

Ex/ login.html WEB-INF/ web.xml classes/ Login.class

4- Modifiez le fichier web.xml 5- Redmarrez Tomcat 6- Pour tester tapez : http://localhost:8080/Ex/login.html

Manipulation des sessions par les servlets

HTTP est un protocol sessionless (sans sessions) vous ne pouvez pas dire d'un serveur un autre si vous avez la mme personne qui interroge plusieurs reprises votre site, ou si cest une personne diffrente. Exemple : Les socits ne peuvent pas faire du e-commerce sans suivre la trace du client et des produits quil achte. Une session est une ou plusieurs requtes de pages par un client vers un site web durant une dure de temps dfinie. Exemple : achat en ligne (la session est active durant la priode dachat). Un objet de session vit du ct serveur ; son rle est de capturer les donnes utiles correspondantes au client qui interagit avec le site web. Il ya plusieurs manires de faire le suivi de sessions (session tracking), mais la plus commune est celle des cookies persistants (partie intgrale des standards dinternet.

Manipulation des sessions par les servlets

Un cookie est simplement une petite portion dinformation (fichier) envoye par un serveur web vers un navigateur. Le navigateur stocke le cookie sur le disque local du client, et chaque fois quun appel est fait vers lURL avec qui le cookie est associ, le cookie est galement envoy avec lappel, fournissant linformation dsire au serveur. Le cookies concernant le site dans lequel un utilisateur navigue, et sont automatiquement envoys dans les en-ttes HTTP lors de chaque requte du client. Cest le serveur qui doit crer et envoyer les cookies au navigateur du client Les clients peuvent dsactiver loption dacceptation des cookies du navigateur. Si votre site doit suivre un client qui a dsactiv les cookies, vous devez ajouter du code manuel votre servlet.

Manipulation des sessions par les servlets

La class Cookie :

LAPI des servlets fournit la classe Cookie (javax.servlet.http.Cookie.class). Cette classe contient tous les dtails des enttes HTTP et permet la mise en place de diffrents attributs des coukies. Utiliser un cookie correspond son ajout lobjet response.

Le constructeur du cookie prend deux arguments : le nom du cookie et sa valeur. Le nom ne peut pas tre chang aprs la cration du cookie. La valeur peut tre change avec setValue(). Les cookies sont ajouts lobjet response avant denvoyer tout contenu: Cookie c1 = new Cookie(id", 18"); //on stocke lidentifiant de la session c1.setValue(20); //on modifie la valeur du cookie c1.setMaxAge(24*3600); res.addCookie(c1);

Manipulation des sessions par les servlets

Les cookies sont rcuprs en appelant la mthode getCookies( ) de lobjet HttpServletRequest, qui retourne un tableau des objets cookie. Cookie[] cookies = req.getCookies(); Cette mthode retourne un tableau contenant l'ensemble des cookies prsents chez le client. Il est ainsi possible de parcourir le tableau afin de retrouver un cookie spcifique grce la mthode getName() de l'objet Cookie(). Vous pouvez ensuite appeler la mthode getValue( ) pour chaque cookie, pour produire un String contenant la valeur du cookie.

You might also like