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



Documents pareils
Web Tier : déploiement de servlets

JavaServer Pages (JSP)

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.

Architecture Orientée Service, JSON et API REST

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

Documentation CAS à destination des éditeurs

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

Les architectures 3-tiers Partie I : les applications WEB

Aspects techniques : guide d interfaçage SSO

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Le développement d applications Web

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

Groupe Eyrolles, 2005, ISBN :

Programmation Web. Madalina Croitoru IUT Montpellier

Projet Java EE Approfondi

Mise en œuvre des serveurs d application

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

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

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

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

Application web de gestion de comptes en banques

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

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Java Licence Professionnelle CISII,

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

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

Jahia CMS ET Portal Version 5.0

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

< Atelier 1 /> Démarrer une application web

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

Compte Rendu d intégration d application

Programmer en JAVA. par Tama

Cours 9 : Servlet, JSP, corba

Approche Contract First

Serveur d Applications Web : WebObjects

HTML, CSS, JS et CGI. Elanore Elessar Dimar

Auto-évaluation Programmation en Java

Traduction des Langages : Le Compilateur Micro Java

LES GRANDES ETAPES DE CREATION D UN WEB DESIGN

Présentation du Framework BootstrapTwitter

Tolérance aux Fautes des Grappes d Applications J2EE. Applications Internet dynamiques

Programmation Objet Java Correction

A. Architecture du serveur Tomcat 6

Bases Java - Eclipse / Netbeans

Architectures Web Services RESTful

RAPPORT AUDIT SEO. Élaboré à l'attention de : Monsieur Greber Élaboré par : Cédric Peinado

Optimiser les performances d un site web. Nicolas Chevallier Camille Roux

JOnAS 5. Serveur d application d

Patrons de conception [Krakowiak06]

Gestion distribuée (par sockets) de banque en Java

Devenez un véritable développeur web en 3 mois!

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

Le développement d applications Web. François Charoy Pascal Molli Pascal Urso

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

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

Projet de programmation (IK3) : TP n 1 Correction

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

Cloud. Définition? 08/11/2012. James Urquhart The Wisdom of Clouds

Module BD et sites WEB

TP1. Outils Java Eléments de correction

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

Le serveur HTTPd WASD. Jean-François Piéronne

Gestion Électronique de Documents et XML. Master 2 TSM

Application Web et J2EE

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

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

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

Programmation Internet Cours 4

TP1 : Initiation à Java et Eclipse

STID 2ème année : TP Web/PHP

Séance d ED n 5 : HTML et JavaScript

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

Cours en ligne Développement Java pour le web

RMI le langage Java XII-1 JMF

Formation : WEbMaster

JOnAS Day 5.1. Outils de développements

Bien programmer. en Java ex. couleur. Avec plus de 50 études de cas et des comparaisons avec C++ et C# Emmanuel Puybaret.

Alfstore workflow framework Spécification technique

OCL - Object Constraint Language

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

La base de données XML exist. A. Belaïd

Premiers Pas en Programmation Objet : les Classes et les Objets

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

Le Modèle de Sécurité dans JAVA

DOM - Document Object Model

Plan du cours. Historique du langage Nouveautés de Java 7

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

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

Création d une application JEE

Initiation à html et à la création d'un site web

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

ASP.NET MVC 4 Développement d'applications Web en C# - Concepts et bonnes pratiques

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Prendre le marteau, le tableau, le mètre, le crayon, la ficelle, le clou, la pointe ;

Cours 1: Java et les objets

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

Introduction au langage C

Introduction aux «Services Web»

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Mysql avec EasyPhp. 1 er mars 2006

Transcription:

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

Introduction aux JSP

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 3

Cycle de vie d une JSP Request #1 Request #2 Request #3 Request #4 Request #5 Request #6 JSP page translated into servlet Yes No No No Yes No Servlet compiled Servlet instantiated and loaded into server's memory Page first written Yes Yes No No Server restarted No Yes No No Page modified Yes Yes No No init (or equivalent) called Yes No Yes No Yes No doget (or equivalent) called Yes Yes Yes Yes Yes Yes fabien.romeo@fromeo.fr 4

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 5

Accès au code généré Plugin Eclipse System.getProperty("catalina.base") $ECLIPSEWORKDIR\.metadata\.plugins\org. eclipse.wst.server.core\tmpx\ work\catalina\localhost Tomcat direct $TOMCATDIR\work\Catalina\localhost fabien.romeo@fromeo.fr 6

