Chapitre 2 Développement Web avec les technologies JSP/Servlets

Slides:



Advertisements
Présentations similaires
Serveur d’applications JEE
Advertisements

JEE 5 - JSF F.Pfister 2 institut eerie Les technologies du web Servlets JSP MVC Model 1 : servlets + JSP MVC Model.
Le struts validator – framework de validation
13/04/05 - RB1 Montpellier 24/03/2005 Les interactions entre le SSO ESUP et le mécanisme de propagation d'identité
Architecture. Architecture Enjeux Les Enjeux Trouver une solution e-Business Accessible à partir d’un navigateur Web Accédant au système via un Portail.
Cours MIAGE « Architectures Orientées Services » Henry Boccon-Gibod 1 Architectures Orientées Services Composants de Service Exemple pratique de développement.
Servlet JSP & © Philippe Poulard.
Exposé de Système - Informatique et Réseau
Programmation Web Les JSP.
Cours 5.3 : XML et les architectures N-tiers – Tier Présentation
Architecture de réseaux
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
51 Les technologies XML Cours 7 : Utilisations dXML Janvier Version 1.0 -

Design Pattern MVC En PHP5.
UV JSP JSP : Java Server Page
Environnement Premier projet.
TP 3-4 BD21.
JSP Java Server Pages. Introduction Afin dimplémenter les règles métiers, coté serveur dans une application Web, larchitecture Java propose trois solutions.
Servlet JAVA.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Cours n°3 Les formulaires
Common Gateway Interface
Oct.-2000DESS IIDEE © B. BAH 1 ASP Caractéristiques dun fichier ASP Son extension : « *.asp » La balise: Son indépendance vis à vis de toute plate–forme,
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Connexion Web et Bases de Données : Les SERVLETS
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
SERVLETS PRESENTATION
Développement Web en J2EE (Servlet & JSP)
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Composants web (web tiers)
66 Utilisation des classes et des objets. 6-2 Objectifs A la fin de ce cours, vous serez capables de : Créer de nouvelles classes à laide de Eclipse Utiliser.
Servlets.
JSP (Java Server Pages)
Types de données abstrait et mécanismes d'encapsulation
Servlets. 2 H. Fauconnier M2-Internet Contenu dynamique Perl/cgi indépendant de la plateforme Extensions du serveur exemple ASP M2-Internet 3 H. Fauconnier.
COURS DE PROGRAMMATION ORIENTEE OBJET :
1 CSI 2532 Lab6 Application Web et DB Février 27, 2012.
Michel Coletta - Journées PATTERNS Avril Grenoble1 STRUTS Introduction Technologies Java Architecture Développement Enseigner quoi ?
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
Initiation au web dynamique
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
Marc Le BihanStruts 1.x1 Marc Le Bihan. Struts 1.x2 Plan I)Développement web par Servlets et JSP. II)Prise en charge de Struts. III)Principe de fonctionnement.
Masters IIGLI et ILGII – Intranet internet extranet – – Claude Montacié 1 Cours n° 11 Services Web et plateforme J2EE.
Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle
Module I-C3 : Applications Web IUT R&T 2e année
APPLETS. Applets : généralités Applet : application s'exécutant dans une page HTML Le ByteCode (fichiers.class) est téléchargé depuis un serveur. L'exécution.
JavaScript Nécessaire Web.
La notion de type revisitée en POO
UV J2EE Module Java Expert
0 Objectifs de la session n°1  Revenir sur toutes les bases théoriques nécessaires pour devenir un développeur Web,  Découvrir l’ensemble des langages.
11/04/ L'héritage Cours 7 Cours 7.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Enterprise Java Beans 3.0 Cours INF Bases de Données Hiver 2005, groupe 10 Stefan MARTINESCU.
Les sockets.
Struts.
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
1 / / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB ARCHITECTURE WEB – COURS III
Les Servlets Présentation Cycle de vie Principe de fonctionnement
Les Java Server Pages Dans ce chapitre, nous allons :
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
IFT 6800 Atelier en Technologies d’information Chapitre 5 Introduction aux Servelets & JSP.
JAVA EE 5 Q.R. C’est quoi une servlets?
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
Transcription de la présentation:

