Architecture J2EE Etude du Web-tier



Documents pareils
Web Tier : déploiement de servlets

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

Module BD et sites WEB

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.

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

JavaServer Pages (JSP)

Mise en œuvre des serveurs d application

Compte Rendu d intégration d application

Java pour le Web. Cours Java - F. Michel

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

24/11/2011. Cours EJB/J2EE Copyright Michel Buffa. Plan du cours. EJB : les fondamentaux. Enterprise Java Bean. Enterprise Java Bean.

Le développement d applications Web

10. Base de données et Web. OlivierCuré

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

Application web de gestion de comptes en banques

Introduction à la plateforme J2EE

Architecture JEE. Objectifs attendus. Serveurs d applications JEE. Architectures JEE Normes JEE. Systèmes distribués

Environnements de Développement

Application Web et J2EE

Les architectures 3-tiers Partie I : les applications WEB

Sage CRM. 7.2 Guide de Portail Client

Projet de Veille Technologique

Architectures web/bases de données

Java Naming and Directory Interface

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Messagerie asynchrone et Services Web

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

Remote Method Invocation (RMI)

Architecture N-Tier. Ces données peuvent être saisies interactivement via l interface ou lues depuis un disque. Application

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Architecture Orientée Service, JSON et API REST

Programmation par composants (1/3) Programmation par composants (2/3)

Création de formulaires interactifs

2 Chapitre 1 Introduction

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)

TP JAVASCRIPT OMI4 TP5 SRC

Vulgarisation Java EE Java EE, c est quoi?

Nouvelles Plateformes Technologiques

WebSSO, synchronisation et contrôle des accès via LDAP

Cours CCNA 1. Exercices

Livre Blanc WebSphere Transcoding Publisher

Auto-évaluation Aperçu de l architecture Java EE

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

Types d applications pour la persistance. Outils de développement. Base de données préexistante? 3 modèles. Variantes avec passerelles

Manuel d'installation

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

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

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Traitement des données de formulaires. Accès aux BD avec JDBC Servlets - M. Baron - Page

RENDRE VOS APPLICATIONS JAVA PLUS EFFICACES Ce qu'il faut savoir

Initiation à JAVA et à la programmation objet.

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Refonte front-office / back-office - Architecture & Conception -

et Groupe Eyrolles, 2006, ISBN :

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

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

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

J2EE - Introduction. Développement web - Java. Plan du chapitre

Hébergement de sites Web

PHP 5.4 Développez un site web dynamique et interactif

Outil de planification en ligne pour des créations de rendez-vous ou de sondage

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

TP1 : Initiation à Java et Eclipse

Programmation Web. Introduction

SITE WEB E-COMMERCE ET VENTE A DISTANCE

JOnAS 5. Serveur d application d

Bases Java - Eclipse / Netbeans

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Hébergement de site web Damien Nouvel

Jacques Lonchamp. Conception. d applications en Java/JEE. Principes, patterns et architectures

Composants Logiciels. Le modèle de composant de CORBA. Plan

Préparer la synchronisation d'annuaires

RMI le langage Java XII-1 JMF

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

L3 informatique TP n o 2 : Les applications réseau

MOTEUR DE WORKFLOW Mise en oeuvre d'openwfe Version septembre 2006

Apache Tomcat 6. Guide d'administration du serveur Java EE sous Windows et Linux. Résumé. Étienne LANGLET

Architecture d'entreprise : Guide Pratique de l'architecture Logique

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

Plan. Department of Informatics

Application de lecture de carte SESAM-Vitale Jeebop

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

contact@nqicorp.com - Web :

Authentification et contrôle d'accès dans les applications web

Projet gestion d'objets dupliqués

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

Documentation CAS à destination des éditeurs

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

Le service FTP. M.BOUABID, Page 1 sur 5

Authentification avec CAS sous PRONOTE.net Version du lundi 19 septembre 2011

Formation en Logiciels Libres. Fiche d inscription

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

TAGREROUT Seyf Allah TMRIM

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

JOnAS Day 5.1. Outils de développements

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Introduction aux «Services Web»

JOnAS Day 5.1. Clustering

Transcription:

Architecture J2EE Etude du Web-tier Composants Web Servlets / JSP et JavaBeans Patrick Itey (Patrick.Itey@sophia.inria.fr) - INRIA

PLAN - Rappels Rappels sur les architectures distribuées: les serveurs d'application la programmation par composants composant / conteneur / structure accueil Rappels sur l'architecture J2EE : Principes Les composants utilisés Topologies d'une application J2EE Technologies utilisées 07/11/2002 P. Itey - INRIA 2 Rappels : Architectures distribuées Ce sont des applications dont les fonctions sont réparties entre plusieurs systèmes. On les appelle aussi architectures multi-tiers. Dans une architecture distribuée type, les fonctions sont réparties entre un système client (station de travail, terminal, ) et un système serveur (serveur PC, Unix, mainframe ). 07/11/2002 P. Itey - INRIA 3

Rappels : architectures distribuées Chaque système contient une partie de l application, les parties manquantes sont exécutées sur les autres systèmes participants à l application et les informations sont échangées par le réseau 07/11/2002 P. Itey - INRIA 4 Rappels : architectures distribuées 3 catégories : 1- fonctions de présentation interface utilisateur 2- fonctions applicatives / orientées métier : validation des données modélisation des processus métiers (prise de commande, ) 3- fonctions de stockage 07/11/2002 P. Itey - INRIA 5

Rappels : fonction de présentation sur la couche présentation, une application cliente est chargée de l affichage et de la saisie des données : browsers web (http/html), applets (RMI), contrôles ActiveX (DCOM), clients CORBA (IIOP) 07/11/2002 P. Itey - INRIA 6 Rappels : fonction applicative sur la couche application, un serveur d application maintient des composants métiers utilisés pour modéliser sous forme d objet les processus de l application (ex: factures, caddies, ) : présentation, outils métiers, CGI, servlets 07/11/2002 P. Itey - INRIA 7

Rappels : fonction de stockage sur la couche données, les serveurs du système d information d entreprise stockent les composants métiers : bases de données relationnelles ou objets, intégrés (ERP), legacy (mainframe), annuaires d entreprise, 07/11/2002 P. Itey - INRIA 8 Motivation pour les serveurs d'application Simplifier le développement Plus grande séparation entre les 3 couches Le développeur peut se concentrer sur la logique de son application; le reste est pris en charge par la structure d'accueil : sessions, persistance, transactions, sécurité, nommage, charge 07/11/2002 P. Itey - INRIA 9

Motivation pour les serveurs d'application (suite) Gain en productivité : Fournir des services standards pour : le développement d'application multi-tiers le support de plusieurs types de client Mise sur le marché des applications distribuées plus rapidement 07/11/2002 P. Itey - INRIA 10 Motivation pour les serveurs d'application (suite) Intégration avec l existant : mettre à la disposition des développeurs des moyens standards d'accès aux données des systèmes déjà existants dans l entreprise. 07/11/2002 P. Itey - INRIA 11