Stratégie de conception : Limiter le code Java dans les JSP Deux options Ecrire 25 lignes de code directement dans une JSP Ecrire ces 25 lignes dans une classe Java à part et 1 ligne dans une JSP pour l invoquer Pourquoi la 2 e option est vraiment meilleure? Développement. Ecriture de la classe dans un environnement Java et pas HTML Debogage. S il y a des erreurs, elles sont visibles à la compilation Test. L accès à la classe Java facilite le test (ex: boucle de test de 100000 itérations sur un serveur ) Réutilisation. Utilisation de la même classe dans différentes pages JSP fabien.romeo@fromeo.fr 7

JSP issues? Extensions de fichiers.jsp, page JSP standard.jspf, fragment de page JSP.jspx, page JSP compatible XML Deux syntaxes Standard XML Extensible à travers des librairies de tag (fichiers.tld) fabien.romeo@fromeo.fr 8

Syntaxe de base Texte HTML <h1>blah</h1> Passé au client. Réellement traduit en servlet par le code out.print("<h1>blah</h1>"); Commentaires HTML <!-- Commentaire --> Pareil que les autres éléments HTML : passés au client Commentaires JSP <%-- Commentaires --%> Ne sont pas envoyés au client Echappement <% Pour obtenir <% dans la sortie, utiliser <\% fabien.romeo@fromeo.fr 9

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

Expressions JSP: <%= valeur %>

Expressions JSP Format <%= Expression Java %> Résultat Expression évaluée, convertie en String, et placée dans la page HTML à la place qu elle occupe dans la JSP L expression est placée dans _jspservice en paramètre du out.print() Exemples Heure courante : <%= new java.util.date() %> Hostname: <%= request.getremotehost() %> Syntaxe compatible XML <jsp:expression>java Expression</jsp:expression> On ne peut pas mixer les deux versions dans une même page. Il faut utiliser XML pour la page entière si on utilise jsp:expression. Voir les transparents de fin fabien.romeo@fromeo.fr 12

Correspondance JSP/Servlet JSP d origine <h1>un nombre aléatoire</h1> <%= Math.random() %> Code du servlet résultant de la traduction public void _jspservice(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { } response.setcontenttype("text/html"); HttpSession session = request.getsession(); JspWriter out = response.getwriter(); out.println("<h1>un nombre aléatoire</h1>"); out.println(math.random());... fabien.romeo@fromeo.fr 13

Expressions JSP : Exemple <body> <h2>jsp Expressions</h2> <ul> <li>current time: <%= new java.util.date() %> </li> <li>server: <%= application.getserverinfo() %> </li> <li>session ID: <%= session.getid() %> </li> <li>the <code>testparam</code> form parameter: <%= request.getparameter("testparam") %> </ul> </body> </html> fabien.romeo@fromeo.fr 14

Variables prédéfinies request Instance de HttpServletRequest (1 e argument de service/doget) response out Instance de HttpServletResponse (2 e argument de service/doget) Intance de JspWriter (une version bufferisée de Writer) utilisée pour envoyer des donnés sur la sortie vers le client session Instance de HttpSession associée à la requête (sauf si désactivée avec l attribut session de la directive de la page) application Instance de ServletContext (pour partager des données) telle que obtenue via getservletcontext() fabien.romeo@fromeo.fr 15

Servlets vs JSP: Lire 3 paramètres (Servlet) public class ThreeParams extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException {... out.println(doctype + "<html>\n" + "<head><title>"+title + "</title></head>\n" + "<body bgcolor=\"#fdf5e6\">\n" + "<h1 align=\"center\">" + title + "</h1>\n" + "<ul>\n" + " <li><b>param1</b>: " + request.getparameter("param1") + "</li>\n" + " <li><b>param2</b>: " + request.getparameter("param2") + "</li>\n" + " <li><b>param3</b>: " + request.getparameter("param3") + "</li>\n" + "</ul>\n" + "</body></html>"); } } fabien.romeo@fromeo.fr 16

Lire 3 paramètres : résultat fabien.romeo@fromeo.fr 17

Servlets vs JSP: Lire 3 paramètres (JSP) <!DOCTYPE > <html> <head> <title>reading Three Request Parameters</title> <link rel=stylesheet href="jsp-styles.css" type="text/css"> </head> <body> <h1>reading Three Request Parameters</h1> <ul> <li><b>param1</b>: <%= request.getparameter("param1") %></li> <li><b>param2</b>: <%= request.getparameter("param2") %></li> <li><b>param3</b>: <%= request.getparameter("param3") %></li> </ul> </body></html> fabien.romeo@fromeo.fr 18

Reading Three Params (Servlet): Result fabien.romeo@fromeo.fr 19

Scriptlets JSP: <% Code %>