Chapitre 2 Développement Web avec les technologies JSP/Servlets Chapitre 2 - Développement web avec JSP/Servlets Chapitre 2 Développement Web avec les technologies JSP/Servlets

Chapitre 2 - Développement web avec JSP/Servlets Sommaire Architecture d’une application Web Installation et configuration du Conteneur Tomcat Les servlets HTTP Les Java Server Pages Les JavaBeans Les Filtres HTTP Le design pattern MVC2

Architecture d’une application web

Contexte Utiliser l’Intranet pour l’infrastructure applicative Protocole standard (HTTP de TCP/IP) Clients légers : Portabilité Architectures multi-tiers Les technologies Servlets et JSP (J2EE) Faciliter le développement et le déploiement côté serveur Embrasser les couches front-end (clients HTML) et back-end (BDD, …) La spécification des API servlets et des JSP sont indépendantes des serveurs d’applications

Architecture-type d’une application web Couche présentation Couche applicative (logique métier) Couche de données Conteneur Web Http JSP Base de données Navigateur Servlet Composants métier (JavaBeans) HTML, XML Les applications web connaissent un engouement ces derniers temps La J2EE Facilite le développement d’applications web

Structure d’une application Web Une application Web possède dans un repertoire lui- même dans webapps une architecture spécifique MaWebApp Pages HTML et JSP *.html, *.jsp /WEB-INF/web.xml /WEB-INF/classes/ /WEB-INF/lib/ /WEB-INF fichier de configuration (XML) classes des servlets et de beans fichiers jar des servlets et utilitaires L’ensemble des fichiers et répertoire peut être mis dans un war (Web Archive) grâce à la commande jar. Le war est automatiquement dé-jarré s’il est placé dans le répertoire webapps.

Installation et configuration du conteneur Web Tomcat

Le conteneur Apache Tomcat Tomcat 6 (Catalina) Projet Apache (Apache  Apache Httpd) Open source Implantation de référence de la spécification Tomcat 6 : Servlet 2.5 et JSP 2.1 (Java EE 5) Suite à l’installation de Tomcat, positionner les 2 variables d’environnement suivantes : JAVA_HOME : Elle doit pointer le répertoire d’installation du JDK CATALINA_HOME : Elle doit pointer le répertoire d’installation de Tomcat.

Arborescence de Tomcat /bin /common/lib /conf /logs /server/lib /shared/lib /webapps scripts startup & shutdown jar utilisés par Tomcat (Ant, Servlet, etc.) configuration: server.xml, web.xml, users.xml fichiers de logs fichiers jar propres à Tomcat fichiers jar communs à toutes les servlets zone de déploiement

Les Servlets HTTP

Programmation HTTP en J2EE J2EE offre une spécification standard d'une API (javax.servlet.http) permettant de programmer HTTP. Les programmes traitant des reqêtes HTTP sont appelés servlets. Un conteneur standard, open source, et gratuit appelé Tomcat est disponible dans le cadre du projet Apache L'objet représentant la requête HTTP s'appèle HttpServletRequest. La réponse HTTP est représentée par l'objet HttpServletResponse. Les programmes côté serveur récupèrent leurs entrées à partir de HttpServletRequest et écrivent leurs sorties dans HttpServletResponse Pour retourner du code HTML, on doit définir un flôt séquentiel de caractères à partir de l'object HttpServletResponse Browser Web Tomcat HttpServletRequest /admin/* servlet 1 /vignette/*.html HttpServletResponse /examples/*.html servlet 2 Conteneur de Servlets

Rappels concernant HTTP Chapitre 2 - Développement web avec JSP/Servlets Rappels concernant HTTP Hyper Text Transfert Protocol (HTTP) protocole de RPC pour le web, sans état accès et récupération de ressources nommage des ressources : URL les données transmises sont décrites au moyen des types MIME messages HTTP 1.0 : GET, POST, HEAD HTTP 1.1 (depuis juin 1999) : Rajout de PUT, DELETE, OPTIONS, TRACE Requête(GET …) Réponse Navigateur Serveur