Motivation pour les serveurs d'application (suite) Maintenance et sécurité : mettre en place des mécanismes standards pour gérer la sécurité sur tous les systèmes d une application distribuée mais peu de possibilités pour mettre en place la sécurité au niveau du client, sauf dans le cas de clients Java. 07/11/2002 P. Itey - INRIA 12 Motivation pour les serveurs d'application (suite) Liberté de choix : grande diversité de serveurs J2EE commerciaux ou libres mécanismes et technologies standards pour la création d'application : cela permet d'utiliser des produits d'éditeurs différents environnements de développement et serveurs J2EE issus de plusieurs éditeurs. utilisation de ses propres composants pour les fonctions spécifiques de l'application et de crées par des éditeurs de logiciels pour les fonctions de base. 07/11/2002 P. Itey - INRIA 13

Motivation pour les serveurs d'application (suite) Réponse adaptée à la demande : les applications supportent la montée en charge sans avoir à être recodées (dans les specs ;-) ) mécanismes simples pour répartir la charge entre plusieurs serveurs, sur les différentes couches de l'application 07/11/2002 P. Itey - INRIA 14 Programmation par composants Les limites de la programmation traditionnelle plus adaptée à la programmation de petits projets (programming in the small) tout est à la charge du programmeur : la liaison entre les différentes couches de l application (présentation, application, données), construction de objets utilisées sur les couches, la définition des fonctions 07/11/2002 P. Itey - INRIA 15

Programmation par composants la structure de l application est peu visible et particulière à chaque application (fichiers ) l évolution de l application est difficile : ajout de fonctionnalités, modification des conditions d installation le développement, la génération des exécutables et leur déploiement ne sont pas standardisés 07/11/2002 P. Itey - INRIA 16 Programmation par composants Programmation par composition (ou constructive) : motivée par la réutilisation des logiciels déjà existants et propose de créer des applications réparties par assemblage de composants logiciels existants. concept du programming in the large où l on définit des composants génériques qui sont ensuite réutilisables dans plusieurs applications. 07/11/2002 P. Itey - INRIA 17

Programmation par composants Dans cette approche on décrit l architecture de l application à l aide d un langage déclaratif qui permet de préciser : le modèle de construction des composants: interfaces attributs implémentation la description des interactions entre composants (connecteurs) la description de variables d environnement (placement, sécurité ) 07/11/2002 P. Itey - INRIA 18 Architecture à base de composants 07/11/2002 P. Itey - INRIA 19

Composants Un composant est un module logiciel autonome, configurable et installable sur plusieurs plates-formes Un composant : exporte des attributs, propriétés et méthodes, peut être configurable, est capable de s auto-décrire (introspection) 07/11/2002 P. Itey - INRIA 20 Composants Les composants sont les briques de bases configurables d une application par composition. Parmi les différentes technologies de composants, on peut citer : COM/DCOM, JavaBeans, Enterprise Java Beans, composants CORBA 07/11/2002 P. Itey - INRIA 21

Conteneur Un conteneur encapsule les composants et prend en charge les services liés au système : nommage, sécurité, transaction, persistance,. 07/11/2002 P. Itey - INRIA 22 Structures d'accueil Espaces d exécution des conteneurs et des composants Servent de médiateur entre les conteneurs et les services systèmes (sandbox). Peuvent prendre en charge le téléchargement de code additionnel (navigateur Web ). La Java Virtual Machine est la structure d accueil d une application J2EE. 07/11/2002 P. Itey - INRIA 23

PLAN - Rappels Rappels sur les architectures distribuées: les serveurs d'application la programmation par composants composant / conteneur / structure accueil Rappels sur l'architecture J2EE : Principes Les composants utilisés Topologies d'une application J2EE Technologies utilisées 07/11/2002 P. Itey - INRIA 24 Principes de J2EE L architecture J2EE est une architecture d application distribuée à base de composants Elle identifie et donne les spécifications des composants de l application : composants logiciels ou beans (EJB), conteneur serveurs clients 07/11/2002 P. Itey - INRIA 25

Principes de J2EE (suite) 07/11/2002 P. Itey - INRIA 26 Principes de J2EE (suite) Les conteneurs isolent les beans du client et d une implémentation spécifique du serveur. Les beans sont installés dans la partie serveur d une application J2EE. 07/11/2002 P. Itey - INRIA 27

Principes de J2EE (suite) Les conteneurs et serveurs implémentent les mécanismes de bas niveau utilisés par les applications : transactions, persistance, gestion de la mémoire, sécurité 07/11/2002 P. Itey - INRIA 28 Principes de J2EE (suite) Les spécifications J2EE s intéressent aux activités d une application liées : au développement, au déploiement, à l exécution 07/11/2002 P. Itey - INRIA 29

Composant J2EE C'est une unité logicielle de niveau applicatif. En plus des JavaBeans, qui font partie du J2SE, J2EE supporte les types de composants suivants : applets & application clientes, composants Enterprise JavaBeans (EJB), composants Web, 07/11/2002 P. Itey - INRIA 30 Composant J2EE (suite) Les applets et applications clientes sont exécutées sur le poste du client Les composants EJB, Web fonctionnent sur le serveur Les concepteurs et développeurs d'applications développent les composants d'une application J2EE. 07/11/2002 P. Itey - INRIA 31