Scriptlets JSP Format <% Code Java %> Résultat Code inséré tel quel dans _jspservice() Exemple <% String querydata = request.getquerystring(); out.println("attached GET data: " + querydata); %> <% response.setcontenttype("text/plain"); %> Syntaxe XML <jsp:scriptlet>code Java</jsp:scriptlet> fabien.romeo@fromeo.fr 21

Correspondance JSP/Servlet JSP d origine <h2>foo</h2> <%= bar() %> <% baz(); %> Code du servlet résultant de la traduction 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();... } fabien.romeo@fromeo.fr 22

Scriptlets JSP: Exemple On veut permettre à l utilisateur de choisir la couleur de fond de la page HTML Quel est le problème avec ce code? <body bgcolor= "<%= request.getparameter("bgcolor") %>"> fabien.romeo@fromeo.fr 23

Scriptlets JSP : Exemple <!DOCTYPE > <html> <head> <title>color Testing</title> </head> <% String bgcolor = request.getparameter("bgcolor"); if ((bgcolor == null) (bgcolor.trim().equals(""))){ bgcolor = "WHITE"; } %> <body bgcolor="<%= bgcolor %>"> <h2 align="center">testing a Background of "<%= bgcolor %>".</h2> </body></html> fabien.romeo@fromeo.fr 24

Scriptlets JSP : Résultat fabien.romeo@fromeo.fr 25

Utilisation des scriptlets pour créer des parties conditionnelles Postulat Les scriplets sont insérés tels quels dans le servlet Pas besoin d avoir des expressions Java complètes Cependant, les expressions complètes sont la plupart du temps plus claires et faciles à maintenir Exemple <% if (Math.random() < 0.5) { %> Vous avez <b>gagné</b>! <% } else { %> Vous avez <b>perdu</b>! <% } %> Code du servlet résultant de la traduction if (Math.random() < 0.5) { out.println("vous avez <b>gagné</b>!"); } else { out.println("vous avez <b>perdu</b>!"); } fabien.romeo@fromeo.fr 26

Déclarations JSP: <%! Code %>

Déclarations JSP Format <%! Java Code %> Résultat Insérées telle quelle dans la définition de la classe du servlet, en dehors de toute méthode existante Exemples <%! private int somefield = 5; %> <%! private void somemethod(...) {...} %> Remarque de conception Les attributs sont clairement utiles. Pour les méthodes, il est la plupart du temps préférable de les définir dans une classe Java séparée Syntaxe XML <jsp:declaration>code Java</jsp:declaration> fabien.romeo@fromeo.fr 28

Correspondance JSP/Servlet JSP d origine <h1>some Heading</h1> <%! %> private String randomheading() { } return("<h2>" + Math.random() + "</h2>"); <%= randomheading() %> (Alternative : créer randomheading en méthode statique dans une classe Java séparée) fabien.romeo@fromeo.fr 29

Correspondance JSP/Servlet Code du servlet résultant de la traduction public class MyJSP_jsp implements HttpJspPage { private String randomheading() { return("<h2>" + Math.random() + "</h2>"); } public void _jspservice(httpservletrequest request, HttpServletResponse response) throws ServletException, IOException { response.setcontenttype("text/html"); HttpSession session = request.getsession(); JspWriter out = response.getwriter(); out.println("<h1>some Heading</h1>"); out.println(randomheading());... }... } fabien.romeo@fromeo.fr 30

Déclarations JSP : Exemple <!DOCTYPE > <html> <head> <title>jsp Declarations</title> <link rel=stylesheet href="jsp-styles.css" type="text/css"> </head> <body> <h1>jsp Declarations</h1> <%! private int accesscount = 0; %> <h2>accesses to page since server reboot: <%= ++accesscount %></h2> </body></html> fabien.romeo@fromeo.fr 31

Déclarations JSP : Résultats fabien.romeo@fromeo.fr 32

Déclarations JSP : les méthodes jspinit et jspdestroy Les pages JSP, comme les servlets normaux, ont parfois besoin d utiliser init et destroy Problème : le servlet qui résulte de la traduction de la page JSP peut déjà utiliser init et destroy Les redéfinir causerait des problèmes Ainsi, il n est pas permis d utiliser des déclarations JSP pour définir init ou destroy Solution : utiliser jspinit et jspdestroy Le servlet auto-généré garantit que ces méthodes seront appelées depuis init et destroy, mais par défaut l implémentation de jspinit et jspdestroy est vide (on peut donc les redéfinir) fabien.romeo@fromeo.fr 33

