Java EE. Cours de 2 e année ingénieur Spécialisation «Génie Informatique»

Documents pareils
JavaServer Pages (JSP)

Web Tier : déploiement de servlets

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.

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

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

Projet Java EE Approfondi

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Les architectures 3-tiers Partie I : les applications WEB

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

Architecture Orientée Service, JSON et API REST

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

Documentation CAS à destination des éditeurs

Programmer en JAVA. par Tama

Une introduction à la technologie EJB (2/3)

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Le développement d applications Web

Bases Java - Eclipse / Netbeans

RMI le langage Java XII-1 JMF

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Aspects techniques : guide d interfaçage SSO

Gestion du cache dans les applications ASP.NET

A. Architecture du serveur Tomcat 6

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

Le Modèle de Sécurité dans JAVA

4. Groupement d objets

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

Alfstore workflow framework Spécification technique

Utilisation de Jakarta Tomcat

Application Web et J2EE

Etude de l ENT de l Université de Paris 5. Mise en place d outils de suivi de la charge de l ENT (monitoring)

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

Remote Method Invocation (RMI)

LMI 2. Programmation Orientée Objet POO - Cours 9. Said Jabbour. jabbour@cril.univ-artois.fr

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

Programmation en Java IUT GEII (MC-II1) 1

Introduction à Java. Matthieu Herrb CNRS-LAAS. Mars

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

TP1. Outils Java Eléments de correction

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Module : programmation site Web dynamique Naviguer entre les pages via site map

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

Auto-évaluation Programmation en Java

Plateforme PAYZEN. Définition de Web-services

Dis papa, c est quoi un bus logiciel réparti?

Package Java.util Classe générique

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

F. Barthélemy. 17 mai 2005

Groupe Eyrolles, 2005, ISBN :

Application web de gestion de comptes en banques

Module BD et sites WEB

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

TP1 : Initiation à Java et Eclipse

Génie Logiciel avec Ada. 4 février 2013

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

WEBSERVICES. Michael Fortier. Master Informatique 2ème année. A308, Université de Paris 13

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

Groupe Eyrolles, 2003 ISBN : X

Création d une application JEE

Programmation par les Objets en Java

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

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

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

Polymorphisme, la classe Object, les package et la visibilité en Java... 1

Formation en Logiciels Libres. Fiche d inscription

JOnAS Day 5.1. Outils de développements

Premiers Pas en Programmation Objet : les Classes et les Objets

1. La plate-forme LAMP

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

Table des matières PRESENTATION DU LANGAGE DS2 ET DE SES APPLICATIONS. Introduction

Introduction au langage Java

INITIATION AU LANGAGE JAVA

BIRT (Business Intelligence and Reporting Tools)

Projet de programmation (IK3) : TP n 1 Correction

Remote Method Invocation Les classes implémentant Serializable

Lambda! Rémi Forax Univ Paris-Est Marne-la-Vallée

Programmation avancée et répartie en Java : interfaçage avec d autres langages

Création d un service web avec NetBeans 5.5 et SJAS 9

Arbres binaires de recherche

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

as Architecture des Systèmes d Information

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

Application de lecture de carte SESAM-Vitale Jeebop

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

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

Projet Android (LI260) Cours 2

Configuration de TCPIPconfig.h

Programmation Par Objets

Corrigé des exercices sur les références

COMPRENDRE L ARCHITECTURE DES WEB SERVICES REST. Amosse EDOUARD, Doctorant

Séance d ED n 5 : HTML et JavaScript

Une introduction à Java

Environnements de développement (intégrés)

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

Hébergement de sites Web

Développement Logiciel

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

OpenPaaS Le réseau social d'entreprise

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

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

Transcription:

Java EE Cours de 2 e année ingénieur Spécialisation «Génie Informatique» fabien.romeo@fromeo.fr http://www.fromeo.fr

JSP Les servlets facilitent le traitement avec java des requêtes et réponses HTTP, mais ils ne sont pas appropriés à l écriture de code HTML out.println("<html><head><title>"+title+"</title> "); Les JSP permettent d intégrer du code java dans une page HTML <h1>time on server</h1> <p><%= new java.util.date() %></p> Mais au final une JSP n est qu un servlet! traduit en compilé en chargé et initialisé en tant que MyJSP.jsp MyJSP_jsp.java MyJSP_jsp.class obj:myjsp_jsp Automatiquement géré par le conteneur fabien.romeo@fromeo.fr 2