Structure d’une requête HTTP Chapitre 2 - Développement web avec JSP/Servlets Structure d’une requête HTTP Anatomie d’une requête : ligne de requête commande : GET, POST nom de la ressource version du protocole (ex. HTTP/1.1) champs d’en-tête: informations additionnelles concernant la requête et le client (nom:valeur) Ligne vide corps de la requête: informations supplémentaires (plutôt pour les POST) Requêtes GET Variables visibles dans l'URL Limitation de la taille (dépend de l'OS) Simplicité d'extraction des données Données dans le fichier log Requêtes POST Les variables ne sont pas visibles dans l'URL Les variables sont envoyées dans les entêtes HTTP Pas de limitation de la taille Possibilité d'upload

Structure d’une réponse HTTP Chapitre 2 - Développement web avec JSP/Servlets Structure d’une réponse HTTP Anatomie d’une réponse : ligne de requête version du protocole (ex. HTTP/1.0) statut de la réponse (ex. 404) explication du statut (ex. not found) champs d’en-tête informations additionnelle concernant le serveur et le document retourné (syntaxe = nom:valeur) corps de la requête la ressource retournée (page HTML) Statut des réponse 100-199 : informations 200-299 : Requête réussie 200 : OK, 204: No Content, 205: Reset Content 300-399 : Requête redirigée, ou d'autres actions nécessaires 400-499 : requête incomplète 401 : UnAuthorized, 403: Forbidden, 404 : Not Found, 407: Proxy Authentification Required 500-599 : Réponse incomplète ou erronée (erreur du serveur) 500 : Internal Server Error, 501 : Not Implemented

La ServletRequest et la ServletResponse L'interface ServletRequest permet de récupérer les paramètres de la requête : public abstract int getContentLength() public abstract String getContentType() public abstract String getProtocol() public abstract String getScheme() public abstract String getServerName() public abstract int getServerPort() public abstract String getRemoteAddr() public abstract String getRemoteHost() public abstract ServletInputStream getInputStream() throws IOException public abstract String getParameter(String name) public abstract String[] getParameterValues(String name) public abstract Enumeration getParameterNames() public abstract Object getAttribute(String name) L'interface ServletResponse permet de renvoyer une réponse : public abstract void setContentLength(int length) public abstract void setContentType(String type) public abstract ServletOutputStream getOutputStream() throws IOException

HTTP : Informations sur la requête protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out= response.getWriter(); out.println("Protocol: " + request.getProtocol()); out.println("Scheme: " + request.getScheme()); out.println("ServerName: " + request.getServerName()); out.println("ServerPort: " + request.getServerPort()); out.println("RemoteAddr: " + request.getRemoteAddr()); out.println("RemoteHost: " + request.getRemoteHost()); out.println("Method: " + request.getMethod()); out.println("requestuestURI: " + request.getRequestURI()); out.println("ServletPath: " + request.getServletPath()); out.println("PathInfo: " + request.getPathInfo()); out.println("PathTranslated: " + request.getPathTranslated()); out.println("QueryString: " + request.getQueryString()); out.println("RemoteUser: " + request.getRemoteUser()); out.println("AuthType: " + request.getAuthType()); } GET, POST, PUT etc. Chemin virtuel complet Chemin de la servlet Chemin de la ressource Chemin sur le serveur

Descripteur de déploiement Le fichier web.xml <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"    "http://java.sun.com/j2ee/dtds/web-app_2_3.dtd"> <web-app> <display-name>Mon application Web</display-name> <servlet> <servlet-name>maServlet</servlet-name> <servlet-class>mRomdhani.MaServlet</servlet-class> </servlet> <servlet-mapping> <url-pattern>*.test</url-pattern> </servlet-mapping> <url-pattern>/toto</url-pattern> </web-app> nom de la servlet nom de la servlet nom de la servlet URI d’accès URI d’accès