Conteneur de composants J2EE Tous les composants J2EE dépendent à l'exécution d'une entité système baptisée conteneur (container). Les conteneurs fournissent aux composants des services de bases comme : la gestion du cycle de vie, la sécurité, le déploiement et l'exécution en thread. 07/11/2002 P. Itey - INRIA 32 Conteneur de composants J2EE Comme c'est le conteneur qui gère ces services, la plupart des paramètres de configuration de ces services peuvent être configurés lors du déploiement des composants en fonction de la plate-forme d'accueil : Par exemple un fournisseur d'enterprise Java Bean peut spécifier un nom de base de données auquel le composant doit accéder et c'est seulement lors du déploiement que les informations d'accès à la base (nom d'utilisateur et mot de passe ) seront configurées. 07/11/2002 P. Itey - INRIA 33

Composants clients J2EE La plate-forme J2EE prévoit plusieurs types de clients pour accéder à une même application et interagir avec les composants côté serveur : les Applets, les applications autonomes 07/11/2002 P. Itey - INRIA 34 Rappel : les applets Ce sont des clients Java qui s'exécutent dans un navigateur Web et qui ont accès à toutes les possibilités du langage Java. Les applications J2EE les utilisent pour avoir des interfaces utilisateurs plus puissantes que celles connues en HTML. Les applets communiquent avec le serveur par HTTP. 07/11/2002 P. Itey - INRIA 35

Rappel : applications autonomes S'exécutent dans leur propre conteneur client. Le conteneur client est un jeu de librairies et d'api qui supportent le code client, et mettent à sa disposition un moyen d'accéder aux composants métiers de l'application. Les applications clientes ont des interfaces utilisateurs qui peuvent directement interagir avec le tier EJB en utilisant RMI-IIOP. 07/11/2002 P. Itey - INRIA 36 Rappel : applications autonomes Les clients ont un accès complet aux services de la plate-forme J2EE comme : les services de nommage JNDI, l'envoi de messages et JDBC. Le conteneur client gère l'accès à ces services et les communications RMI-IIOP. 07/11/2002 P. Itey - INRIA 37

Appli clientes Java Web Start Ce sont des applications autonomes reposant sur les JFC et Swing et capables d'utiliser les services de la plate-forme J2EE par l'intermédiaire de la technologie Java WebStart. Elles peuvent être installées par le web, Elles communiquent avec le serveur en utilisant du XML encapsulé dans du HTTP(S). 07/11/2002 P. Itey - INRIA 38 Clients sans fil Les clients sans fil sont basés sur la technologie Mobile Information Device Profile (MIDP), en conjonction avec Connected Limited Device Configuration (CLDC) qui fournissent un environnement J2ME complet pour les dispositifs sans fil. 07/11/2002 P. Itey - INRIA 39

Les composants Web Un composant Web est une entité logicielle qui fournit une réponse à une requête. Les composants Web génèrent habituellement l'interface utilisateur d'une application Web. La plate-forme J2EE définit 2 types de composants Web : les servlets et les JavaServer Pages (JSP). 07/11/2002 P. Itey - INRIA 40 Les Servlets Une servlet est un composant qui étend les fonctionnalités d'un serveur Web de manière portable et efficace. Un serveur Web héberge des classes Java servlets qui sont exécutées à l'intérieur du container Web. Le serveur Web associe une ou plusieurs URLs à chaque servlet et lorsque ces URLs sont appelées via une requête HTTP de l'utilisateur, la servlet est déclenchée. 07/11/2002 P. Itey - INRIA 41

Les Servlets (suite) Quand la servlet reçoit une requête du client, elle génère une réponse, éventuellement en utilisant la logique métier contenue dans des EJBs ou en interrogeant directement une base de données. Elle retourne alors une réponse HTML ou XML au demandeur. 07/11/2002 P. Itey - INRIA 42 Les JSP (Java Server Pages) La technologie Java Server Pages (JSP) fournit un moyen simple et extensible pour générer du contenu dynamique pour le client Web. Une page JSP est un document texte qui décrit comment traiter la requête d'un client et comment créer une réponse. 07/11/2002 P. Itey - INRIA 43

Les JSP (suite) Une page JSP contient : Des informations de formatage (modèle) du document Web, habituellement en HTML ou XML. Les concepteurs Web peuvent modifier cette partie de la page sans affecter les parties dynamiques. Cette approche permet de séparer la présentation du contenu dynamique. 07/11/2002 P. Itey - INRIA 44 Les JSP (suite) Une page JSP contient (suite) : Des éléments JSP et de script pour générer le contenu dynamique du document Web. La plupart des pages JSP utilisent aussi des JavaBeans et/ou des Enterprise JavaBeans pour réaliser les opérations complexes de l'application. Les JSP permettent en standard d'instancier des beans, de modifier ou lire leurs attributs et de télécharger des applets. 07/11/2002 P. Itey - INRIA 45

Les JSP (suite) La technologie JSP est extensible en utilisant des balises personnalisées qui peuvent être encapsulées dans des bibliothèques de balises personnalisées (taglibs) 07/11/2002 P. Itey - INRIA 46 Conteneurs de composants Web Les composants Web sont hébergés dans des conteneurs de servlets, conteneurs de JSP et conteneurs Web. En sus des fonctionnalités normales d'un conteneur de composants, un conteneur de servlets (servlets container) fournit les services réseaux par lesquels les requêtes et réponses sont émises. Il décode également les requêtes et formate les réponses dans le format approprié. 07/11/2002 P. Itey - INRIA 47

Conteneurs de composants Web Tous les conteneurs de servlets doivent supporter le protocole HTTP et peuvent aussi supporter le protocole HTTPS. Un conteneur de JSP (JSP container) fournit les mêmes services qu'un conteneur de servlets. Ces conteneurs sont généralement appelés conteneurs Web (Web containers). 07/11/2002 P. Itey - INRIA 48 Topologies d'une application J2EE 07/11/2002 P. Itey - INRIA 49

Application multitiers 07/11/2002 P. Itey - INRIA 50 Client autonome 07/11/2002 P. Itey - INRIA 51

Client autonome "EJB-centric" 07/11/2002 P. Itey - INRIA 52 Application Web 07/11/2002 P. Itey - INRIA 53

Détails de l'application Web 07/11/2002 P. Itey - INRIA 54 Application Business-to-business 07/11/2002 P. Itey - INRIA 55

Technologies J2EE La plate-forme J2EE, comme la plate-forme J2SE, inclue un grand nombre de bibliothèques de code (API) prédéfinies pour les fonctions de base d'une application. 07/11/2002 P. Itey - INRIA 56 Technologies J2EE (suite) 07/11/2002 P. Itey - INRIA 57

Technologies J2EE (suite) Les technologies mises en œuvre : L'architecture J2EE Connector est l'infrastructure pour interagir avec une grande variété de systèmes d'information d'entreprise tels que des ERPs, des CRM, et autres progiciels. L'API JDBC est utilisée pour accéder à des données relationnelles à partir de programmes Java 07/11/2002 P. Itey - INRIA 58 Technologies J2EE (suite) Les technologies mises en œuvre (suite) : La Java Transaction API (JTA) est utilisée pour gérer et coordonner les transactions entre un ensemble hétérogène de systèmes d'information d'entreprise. L'API Java Naming and Directory Interface (JNDI) est utilisée pour accéder aux services de nommage et d'annuaire de l'entreprise. 07/11/2002 P. Itey - INRIA 59

Technologies J2EE (suite) Les technologies mises en œuvre (suite) : L'API Java Message Service (JMS) est utilisée pour émettre et recevoir des messages via les systèmes de messagerie d'entreprise comme IBM MQ Series ou TIBCO Rendezvous. Dans l'architecture J2EE, les Message Driven Beans fournissent une approche à base de composant pour encapsuler les fonctionnalités de messagerie. 07/11/2002 P. Itey - INRIA 60 Technologies J2EE (suite) Les technologies mises en œuvre (suite) : La JavaMail API est utilisée pour émettre et recevoir des mails. Java IDL est utilisée pour appeler des services CORBA L'API Java pour XML (JAXP) est utilisée pour l'intégration avec les systèmes et applications existants et pour implémenter les Web services dans la plate-forme J2EE. 07/11/2002 P. Itey - INRIA 61

JNDI Java Naming and Directory Interface La technologie JNDI est utilisée dans J2EE pour localiser les objets sur un serveur et accéder aux objets externes à partir des composants J2EE. Chaque conteneur stocke une référence aux objets qu il peut créer et instancie ces objets à la demande des clients ou des applications qui fonctionnent sur le serveur. 07/11/2002 P. Itey - INRIA 62 JNDI (suite) Le conteneur met aussi à la disposition des composants un jeu de ressources JNDI initial, issu de la configuration du serveur et/ou des applications Web (via les descripteurs de déploiement). Un objet InitialContext est crée par le conteneur lorsqu'une Web application est déployée. 07/11/2002 P. Itey - INRIA 63

JNDI (suite) Cet objet est accessible par les composants, en lecture seulement. L'API JNDI est définie dans le package javax.naming. L'autre rôle de JNDI dans une application J2EE est la localisation des interfaces distantes des beans. 07/11/2002 P. Itey - INRIA 64 Exemple d'utilisation de JNDI // Dans Tomcat, les ressources JDNI initiales sont // accessibles dans l'espace de nommage // java:comp/env. // Exemple d'accès à une ressource JDBC par JNDI : // Obtain our environment naming context Context initctx = new InitialContext(); Context envctx = (Context) initctx.lookup("java:comp/env"); // Look up our data source DataSource ds = (DataSource)envCtx.lookup("jdbc/EmployeeDB"); // Allocate and use a connection from the pool Connection conn = ds.getconnection(); //...use this connection to access the database conn.close(); 07/11/2002 P. Itey - INRIA 65

Le Web-Tier dans J2EE Le serveur Web d une application J2EE (Web tiers) rend disponible la logique d'une application sur le Web. C est le serveur Web qui gère la communication avec les clients Web et qui répond à leurs requêtes. 07/11/2002 P. Itey - INRIA 66 Topologie(s) du Web-Tier 07/11/2002 P. Itey - INRIA 67

Topologie(s) du Web-Tier (2) 07/11/2002 P. Itey - INRIA 68 Topologie(s) du Web-Tier (3) 07/11/2002 P. Itey - INRIA 69

Rôles du serveur Web Un serveur Web traite des requêtes HTTP. Dans le cadre d une application J2EE, le serveur Web (Web tiers) gère les relations entre les clients Web et l application. Le serveur Web produit typiquement du contenu HTML ou XML, bien qu il puisse générer d autres types de contenu. 07/11/2002 P. Itey - INRIA 70 Rôles du serveur Web (suite) L architecture J2EE préconise d implémenter la logique métier dans le serveur d EJB mais il est possible d implémenter la logique métier directement sur le serveur Web. 07/11/2002 P. Itey - INRIA 71

Fonctions du serveur Web mise à disposition de la logique métier sur le Web: le serveur gère les relations entre les clients Web et la logique métier de l application création dynamique de contenu: le serveur Web génère dynamiquement du contenu, dans n importe quel type de format: HTML, images, sons, video, 07/11/2002 P. Itey - INRIA 72 Fonctions du serveur Web (suite) présentation et collecte des données: le serveur Web transforme les requêtes HTTP PUT et GET dans une forme compréhensible par la couche métier de l application et présente les résultats contrôle du flux de navigation: la logique implantée dans le serveur Web détermine quel écran de l application envoyer au client. En effet c est souvent le serveur Web qui adapte la présentation et l enchaînement des écrans en fonction des capacités du client 07/11/2002 P. Itey - INRIA 73

Fonctions du serveur Web (suite) maintien des informations d état : le serveur Web dispose d un mécanisme simple et flexible pour conserver des informations durant toute la durée d une session utilisateur support de plusieurs clients : par le biais des types MIME, un serveur Web peut envoyer de l information vers n importe quel type de client et étendre les capacités de publication implémentation de la logique métier 07/11/2002 P. Itey - INRIA 74 Technologies utilisées sur le Web Technologies traditionnelles La génération de contenu dynamique sur le Web a d abord utilisé la technologie Common Gateway Interface (CGI). Cette technologie permet de déclencher des programmes lors de requêtes HTTP, le résultat du programme étant alors renvoyé comme réponse. 07/11/2002 P. Itey - INRIA 75

Technologies "traditionnelles" L inconvénient de cette technologie est qu à chaque appel du CGI, le programme externe doit être rechargé, ce qui représente une perte de temps non-négligeable. Les limitations des CGI ont ensuite été palliées en utilisant des extensions propres à chaque serveur Web. 07/11/2002 P. Itey - INRIA 76 Technologies "traditionnelles" On parle de NSAPI (pour les serveurs Netscape), de modules d extension (pour le serveur Apache), et d ISAPI (pour Microsoft Internet Information Server). L inconvénient de ces techniques étant qu elles sont spécifiques à chaque serveur et donc non-portables. 07/11/2002 P. Itey - INRIA 77

Technologies Web pour J2EE Les technologies Web utilisées sur un serveur J2EE présentent l avantage d être des solutions portables, sécurisées et standardisées. Une application Web est un assemblage de composants de serveurs Web, de contenu et d informations de configuration. 07/11/2002 P. Itey - INRIA 78 Techno Web pour J2EE (suite) L environnement d exécution d une application Web est appelé de conteneur Web (Web container). Tous les fichiers d une application Web sont contenus dans un fichier Web Application Archive (WAR) qui contient également un fichier de description de déploiement rédigé en XML. 07/11/2002 P. Itey - INRIA 79

Techno Web pour J2EE (suite) Les spécifications de la plate-forme J2EE définissent un contrat en le conteneur Web et les composants Web, qui définit le cycle de vie des composants, les comportements que le composant implémente et les services que le serveur rend aux composants. Les spécifications J2EE définissent 2 types de composants Web : les Servlets Java ( servlets ) et les Java Server Pages (pages JSP) 07/11/2002 P. Itey - INRIA 80 PLAN - Les composants Web Les Servlets Cycle de vie d'une servlet Traitement des données de formulaires Gestion de l'état avec cookies et sessions Introduction aux JSP Intégrer JSP, Servlets et JavaBeans Les JSP en XML Les balises JSP personnalisées Règles de conception 07/11/2002 P. Itey - INRIA 81

Les Travaux dirigés http://www-sop.inria.fr/semir/personnel/patrick.itey/cours/j2ee/ TP0 : Une simple servlet Installation du server J2EE, utilisation du serveur de déploiement J2E Ecriture / compilation / déploiement / exécution d'une servlet TP1 : Une page JSP Ecriture / déploiement / exécution d'une page JSP pour remplace la servlet TP2 : Intégrer Servlet / JSP et JavaBean dans une architecture MVC de J2EE TP3 : Utiliser des taglibs XML dans une JSP 07/11/2002 P. Itey - INRIA 82 Servlet : qu'est ce que c'est? Avec JSP, c'est un des composants logiciels Web de l'architecture J2EE C'est une classe Java compilée (.class) qui s'exécute dans un conteneur de Servlets (moteur), hébergé par le serveur Web (côté serveur) Permet d'étendre les fonctionnalités du serveur Web de manière portable et efficace 07/11/2002 P. Itey - INRIA 83

Servlet : qu'est ce que c'est? Ecrit en Java : technologie indépendante de la plate-forme et du serveur S'apparente aux technologies traditionnelles CGI (PERL) mais : plus efficaces plus pratiques plus puissantes portables et gratuites 07/11/2002 P. Itey - INRIA 84 Servlet : à quoi ça sert? Créer des pages dynamiques (HTML/XML) à "la volée" Effectuer des tâches de type CGI (traitements applicatifs) côté serveur Ecrire une application en Java dont l'interface utilisateur (en HTML) se situe dans le Browser, côté client 07/11/2002 P. Itey - INRIA 85

Servlet : comment ça marche? Le serveur Web associe une ou plusieurs URLs à chaque servlet Lorsque ces URLs sont appelées via une requête HTTP de l'utilisateur, côté client, le conteneur de servlet (moteur) déclenche la servlet qui s'exécute côté serveur La servlet génère une réponse HTML/XML vers le client en utilisant la logique métier d'ejb ou en interrogeant directement la BD (via API JDBC) 07/11/2002 P. Itey - INRIA 86 Architecture WEB : principe Client Serveur WEB Serveur EJB Servlet JSP Conteneur web Conteneur EJB Navigateur Web Tier Web Tier EJB 07/11/2002 P. Itey - INRIA 87

Architecture Servlets Serveur WEB Client Navigateur Web Requête (http) Réponse XML H T T P JVM Servlet maservlet.class Conteneur Tier Web web http://host/servlets/maservlet 07/11/2002 P. Itey - INRIA 88 API Servlet Les classes et les interfaces pour les Servlets sont définies dans 2 packages : javax.servlet package générique indépendant des protocoles javax.servlet.http spécifique à HTTP permet la gestion des sessions Où les trouver : JSWDK java.sun.com/products/servlets 07/11/2002 P. Itey - INRIA 89

Les classes de l'api 2 classes abstraites : javax.servlet.genericservlet javax.servlet.http.httpservlet qui implémentent 2 interfaces abstraites : javax.servlet.servlet javax.servlet.servletconfig 07/11/2002 P. Itey - INRIA 90 Les classes de l'api abstract interface Servlet abstract interface ServletConfig void service() abstract class GenericServlet abstract void service() abstract class HttpServlet void service() void doxxx() 07/11/2002 P. Itey - INRIA 91

La classe GenericServlet javax.servlet.genericservlet définit une servlet indépendante des protocoles une classe abstraite qui fournit une implémentation de base de l'interface Servlet La méthode service() est le principal point d'entrée c'est une méthode abstraite qui doit être implémentée par une classe dérivée 07/11/2002 P. Itey - INRIA 92 Structure de base d'une servlet import javax.servlet.*; public class first extends GenericServlet { public void init(servletconfig config) throws ServletException { } public void service( ServletRequest req, ServletResponse rep) throws ServletException, IOException { } } public void destroy() { } 07/11/2002 P. Itey - INRIA 93

Communiquer avec le client 2 arguments pour service() : javax.servlet.servletrequest encapsule la requête du client contient le flot d'entrée dans lequel lire les données en provenance du client javax.servlet.servletresponse contient le flot de sortie pour répondre au client 07/11/2002 P. Itey - INRIA 94 Développer des HttpServlet javax.servlet.http.httpservlet dérive de GenericServlet et fournit une implémentation spécifique à HTTP de l'interface Servlet 07/11/2002 P. Itey - INRIA 95

La méthode service() de HttpServlet HttpServlet surcharge la méthode service() lit la méthode HTTP à partir de la requête transmet la requête à une méthode appropriée, destinée à la traiter Chaque méthode a une méthode "handler" associée, définie dans une méthode HttpServlet:doXXX() 07/11/2002 P. Itey - INRIA 96 Méthodes de HttpServlet Une servlet est une sous-classe de HttpServlet dans laquelle on surcharge la ou les méthodes doxxx() appropriées : requête GET, HEAD : doget() requête POST : dopost() public void doxxx(httpservletrequest req, HttpServletResponse rep) 07/11/2002 P. Itey - INRIA 97

Squelette d une servlet Http import javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet { public void init(servletconfig c) throws ServletException { } public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { } public void destroy() { } } public String getservletinfo() { } 07/11/2002 P. Itey - INRIA 98 Structure de base public class SimpleServlet extends HttpServlet { public void doget(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { // Lire la requête du client // La traiter // Répondre } } 07/11/2002 P. Itey - INRIA 99

Lire la requête du client HttpServletRequest hérite de ServletRequest : encapsule la requête HTTP et fournit des méthodes pour accéder à toutes les informations contient les informations sur l'environnement du serveur 07/11/2002 P. Itey - INRIA 100 Les méthodes de HttpServletRequest String getmethod() retourne la méthode HTTP String getheader(string name) retourne le paramètre name de l'entête HTTP de la requête String getremotehost() retourne le nom d'hôte du client String getremoteaddr() retourne l'adresse IP du client 07/11/2002 P. Itey - INRIA 101

Les méthodes de HttpServletRequest String getparameter(string name) retourne la valeur d'un champ de formulaire HTML String getservername() retourne le nom du serveur String getserverport() le port sur lequel le serveur écoute 07/11/2002 P. Itey - INRIA 102 Répondre au serveur HttpServletResponse hérite de ServletResponse : utilisé pour construire un message de réponse HTTP renvoyé au navigateur client contient les méthodes nécessaires pour définir : type de contenu, en-tête et code de retour contient un flot de sortie pour envoyer des données (HTML ou autre) au navigateur 07/11/2002 P. Itey - INRIA 103

Les méthodes de HttpServletResponse void setstatus(int statuscode) définit le code de retour de la réponse void setheader(string name, String value) définit la valeur de l'en-tête name void setcontenttype(string type) définit le type de contenu MIME 07/11/2002 P. Itey - INRIA 104 Les méthodes de HttpServletResponse PrintWriter getwriter() pour envoyer des données texte au client ServletOutputStream getoutputstream() flot pour envoyer des données binaires void sendredirect(string url) redirige le navigateur vers l'url 07/11/2002 P. Itey - INRIA 105

Un exemple simple... 07/11/2002 P. Itey - INRIA 106 Un exemple simple... 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");out.flush(); 07/11/2002 P. Itey - INRIA 107

Un autre exemple... 07/11/2002 P. Itey - INRIA 108 Un autre exemple... package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<!doctype HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<BODY><H1>Hello WWW</H1>\n" +"</BODY></HTML>");}} 07/11/2002 P. Itey - INRIA 109

PLAN Les Servlets Cycle de vie d'une servlet Traitement des données de formulaires Gestion de l'état avec cookies et sessions Introduction aux JSP Intégrer JSP, Servlets et JavaBeans Les JSP en XML Les balises JSP personnalisées Règles de conception 07/11/2002 P. Itey - INRIA 110 Méthodes du cycle de vie La classe javax.servlet.servlet définit les méthodes qui permettent de contrôler le cycle de vie d'une servlet : void init() void service() void destroy() Elles sont héritées par la servlet et doivent être redéfinies 07/11/2002 P. Itey - INRIA 111

Les méthodes du cycle de vie import javax.servlet.*; import javax.servlet.http.*; public class SimpleServlet extends HttpServlet { public void init(servletconfig c) throws ServletException { } public void doxxx(httpservletrequest req, HttpServletResponse res) throws ServletException, IOException { } } public void destroy() { } 07/11/2002 P. Itey - INRIA 112 Les méthodes du cycle de vie void init() : une fois créée, la servlet est initialisée avec cette méthode : elle n'est appelée qu'une seule fois par le serveur au chargement initial. Similaire à un constructeur on peut y placer (par exemple) des connexions réseaux ou à une BD 07/11/2002 P. Itey - INRIA 113

Les méthodes du cycle de vie void service() : appelée automatiquement par le serveur à chaque requête cliente void destroy() : appelée qu'une seule fois quand la servlet est déchargée par le serveur et lorsque le serveur est arrêté. on y place la fermeture de connexions réseaux ou BD (souvent allouées par init() ) 07/11/2002 P. Itey - INRIA 114 Gestion des servlets par le moteur Créer un pool de threads Moteur de Servlets Thread Thread Instancier la servlet Servlet Appeler la méthode init() Requête HTTP 1 Requête HTTP 2 Réponse HTTP 1 Réponse HTTP 2 Affecter une requête à un thread Appeler la méthode service() Affecter une requête à un thread Terminer le pool de threads Appeler la méthode destroy() Appeler la méthode service() Initialisation Exécution service Exécution service 07/11/2002 P. Itey - INRIA 115

Servlets et concurrence Une seule servlet gère les requêtes de plusieurs clients Un thread est généré à chaque requête du client conséquences : les attributs de la servlet sont partagés, les variables des méthodes sont locales Pour des portions de code critique, utiliser synchronized 07/11/2002 P. Itey - INRIA 116 Implémenter SingleThreadModel javax.servlet.singlethreadmodel interface vide, ne contient aucune méthode Le moteur de servlet crée un pool d'objet servlet et passe les requêtes à un des objets libres public class HelloWWW extends HttpServlet implements SingleThreadModel { } 07/11/2002 P. Itey - INRIA 117

PLAN Les Servlets Cycle de vie d'une servlet Traitement des données de formulaires Gestion de l'état avec cookies et sessions Introduction aux JSP Intégrer JSP, Servlets et JavaBeans Les JSP en XML Les balises JSP personnalisées Règles de conception 07/11/2002 P. Itey - INRIA 118 Les formulaires HTML Permettent aux utilisateurs de saisir des données dans une interface graphique dans le Navigateur Mécanisme intégré pour envoyer des données au serveur WEB 07/11/2002 P. Itey - INRIA 119

Rappel : les balises de formulaire <FORM> : pour définir un formulaire <INPUT> : pour définir une interface : text, password, checkbox, radio, submit, reset <TEXTAREA> : zone de texte sur plusieurs lignes <SELECT> : liste déroulante 07/11/2002 P. Itey - INRIA 120 Envoyer les données du formulaire Attributs de la balise <FORM> ACTION : l'url où envoyer les données METHOD : la méthode HTTP (GET / POST) Les données sont envoyées quand l'utilisateur clique sur un bouton de type submit 07/11/2002 P. Itey - INRIA 121

Exemple de formulaire <FORM METHOD="POST" ACTION="http://host/servlet/demandeServlet" > Nom : <INPUT type="text" name="nom" /> <BR> <INPUT type="submit" value="envoyer" /> </FORM> 07/11/2002 P. Itey - INRIA 122 Les méthodes GET et POST GET : les champs du formulaire sont ajoutés à l'url de l'attribut ACTION sous une forme nom=valeur URL?nom1=val1&nom2=val2&... POST : les données sont passées dans le corps du message HTTP convient pour l'envoi de données binaires 07/11/2002 P. Itey - INRIA 123

Lire les données dans une servlet La méthode de HttpServletRequest : public String getparameter(string name) Dans le formulaire : <INPUT type="text" name="nom" /> Dans la méthode doxxx() : String n = req.getparameter("nom") 07/11/2002 P. Itey - INRIA 124 Lire les données dans une servlet public class ShowParameters extends HttpServlet { public void doget(httpservletrequest req,...) { out.println(req.getparameter( param1 )); Enumeration paramnames = req.getparameternames(); String[] paramvalues = req.getparametervalues(paramnames); } } 07/11/2002 P. Itey - INRIA 125

PLAN Les Servlets Cycle de vie d'une servlet Traitement des données de formulaires Gestion de l'état avec cookies et sessions Introduction aux JSP Intégrer JSP, Servlets et JavaBeans Les JSP en XML Les balises JSP personnalisées Règles de conception 07/11/2002 P. Itey - INRIA 126 HTTP : protocole sans états HTTP gère les paires requête/réponse ouverture, requête, réponse, fermeture HTTP : protocole sans états aucun historique des différentes requêtes n'est conservé les requêtes sont totalement indépendantes les unes des autres 07/11/2002 P. Itey - INRIA 127

Introduction : la gestion des états Une application WEB a besoin de savoir : quel utilisateur a émis la requête courante les requêtes déjà émises par l'utilisateur l'état général de l'application : nombre de visites, nombres de produits vendus, Il faut rajouter à HTTP un mécanisme de gestion des états 07/11/2002 P. Itey - INRIA 128 Qu'est ce qu'un cookie? Petit fragment d'information textuelle échangé entre le serveur WEB et le Navigateur collection de paires nom/valeur chargés dans la mémoire du Navigateur les cookies permanents sont aussi sauvegardés dans un fichier texte sur le client Ils font partie de l'en-tête HTTP 07/11/2002 P. Itey - INRIA 129

Qu'est ce qu'un cookie? Crées à l'origine par Netscape maintenant RFC 2109 Utilisés couramment pour mémoriser les préférences de l'utilisateur ou même pour l'identifier 07/11/2002 P. Itey - INRIA 130 Anatomie d'un cookie Partie Description Name Value Domain Path Max Age Secure Identité du cookie Valeur du cookie Nom du domaine qui l'a défini Information sur le chemin Temps d'expiration du cookie Vrai si cookie transmis avec SSL 07/11/2002 P. Itey - INRIA 131

Où les cookies sont-ils stockés? Netscape les stocke dans 1 seul fichier : cookies.txt Server:8080 FALSE /servlet FALSE 975685981 Sport Foot domaine script chemin SSl? Date nom valeur client I.E. les stocke dans 1 fichier séparé par site dans c:\winnt\profiles\username\cookies 07/11/2002 P. Itey - INRIA 132 Cookie et sécurité? Jamais interprété ou exécuté : 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 privées des données non sensibles nom, adresse, mais pas No CB! mais ne constitue pas un traitement sérieux de la sécurité 07/11/2002 P. Itey - INRIA 133

Utiliser des cookies Depuis API 2.1, pris en charge par : javax.servlet.http.cookie Cette classe construit des cookies avec des paires nom/valeur : public Cookie(String name, String value) 07/11/2002 P. Itey - INRIA 134 Méthodes de Cookie Pour les fixer des attributs supplémentaires void setvalue(string val) définit la valeur du cookie void setmaxage(int expsec) nombre de secondes depuis le 01/01/70 par défaut -1 (expire quand on ferme le navigateur) 0 supprime le cookie 07/11/2002 P. Itey - INRIA 135

Méthodes de Cookie (suite) void setpath(string path) définit le chemin void setsecure(boolean flag) true si SSL, false par défaut void setdomain(string domaine) définit le domaine 07/11/2002 P. Itey - INRIA 136 Envoi des cookies Méthode addcookie() de la classe HttpServletResponse public void doget(httpservletrequest req, HttpServletResponse rep) { } Cookie c = new Cookie ("nom", "toto"); c.setmaxage(365*24*60*60); // 1 an rep.addcookie( c ); rep.setcontenttype("text/html"); 07/11/2002 P. Itey - INRIA 137

Lecture des cookies Le navigateur envoie automatiquement les cookies qui correspondent à domain et path Une servlet peut récupérer les cookies envoyés précédemment au navigateur méthode getcookies() de HttpServletRequest public Cookie[] getcookies() 07/11/2002 P. Itey - INRIA 138 Lecture des cookies Cookie [] cookies = request.getcookies(); String nom = getcookievalue(cookies, "nom", "non trouvé");... public static String getcookievalue( Cookie [] cookies, String cookiename, String defaultvalue) { for(int i=0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookiename.equals(cookie.getname()) return(cookie.getvalue()); } return(defaultvalue); } 07/11/2002 P. Itey - INRIA 139

Les sessions Une session peut se définir : une série d'interactions reliées entre un navigateur et un serveur WEB englobe plusieurs requêtes HTTP sur une période donnée Utilisées pour mémoriser les actions (requêtes HTTP) d'un utilisateur unique au cours du temps exple : opérations bancaires 07/11/2002 P. Itey - INRIA 140 Techniques de mémorisation Pour échanger les données d'identification de la session dans chaque requête : réécriture d'url champ de formulaire caché ("hidden") cookies utilisation des sessions avec les HttpSession 07/11/2002 P. Itey - INRIA 141

Réécriture d'url Principe : ajouter dans la chaîne de requête de la servlet des informations supplémentaires identifiant la session <a href="http://leo.inria.fr/servlet/foo?uid=itey">ac heter</a> l'id utilisateur est transmis en même temps que la requête; il est accédé par chaque servlet mentionnée qui récupère les informations persistantes (BD, fichiers) à partir de cet ID 07/11/2002 P. Itey - INRIA 142 Réécriture d'url Limitations : données volumineuses, caractères autorisés, longueur URL, données visibles (sécurité) 07/11/2002 P. Itey - INRIA 143

Champs de formulaires cachés Principe : on cache les données de session dans des champs "hidden" : <INPUT TYPE="HIDDEN" NAME="uid" VALUE=itey"> Limitations : idem la "réécriture d'url" sauf pour la sécurité (utilisation de POST) 07/11/2002 P. Itey - INRIA 144 L'interface HttpSession Les objets HttpSession mémorisent les données de chaque utilisateur fonctionne comme une table de "hachage" stockée sur le serveur A chaque ID de session est associé, via la table de hachage, l'ensemble des informations 07/11/2002 P. Itey - INRIA 145

Identification des sessions 2 façons possibles d'échanger l'id de session : par défaut : les cookies (de session : non permanents) ajouter l'id de session à l'url (réécriture d'url) L'implémentation est dépendante du moteur de Servlets 07/11/2002 P. Itey - INRIA 146 Identification des session Pseudo-algorithme : si GET : regarder la requête si POST : regarder dans l'en-tête HTTP Sinon, rechercher un cookie "sessionid" Vérifier l'existence de la session si oui, retourner la session sinon: nouvel ID = tps courant + nb aléatoire 07/11/2002 P. Itey - INRIA 147

Identification des session Pseudo-algorithme (suite) : Si le navigateur accepte les cookies, en ajouter 1 à la réponse sinon dans l'url Enregistrer la session avec le nouvel ID 07/11/2002 P. Itey - INRIA 148 Utiliser HttpSession 2 étapes pour la mémorisation des sessions 1- obtenir l'objet de session de l'utilisateur 2- mémoriser / extraire les informations dans / de la session de l'utilisateur 07/11/2002 P. Itey - INRIA 149

Obtenir l'objet de session 2 méthodes de HttpServletRequest : HttpSession getsession() : retourne la session courante, si elle n'existe pas, elle est créée HttpSession getsession(boolean create) : idem sauf que la session n'est créée que si create = true, sinon retourne null 07/11/2002 P. Itey - INRIA 150 Mémoriser et extraire les données Une fois la session obtenue, on peut mémoriser et extraire les données grâce aux méthodes de HttpSession : void putvalue(string name, Object Val) Object getvalue(string name) 07/11/2002 P. Itey - INRIA 151

Mémoriser et extraire les données HttpSession session = request.getsession(); session.putvalue( "table", newarraylist()); ArrayList tab = (ArrayList)session.getValue("table"); 07/11/2002 P. Itey - INRIA 152 Autres méthodes de HttpSession boolean isnew() : retourne true si nouvelle session void invalidate() : invalide la session et supprime les associations nom / valeur 07/11/2002 P. Itey - INRIA 153

Autres méthodes de HttpSession Les moteurs de servlets gèrent un timeout de durée de vie des sessions : int getmaxinactiveinterval() : retourne l'intervalle maximal d'inactivité en secondes void setmaxinactiveinterval : définit l'intervalle maximal d'inactivité en secondes 07/11/2002 P. Itey - INRIA 154 Autres méthodes de HttpRequest String getrequestedsessionid() : retourne l'id de session boolean isrequestedsessionidfromcookie() retourne true si l'id de session a été passé dans un cookie boolean isrequestedsessionidfromurl() retourne true si l'id des session a été passé dans l'url 07/11/2002 P. Itey - INRIA 155

Utiliser HttpSession sans cookies L'implémentation par défaut de HttpSession utilise les cookies si les cookies ne sont pas autorisés par le navigateur, la mémorisation des sessions ne fonctionne pas Autre solution : la réécriture d'url ajouter l'id de session à la fin de l'url la réécriture d'url doit être activée sur le serveur 07/11/2002 P. Itey - INRIA 156 Réécriture d'url Méthodes de HttpServletRequest : String encodeurl(string url) encode l'url en ajoutant l'id de session si les cookies sont désactivés String encoderedirecturl(string url) encode l'url avant de rediriger le Navigateur 07/11/2002 P. Itey - INRIA 157

PLAN Les Servlets Cycle de vie d'une servlet Traitement des données de formulaires Gestion de l'état avec cookies et sessions Introduction aux JSP Intégrer JSP, Servlets et JavaBeans Les JSP en XML Les balises JSP personnalisées Règles de conception 07/11/2002 P. Itey - INRIA 158 JSP : Java Server Page La plupart des applications Web produisent des pages HTML dynamiquement en modifiant uniquement les champs de données et pas la structure de base de la page. Les JSP sont la technologie la plus appropriée pour ce type de contenu. 07/11/2002 P. Itey - INRIA 159

JSP : Java Server Page (suite) Une page JSP contient un modèle de document statique et des balises spécifiques pour inclure du texte ou exécuter une partie de la logique applicative. Le contenu statique est servi comme du HTML normal. 07/11/2002 P. Itey - INRIA 160 JSP : Java Server Page Une JSP est un fichier texte (.jsp ) contenant du code HTML et des fragments de code Java contenus dans des balises spécifiques, exécutés sur le serveur WEB Versions 1.0 et maintenant 1.2 En fait, le fichier JSP est traduit en servlet qui est compilée, puis instanciée lors de son invocation via une URL 07/11/2002 P. Itey - INRIA 161

Principe de fonctionnement Requête client La JSP demandée est-elle chargée NON Traduire le code en servlet source Compiler et charger la servlet Réponse JSP OUI OUI Le fichier.jsp a-t-il été modifié depuis la dernière traduction NON Exécuter la servlet 07/11/2002 P. Itey - INRIA 162 Les balises JSP 3 types : des directives : instructions qui contrôlent le comportement du compilateur de pages JSP, et qui sont donc évaluées avant la compilation, des éléments de scripts (scriptlets) : blocs d instructions Java inclus dans la page JSP entre des délimiteurs <% et %>. 07/11/2002 P. Itey - INRIA 163

Les balises JSP (suite) des balises personnalisées (custom tags ou custom actions): elles sont définies par le programmeur et génèrent du contenu dynamique lorsque la page est demandée. 07/11/2002 P. Itey - INRIA 164 Un exemple simple de JSP <html><head><title>un exemple de page JSP</title></head><body> <!-- définit les informations globales a la page --> <%@page language="java" %> <!-- Déclare 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> 07/11/2002 P. Itey - INRIA 165

4 types d'éléments dans une JSP Nom Tag Traduction Servlet Directives <%@ %> pour l'ensemble page de la page include Déclarations <%! %> en dehors de service() Scriptlets <% %> dans service() méthodes et variables de la servlet Expressions <%= %> dans service() 07/11/2002 P. Itey - INRIA 166 Les scriptlets : <% %> Contient du code JAVA tout code JAVA valide Objet out pour produire de la sortie HTML, objets request et response Se transforme dans la méthode _jspservice() de la servlet les variables sont locales à la méthode les blocs de code s'insèrent dans la servlet 07/11/2002 P. Itey - INRIA 167

Les scriptlets : exemple <% String[] noms = {"titi", "toto"}; for(int i = 0; i < noms.length; i++){ out.println(noms[i]); } %> 07/11/2002 P. Itey - INRIA 168 Les expressions : <%= %> Pour évaluer une expression ou un objet Java et renvoyer sa valeur : retourne une version String de l'expression raccourci pour <% out.println( ); %> Se transforme en out.println( ) dans la méthode _jspservice( ) de la servlet 07/11/2002 P. Itey - INRIA 169

Les expressions : exemple <% String[] noms = {"titi", "toto"}; for(int i = 0; i < noms.length; i++){ %> Le nom <%= i %> ième nom est <%= noms[i] %> <% } %> 07/11/2002 P. Itey - INRIA 170 Les déclarations : <%! %> Pour déclarer des méthodes à l'échelle de la page (méthodes de la servlet générée) les méthodes ne sont exécutées que si elles sont appelées explicitement on peut aussi déclarer des attributs Se transforme en déclarations de champs et méthodes au niveau de la servlet 07/11/2002 P. Itey - INRIA 171

Les déclarations : exemple <%! private int accesscount = 0; private int incrementcount() {return accesscount++;} %> <H2>Nombre et liste des articles</h2> Nombre d'articles : <%= incrementcount() %> 07/11/2002 P. Itey - INRIA 172 Directives <%@ directive attribut1="valeur" attribut2="valeur"... %> 2 directives possibles (jsp1.1) : page : informations relatives à la page include : fichiers à inclure littéralement 07/11/2002 P. Itey - INRIA 173

La directive : <%@page %> Valeurs possibles : <%@ page language="java" <%@ page import="java.util.*, java.net.*" %> <%@ page contenttype="text/plain" %> <%@ page session="true false " %> <%@ page errorpage="pathtoerrorpage" %> <%@ page iserrorpage="true false" %> <%@ page 07/11/2002 P. Itey - INRIA 174 La directive : <%@include %> Valeurs possibles : <%@ include file="chemin relatif du fichier" %> pour se référer au home dir du serveur Web : <%@ include file="/toto.html" %> Interprété littéralement, le fichier peut être HTML, scripting elements, directives, actions,... L'insertion se fait au moment de la traduction de la page... 07/11/2002 P. Itey - INRIA 175

Technique de gestion des erreurs Une exception Java peut être déclenchée et gérée par la JSP On peut ainsi spécifier une page d'erreur séparée pour la JSP placer une directive de page pour errorpage au début du fichier <%@page errorpage="err.jsp" %> permet d'ôter le code d'erreur de la JSP un objet Exception est passé à la page d'erreur 07/11/2002 P. Itey - INRIA 176 Développer la page d'erreur Elle est identifiée par une directive de page en début de fichier : <@page iserrorpage="true" %> 07/11/2002 P. Itey - INRIA 177