Correspondance JSP/Servlet JSP d origine <h1>time on server</h1> <p><%= new java.util.date() %></p> Servlet généré par Tomcat public final class Clock_jsp extends org.apache.jasper.runtime.httpjspbase implements org.apache.jasper.runtime.jspsourcedependent { public void _jspservice(httpservletrequest request, HttpServletResponse response) throws java.io.ioexception, ServletException { } response.setcontenttype("text/html"); JspWriter out = response.getwriter(); //... out.write("<h1>time on server</h1>\r\n"); out.write("<p> "); out.print( new java.util.date() ); out.write("</p>\r\n"); //... fabien.romeo@fromeo.fr 3

Cycle de vie d un servlet 1. Chargement de la classe 2. Instanciation du servlet constructeur par défaut 3. Appel de init() 4. Appel(s) de service() 1 thread par requête 5. Appel de destroy() Servlet constructor init() Ready service() destroy() fabien.romeo@fromeo.fr 4

Types des éléments de scripts Expressions Format : <%= expression %> Format XML : <jsp:expression>expression</jsp:expression> Evaluée et insérée dans la sortie du servlet Se traduit par out.print(expression) Scriptlets Format : <% code %> Format XML : <jsp:scriptlet>code</jsp:scriptlet> Inséré tel quel dans la méthode _jspservice du servlet (appelée par service) Déclarations Format : <%! code %> Format XML : <jsp:declaration>code</jsp:declaration> Insérée telle quelle dans le corps de la classe servlet, en dehors de toute méthode existante fabien.romeo@fromeo.fr 5

Correspondance JSP/Servlet JSP d origine <h2>foo</h2> <%= bar() %> <% baz(); %> <%! private int accesscount = 0; %> Code du servlet résultant de la traduction public final class XXX_jsp... { public void _jspservice(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); HttpSession session = request.getsession(); JspWriter out = response.getwriter(); out.println("<h2>foo</h2>"); out.println(bar()); baz();... } private int accesscount = 0; } fabien.romeo@fromeo.fr 6

Types des éléments de scripts JSP : les directives de page Donnent des informations sur le servlet qui sera généré pour la page JSP Principalement utilisées pour : L importation de classes et paquetages Le type MIME généré par la JSP fabien.romeo@fromeo.fr 7

L attribut «import» Format But <%@ page import="paquetage.classe" %> <%@ page import="paquetage.classe1,...,paquetage.classen" %> Générer les instructions d importation Remarque Bien que les pages JSP peuvent être n importe où sur le serveur, les classes utilisées par les pages JSP doivent être dans le répertoire des classes de l application Web C est-à-dire : /WEB-INF/classes fabien.romeo@fromeo.fr 8

Les attributs «contenttype» et «pageencoding» Format <%@ page contenttype="mime-type" %> <%@ page contenttype="mime-type; charset=character-set" %> <%@ page pageencoding="character-set" %> But Spécifier le type MIME de la page générée par le servlet résultant de la page JSP fabien.romeo@fromeo.fr 9

Intégration des servlets et des JSP : Application du design pattern Model-View-Controller (MVC)

Pourquoi combiner Servlets & JSP? Classiquement : utilisation des JSP pour faciliter le développement et la maintenance du contenu HTML Pour du code dynamique simple, appel du code d un servlet à partir de scripts JSP Pour des applications un peu plus complexes, utilisation de classes appelées à partir de scripts JSP Mais ça n est pas suffisant Pour des traitements complexes, démarrer avec des JSP n est pas pratique Mais surtout, l idée derrière les JSP est qu une seule page possède une forme, une présentation de base stable 11 fabien.romeo@fromeo.fr 11

Possibilités pour traiter une seule requête Servlet seuls. Marche bien quand : 12 L output est de type binaire. Ex : une image Il n y a pas d output. Ex : redirections La forme/présentation est variable. Ex : portail JSP seules. Marche bien quand : L output est de type caractère. Ex : HTML La forme/présentation est stable. Architecture MVC. Nécessaire qd: Une même requête peut donner des résultats visuels réellement différents On dispose d une équipe de développement conséquente avec une partie pour le dev. Web et une autre pour la logique métier On a un traitement complexe des données mais une présentation relativement fixe fabien.romeo@fromeo.fr 12

Rappel : MVC Cette classe permet de gérer les événements utilisateurs. Elle assure le lien entre l utilisateur et le logiciel Ces classes permettent de visualiser les données gérées par le modèle Cette classe s occupe de gérer les données en mémoire, leur persistance et des calculs associés à ces données fabien.romeo@fromeo.fr 13

Rappel : MVC Application dans le cadre d Internet (Model 2) fabien.romeo@fromeo.fr 14

Ex : AREL V6 - liste des promos fabien.romeo@fromeo.fr 15