Le cycle de vie d’une Servlet 1. la servlet est crée puis initialisée init() Cette méthode n’est appelée par le serveur qu’une seule fois lors du chargement en mémoire par le moteur (ou conteneur) de servlet 2. le service du client est implémenté service() Cette méthode est appelée automatiquement par le serveur à chaque requête de client 3. la servlet est détruite destroy() Cette méthode n’est appelée par le serveur qu’une seule fois à la fin permet de libérer des ressources (allouées par init() )

Un exemple de Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html><head><title>Mon adorable Servlet </title> </head>"); out.println("<body><h1>Bienvenue à l’INSAT </h1>"); out.println("</body>"); out.println("</html>"); }

Les méthodes doGet() et doPost() Utiliser les objets HttpServletRequest et HttpServletResponse passés en paramètres de ces méthodes pour implémenter le service : HttpServletRequest contient les renseignements sur le formulaire HTML initial (utile pour doPost()) - La méthode getParameter() récupère les paramètres d’entrée HttpServletResponse contient le flux de sortie pour la génération de la page HTML résultat (getWriter() )

Les Java Server Pages (JSP)

Les JSP (Java Server Pages) <HTML> <HEAD> <TITLE>Ma toute première JSP</TITLE> </HEAD> <BODY> <H1> Ceci est ma toute première JSP </H1> Nous sommes le : <% java.util.Date d = new java.util.Date(); out.println(d.toString()); %> <P> Au revoir et à bientôt </BODY> </HTML>

Balises JSP dans HTML Trois types de balises: 1 – Les scriptlets : du code java 2 – Les directives : pour le contrôle de la structure 3 – Les actions : pour le contrôle de la logique lors de l'appel à la page

Les scriptlets : Les expressions Syntaxe : <%= expression %> Exemple : Il est <%= new java.util.Date() %> <P> et votre hostname est <%= request.getRemoteHost() %> Ceci permet d’intégrer des valeurs dans le code HTML Les valeurs sont évaluées, converties en chaînes de caractères et affichées Les objets implicites (request, response, session, out, ...) disponibles

Les scriptlets : Les Scriptlets Syntaxe : <% code Java %> (scriplets) Exemple : <% String nom = request.getParameter("nom"); ... out.println("Nom de l'utilisateur " + nom); %> C’est un bloc de code Java Il est placé dans _jspService() de la servlet générée ayant accès : aux variables et beans déclarés ( <%! … %> ) aux objets implicites

Directives Syntaxe : <%@ directive attribut1="valeur" attribut2="valeur"... %> 3 directives possibles : page : informations relatives à la page include : fichiers à inclure littéralement taglib : importer des bibliothèques de balises

Actions - Syntaxe à la XML - Permettent de faire des actions au moment où la page est demandée par un client Inclure dynamiquement un fichier Utiliser des JavaBeans Rediriger vers une autre page

Actions (suite) <jsp:include page="relative URL" flush="true" /> Inclusion au moment où la page est servie, pas au moment où elle est traduite en servlet. <jsp:usebean id="name" class="package.class" /> permet d'instancier un bean depuis une page JSP. associé à <jsp:getProperty.../> et <jsp:setProperty.../> <jsp:forward page="/unAutreURI" /> redirige vers un autre URI/URL <jsp:plugin /> Appèle le plugin Java à l’intérieur du navigateur

Objets implicites Ce sont des variables prédéfinies accessibles dans les scriptlets : request : le HttpServletRequest response : le HttpServletResponse session : le HttpSession out : flot de sortie (idem response.getWriter()) application : le ServletContext (idem) config : le ServletConfig de la page

Les JavaBeans

Notion de JavaBean Un JavaBean est un POJO qui définit des méthodes qui exécuteront la logique métier afin décharger la servlet ou la JSP de le faire. Se conformer aux design pattern MVC qui vise la séparation des propos afin de faciliter la maintenance des applications Web Un JavaBean est un composant Java permettant de réaliser un traitement métier spécifique Attributs simples Méthodes set/get permettant l’introspection En simplifiant, on peut voir les JavaBeans comme des classes semblables aux autres, si ce n'est qu'ils proposent des méthodes « accesseurs » pour accéder à leurs attributs. Les JavaBeans sont crées automatiquement et gérées par le conteneur Les JavaBeans sont déployés sous WEB-INF/classes