Déclarations JSP et variables prédéfinies Problème Les variables prédéfines (request, response, out, session, etc.) sont locales à la méthode _jspservice. Ainsi, elles ne sont pas disponibles pour les méthodes définies par des déclarations JSP et les méthodes des classes externes. Que peut-on faire? Solution : les passer en paramètres. Ex : <%! private void somemethod(httpsession s) { dosomethingwith(s); } %> <% somemethod(session); %> Rq 1 : les méthodes statiques ne résolvent pas le problème Il faut également les passer en paramètres Rq 2 : println de JSPWriter lance une IOException Utiliser throws IOException pour les méthodes qui utilisent println fabien.romeo@fromeo.fr 34

Pages JSP avec la syntaxe XML

Pourquoi deux versions? La syntaxe classique des JSP n est pas compatible XML <%=... %>, <%... %>, <%!... %> ne sont pas permis en XML HTML 4 n est pas compatible XML non plus Donc au final, on ne peut pas utiliser des éditeurs XML Pourquoi voudrait-on utiliser du code JSP dans des environnements XML? Pour produire du xhtml en particulier Pour produire des documents XML en général Il est possible d utiliser la syntaxe classique pour créer des documents XML, mais il est plus simple de travailler en XML dès le début pour Web services pour les applications Ajax Il y a donc une seconde syntaxe qui suit les règles de XML fabien.romeo@fromeo.fr 36

Syntaxe XML pour générer des fichiers XHTML (somefile.jspx) <?xml version="1.0" encoding="utf-8"?> <html xmlns:jsp="http://java.sun.com/jsp/page"> <jsp:output doctype-root-element="html" doctype-public="-//w3c//dtd XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/tr/xhtml1/dtd/xhtml1- transitional.dtd" /> <jsp:directive.page contenttype="text/html"/> <head><title>some Title</title></head> <body bgcolor="#fdf5e6"> <!-- body --> </body></html> Le namespace jsp est nécessaire pour utiliser les commandes jsp:quelquechose. On peut utiliser d autres namespaces pour se servir de librairies de tags JSP Construit la ligne du DOCTYPE Pour les pages JSP en syntaxe XML, le content type par défaut est text/xml Contenu xhtml + commandes JSP utilisant la syntaxe jsp:quelquechose + librairies de tags JSP fabien.romeo@fromeo.fr 37

Syntaxe XML pour générer des fichiers XML (somefile.jspx) <?xml version="1.0" encoding="utf-8"?> <your-root-element xmlns:jsp="http://java.sun.com/jsp/page"> <your-tag1>foo</your-tag1> <your-tag2>bar</your-tag2> <your-root-element> Utilisation Quand on communique avec un client qui attend du vrai XML Ajax Web services Custom clients fabien.romeo@fromeo.fr 38

Exemple de page HTML 4 : syntaxe classique (sample.jsp) <!DOCTYPE HTML PUBLIC "-//W3C//DTD..."> <html> <head><title>sample (Classic Syntax)</title></head> <body bgcolor="#fdf5e6"> <center> <h1>sample (Classic Syntax)</h1> <h2>num1: <%= Math.random()*10 %></h2> <% double num2 = Math.random()*100; %> <h2>num2: <%= num2 %></h2> <%! private double num3 = Math.random()*1000; %> <h2>num3: <%= num3 %></h2> </Center> </body></html> fabien.romeo@fromeo.fr 39

Exemple de page XHTML: syntaxe XML (sample.jspx) <?xml version="1.0" encoding="utf-8"?> <html xmlns:jsp="http://java.sun.com/jsp/page"> <jsp:output doctype-root-element="html" doctype-public="-//w3c//dtd..." doctype-system="http://www.w3.org...dtd" /> <jsp:directive.page contenttype="text/html"/> <head><title>sample (XML Syntax)</title></head> <body bgcolor="#fdf5e6"> <div align="center"> <h1>sample (XML Syntax)</h1> <h2>num1: <jsp:expression>math.random()*10</jsp:expression></h2> <jsp:scriptlet> double num2 = Math.random()*100; </jsp:scriptlet> <h2>num2: <jsp:expression>num2</jsp:expression></h2> <jsp:declaration> private double num3 = Math.random()*1000; </jsp:declaration> <h2>num3: <jsp:expression>num3</jsp:expression></h2> </div></body></html> fabien.romeo@fromeo.fr 40

Exemples de pages : Résultat fabien.romeo@fromeo.fr 41

Document XML généré avec une syntaxe XML <?xml version="1.0" encoding="utf-8"?> <some-root-element xmlns:jsp="http://java.sun.com/jsp/page"> <some-element-1>text</some-element-1> <some-element-2> Number: <jsp:expression>math.random()*10</jsp:expression> </some-element-2> </some-root-element> fabien.romeo@fromeo.fr 42