MVC : étape 1 Le client récupère un formulaire (form.html) pour passer une requête avec paramètres (1, 2, puis 3) Client 1 Conteneur Controller Servlet 3 <html>......... </html> index.html 2 <html>... JSP...... </html> View SelectPromo Model POJO result.jsp Promo.class fabien.romeo@fromeo.fr 16

Formulaire : index.html <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>arel V6.0</title> </head> <body> <h1 align="center">arel : L'école virtuelle de l'eisti</h1> <form method="get" action="http://localhost:8080/mvc/selectpromo"> Sélectionner la promo à afficher : <select name="promo" size="1"> <option>ing1</option> <option>ing2</option> </select><input type="submit" /> </form> </body> </html> fabien.romeo@fromeo.fr 17

MVC : étape 2 1. Le client envoie son formulaire (GET/POST avec paramètres) 2. Le conteneur transmet au servlet correspondant (le controller) GET?promo=ing2 1 doget(rq,rp) 2 Controller Servlet SelectPromo <html>... JSP...... </html> View Model POJO result.jsp Promo.class fabien.romeo@fromeo.fr 18

Controller : SelectPromo.java package arel; import...; public class SelectPromo extends javax.servlet.http.httpservlet implements javax.servlet.servlet { //... protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String promoname = request.getparameter("promo"); } } //... fabien.romeo@fromeo.fr 19

Configuration : web.xml <?xml version="1.0" encoding="utf-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/xmlschema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemalocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="webapp_id" version="2.5"> <display-name>mvc</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> </welcome-file-list> <servlet> <description></description> <display-name>selectpromo</display-name> <servlet-name>selectpromo</servlet-name> <servlet-class>arel.selectpromo</servlet-class> </servlet> <servlet-mapping> <servlet-name>selectpromo</servlet-name> <url-pattern>/selectpromo</url-pattern> </servlet-mapping> </web-app> fabien.romeo@fromeo.fr 20

MVC : étape 3 3. Le servlet controller interroge le model sur «ing2» 4. Le model retourne au controller le résultat correspondant GET?promo=ing2 1 doget(rq,rp) 2 Servlet 3 new Promo(); getpromo("ing2") result:list 4 <html>... JSP...... </html> POJO fabien.romeo@fromeo.fr 21

Model : Promo.java package arel; import...; public class Promo { public List<String> getpromo(string promo) { List<String> promolist = new ArrayList<String>(); if (promo.equals("ing1")) { promolist.add("donald Duck"); promolist.add("minnie Mouse"); promolist.add("pluto"); //... } else if (promo.equals("ing2")) { promolist.add("mickey Mouse"); promolist.add("daisy Duck"); promolist.add("goofy"); //... } else { return null; } } } return promolist; fabien.romeo@fromeo.fr 22

MVC : étape 4 5. Le controller utilise les données du model pour sa réponse 6. Le controller transmet sa réponse à la view (JSP) GET?promo=ing2 1 doget(rq,rp) 2 Servlet 3 new Promo(); getpromo("ing2") setattribute ("promo",result) 5 result:list 4 <html>... JSP...... </html> 6 forward(rq,rp) Rq POJO fabien.romeo@fromeo.fr 23

Controller : SelectPromo.java package arel; import...; public class SelectPromo extends javax.servlet.http.httpservlet implements javax.servlet.servlet { //... protected void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { String promoname = request.getparameter("promo"); Promo promo = new Promo(); List<String> result = promo.getpromo(promoname); request.setattribute("promo", result); RequestDispatcher view = request.getrequestdispatcher("result.jsp"); view.forward(request, response); } } fabien.romeo@fromeo.fr 24

MVC : étape 5 7. La JSP (view) traite la réponse transmise par le controller 8. La page HTML résultante est reçue par le client GET?promo=ing2 1 8 doget(rq,rp) 2 setattribute ("promo",result) Servlet 5 3 result:list 4 new Promo(); getpromo("ing2") 7 getattribute("promo") <html>... JSP...... </html> 6 forward(rq,rp) Rq POJO fabien.romeo@fromeo.fr 25

View : result.jsp <%@ page import="java.util.*" %> <%@ page language="java" contenttype="text/html; charset=iso-8859-1" pageencoding="iso-8859-1"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <title>result</title> </head> <body> <% List<String> promolist = (List<String>)request.getAttribute("promo"); Iterator it = promolist.iterator(); while(it.hasnext()) { out.print("<br />" + it.next()); } %> </body> </html> fabien.romeo@fromeo.fr 26

Ex : AREL V6 - liste des promos fabien.romeo@fromeo.fr 27

Architecture Web JEE : Model 2 (MVC) fabien.romeo@fromeo.fr 28

Architecture Web JEE : Model 1 (pas MVC) fabien.romeo@fromeo.fr 29