JSP et les JavaBeans Développer le Bean et le déployer sous WEB-INF/classes Référencer le Bean dans la JSP avec l'action <jsp:usebean …/> package produits; public class Produit { private String marque; private int prix ; public String getMarque() { return marque; } public void setMarque(String marque) { this.marque = marque; public int getPrix() { return prix; public void setPrix(int prix) { this.prix = prix; <HTML> <HEAD><TITLE>Test du Bean </TITLE></HEAD> <BODY> <jsp:useBean id="MonBean" scope="session" class="produits.Produit" type="produits.Produit"/> Définition de la marque et du prix :<P> <jsp:setProperty name="MonBean" property="marque" value="Dell" /> <BR> property="prix" value="2900" /> <BR> Récupération de la marque et du prix du produit :<P> La marque est:<jsp:getProperty name="MonBean" property="marque" /> <BR> Le prix est:<jsp:getProperty name="MonBean" property="prix" /> <BR> </BODY>

Usebean et getProperty()/getProperty() Mécanisme très puissant ! <jsp:usebean id="name" (référence l'instance du composant) class="paquetage.class" (nom qualifié de la classe) scope="page|request|session|application" (portée) /> Pour lire une propriété du bean : <jsp:getProperty name="name" property="property"   /> Pour modifier une propriété du bean : <jsp:setProperty name="name" property="property"  value="valeur" /> Pour modifier tous les attributs avec les paramètres HTTP de même nom : <jsp:setProperty name="name" property= * />

Les Filtres HTTP

Les filtres Servlet Filtre Hello World Hello World Filtré Requête Réponse Hello World Hello World Filtré

Les filtres Il est possible d’ajouter des filtres qui seront exécutés avant les servlets <filter> <filter-name>footer</filter-name> <filter-class>fr.umlv.servletdemo.FooterFilter</filter-class> </filter> <filter-mapping> <url-pattern>/filter/*</url-pattern> </filter-mapping> <servlet-name>hello</servlet-name > Filtre à partir d’un URL Filtre à partir d’une servlet

Appelle les autres filtres ou la servlet Les filtres Des wrappers permettent d’interagir avec la servlet public void doFilter(ServletRequest request,ServletResponse response, FilterChain chain) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out=response.getWriter(); out.println("<html><body bgcolor=\"white\"><h1>"); HttpServletResponseWrapper newResponse=new HttpServletResponseWrapper( (HttpServletResponse)response) { public void setContentType(String contentType) { } }; chain.doFilter(request,newResponse); // context.getRequestDispatcher("/footer.html").include(request,response); out.println("</h1></body></html>"); Exécuté avant Appelle les autres filtres ou la servlet Exécuté après

Le design pattern MVC2

MVC 1 et MVC 2 MVC Model 1 MVC Model 2 MVC Model 1 et MVC Model 2 différent essentiellement en ce qui concerne l'entité responsable au traitement de la requête. Dans le Model 1, c'est la JSP qui se charge de la requête Dans le Model 2, c'est une servlet (Controller) qui fait le travail Un seul contrôleur frontal Un ensemble de contrôleurs spécialisés MVC Model 1 MVC Model 2

Application Web selon le MVC2 L ’architecture MVC (Model-View-Controller) a pour but d ’organiser une application interactive en séparant : les données -> le modèle constitué des objets métiers la représentation des données -> la vue qui restitue les informations vers l'utilisateur le comportement de l ’application -> le contrôleur chargé de l'acquisition d'informations en provenance de l'utilisateur Organisation du MVC1 (Model1) Modèle : JavaBeans Vue : Pages JSP Contrôleur : Page JSP Organisation du MVC2 (Model2) Modèle : JavaBeans Vue : Pages JSP Contrôleur : Servlet qui dirige les actions à effectuer en fonction de la requête émise par le client