Programmation Web Les JSP.

Slides:



Advertisements
Présentations similaires
Serveur d’applications JEE
Advertisements

Le mécanisme des exceptions
La classe String Attention ce n’est pas un type de base. Il s'agit d'une classe défini dans l’API Java (Dans le package java.lang) String s="aaa"; // s.
Architecture. Architecture Enjeux Les Enjeux Trouver une solution e-Business Accessible à partir d’un navigateur Web Accédant au système via un Portail.
Servlet JSP & © Philippe Poulard.
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
Cours 5.3 : XML et les architectures N-tiers – Tier Présentation
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
51 Les technologies XML Cours 7 : Utilisations dXML Janvier Version 1.0 -
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance

UV JSP JSP : Java Server Page
UV Servlets Les Servlets
Environnement Premier projet.
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.
Servlets 2 et 3.0, annotations et descripteurs dans Java EE 6
JSP 2 Crash Course Michel Buffa UNSA
Connexion Web et Bases de Données : Technique canevas de fichiers HTML
Common Gateway Interface
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
Université de Versailles-Saint-Quentin
CGI, Servlet. Script CGI, Servlet Motivation Exécution dun traitement coté serveur web Traitement de formulaire Génération de pages html à la volée Ex.
Connexion Web et Bases de Données : Les SERVLETS
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
Applications Internet
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
SERVLETS PRESENTATION
Développement Web en J2EE (Servlet & JSP)
Les exceptions. Quest ce quune exception ? Une erreur dans le programme Due à un bug ou un cas « anormal » Gestion complète en java : JVM Dans dautre.
Composants web (web tiers)
Section 3: Le Web, le http et le HTML1 La programmation du Web Du côté client Code léger qui sexécute sur lordinateur client Javascript, Applets, Flash,
Présentation Stéphane TALLARD Ingénieur en Informatique depuis 1996
Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke1 Applications Internet Chapitre 7, Sections
JSTL JSP Standard Tag Library
Servlets.
JSP (Java Server Pages)
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.
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 ?
Chapitre 3 Les bibliothèques de balises JSP et la JSTL
1111 Gestion des exceptions Objectifs À la fin de ce cours, vous serez capables de : • Expliquer les concepts de base de la gestion des exceptions.
1212 Entrée et sortie de fichiers Objectifs À la fin de ce cours, vous serez capables de : • Lire à partir de la console • Écrire sur la console.
Initiation au web dynamique - TP
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
Utilisation avancée.
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.
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
Chapitre 2 Développement Web avec les technologies JSP/Servlets
Factory Design Patterns. Contents Factory patterns: principesFactory patterns: principes The Factory Method patternThe Factory Method pattern The Abstract.
UV J2EE Module Java Expert
Master 1 SIGLIS Java Lecteur Stéphane Tallard Chapitre 6 – Exceptions.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
12/04/ Les exceptions Cours 11 Cours 11.
Schéma de conception Factory Method Exemple Sylvain Giroux.
Struts.
1 / / 01 / 2003 Laurent GRANIE & Franck LEGENDRE – MIAGE 3ème année - ARCHITECTURE WEB ARCHITECTURE WEB – COURS III
Développer des applications WEB avec Struts
M2 – MIAGE/SID Servlet et session M2 – MIAGE/SID
Les Servlets Présentation Cycle de vie Principe de fonctionnement
Serveurs Web à contenu dynamique Emmanuel Cecchet INRIA Rhône-Alpes, Projet Sardes Rice University, Systems lab
Java - Servlet et JSP Servlets JSP (Java Server Pages) Tomcat
Les Java Server Pages Dans ce chapitre, nous allons :
IFT 6800 Atelier en Technologies d’information Chapitre 5 Introduction aux Servelets & JSP.
JAVA EE 5 Q.R. C’est quoi une servlets?
{ Java Server Pages Par Billy et Mike.  Introduction  Qu’est-ce que JSP?  Pourquoi utiliser JSP?  Développement  Balises  Servlets  Conclusion.
JSP : Java Server Page Jean-Jacques LE COZ. Plan Technologie Syntaxe Template Directives Déclarations Objets Implicites Expressions Scriptlets Actions.
Technologie servlet Jean-Jacques LE COZ. J2EE Web Container JSP Page Servlet J ava 2 Standard Edition APIs EJB Container EJB JDBCJMS JNDI JTA JavaMail.
Transcription de la présentation:

Programmation Web Les JSP

HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloHttpServlet extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/plain"); PrintWriter out = response.getWriter(); out.println("HTTP Hello World!"); } public String getServletInfo() { return "HTTP Hello World Servlet"; L’objet réponse permet d’obtenir le flux de sortie en écriture

out correspond au writer sur le flux de sortie en écriture HelloWorld JSP Entrelacer le code HTML et le code Java Le fichier hello.jsp Début du code <html> <body bgcolor="white"> <% out.println("Hello World"); %> </body> </html> out correspond au writer sur le flux de sortie en écriture Fin du code

Fichier de configuration Le fichier web.xml correspondant <?xml version="1.0" encoding="ISO-8859-1"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <display-name>Appli de Demo</display-name> <description>Ceci est une série de servlets de démo</description> </web-app> Rien, l’association *.jsp  définir une JSP est automatique

Une JSP est traduite en Servlet lors du premier appel à la JSP Traduction des JSP Une JSP est traduite en Servlet lors du premier appel à la JSP Page JSP Servlet .java Servlet .class jasper javac Hérite de javax.servlet.jsp.HttpJspPage et implémente la méthode _jspService().

Traduction de HelloWorld public class hello_jsp extends HttpJspBase { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { … try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); out.write("<html>\r\n "); out.write("<body bgcolor=\"white\">\r\n "); out.println("Hello World"); out.write("\r\n "); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { pageContext.handlePageException(t); } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); } } }

Hello World JSP (2) Répertoires sur le serveur Les fichiers JSP sont au même endroit que les fichiers HTML

Éléments des pages JSP Tag de Directive Tag de Commentaire Tag de Déclaration Tag de Scriptlet Tag d’Expression

<jsp:directive … /> ou <%@ … %> Directives JSP Version XML <jsp:directive … /> ou <%@ … %> Elles permettent de changer la façon de traduire les pages JSP Ils existent différents types : directive de page (sur la JSP) directive d’include directive de taglib

Directive de page <%@ page language=”scriptingLanguage” par ex: Java <%@ page language=”scriptingLanguage” extends=”className” import=”importList” session=”true|false” buffer=”none|sizekb” autoFlush=”true|false” isThreadSafe=”true|false” info=”info_text” errorPage=”error_url” isErrorPage=”true|false” contentType=”ctinfo” pageEncoding=”peinfo” isELIgnored=”true|false”> La JSP étend la classe Liste de import Java Utilise une session taille du buffer réponse Flush la réponse N’est pas synchronizé Redirige les erreurs Est appelé en cas d’erreur Langage de script (JSP 2.0)

Les balises <%-- et --%> spécifie des commentaires non traduits <html> <body bgcolor="white"> <!-- commentaire visible en HTML --> <%-- commentaire invisible en HTML --%> <% out.println("Hello World"); %> </body> </html>

<jsp:declaration … /> ou <%! …%> JSP Déclaration <jsp:declaration … /> ou <%! …%> Permet de déclarer : Des variables d’instance de JSP ( d’instance de servlet) Des méthodes

JSP Scriplet <jsp:scriplet … /> ou <% … %> Permet d’inclure du code dans la JSP <html> <body bgcolor="white"> <% for(int i=0;i<5;i++) { %> Hello World<br> } </body> </html>

JSP Expression <jsp:expression … /> ou <%= … %> Permet l’affichage de valeur d’une expression <%@ page import="java.util.*" %> <html> <body bgcolor="white"> <h1>Headers</h1> <dl> <% for (Enumeration e= request.getHeaderNames(); e.hasMoreElements();) { String name= (String) e.nextElement(); %> <dt><%= name %></dt> <dd><%= request.getHeader(name) %></dd> } </body> </html>

Afficher les headers de la requête Affichage des Headers Afficher les headers de la requête <%@ page import="java.util.*" %> <html> <body bgcolor="white"> <h1>Headers</h1> <dl> <% for (Enumeration e= request.getHeaderNames(); e.hasMoreElements();) { String name= (String) e.nextElement(); %> <dt><%= name %></dt> <dd><%= request.getHeader(name) %></dd> } </body> </html>

Cycle de vie d’une JSP Le cycle de vie d'une JSP : la méthode jspInit() est appelée après le chargement ; une méthode _jspService() est appelée à chaque requête dans une nouvelle thread. la méthode jspDestroy() est appelée pour le déchargement.

Un compteur de visite Cycle de vie et directive d’un compteur de page Directive de page pas obligatoire car les préférences sont synchronizés <%@ page import="java.util.prefs.*" contentType="text/html" isThreadSafe="false"%> <%! private Preferences pref; public void jspInit() { pref=Preferences.userNodeForPackage(getClass()); } public void jspDestroy() { try { pref.sync(); } catch(BackingStoreException e) { getServletContext().log("can't save prefs",e); pref=null; %> <html> <body bgcolor="white"> <% int counter=pref.getInt("counter", 0); %> Page accédée : <%= ++counter %> pref.putInt("counter", counter); </body> </html> Expression Scriptlet

mêmes restrictions que pour les servlets Include & Forward mêmes restrictions que pour les servlets Forward : <jsp:forward page="page.html"/> Include : <jsp:include page="page.html"/> <%@ include file="fichier.html"/>

Deux types d’agrégations <%@ include file=... %> effectuer lors de la traduction, relatif au fichier, le contenu est traduit. <jsp:include page= /> effectuer lors de l’exécution de la requête, relatif à la page courante.

Include & Forward (2) <jsp:param ... /> permet d’ajouter des paramètres à un include ou un forward <jsp:forward page="parameters.jsp"> <jsp:param name="nouveauParamètre" value="toto"/> </jsp:forward>

JSP et Objet Le tag jsp:useBean permet de déclarer (et d’allouer) des objet java dans les JSP Le tag jsp:getProperty permet d’obtenir la valeur d’une propriété suivant la norme java beans Le tag jsp:setProperty permet de changer la valeur d’une propriété d’un objet

JSP et Objet (2) Utilisation d’un objet dans une JSP <html> <body bgcolor="white"> <jsp:useBean id="myBean" scope="session" class="fr.umlv.jsp.demo.MyBean"/> <h1> <jsp:getProperty name="myBean" property="name"/> </h1> <jsp:setProperty name="myBean" property="name" param="username"/> <hr> <form enctype="application/x-www-form-urlencoded" action="bean.jsp" method=GET> Nom : <input type=text size=20 name="username"> <br> <input type=submit value="Envoi"> </form> </body> </html> Récupère le paramètre username package fr.umlv.jsp.demo; public class MyBean { public String getName() { return name; } public void setName(String name) { this.name= name; private String name;

JSP et Objet (3) Le paramètre est stocké dans l’objet paramètre username Formulaire méthode GET

Bean et scope Page : objet visible pour un page JSP Request : objet visible pour une page et passe les include et forward Session : objet ayant la durée de vie de la session Application : objet ayant la durée de vie le la web-app

Déclaration et récupération des valeurs Scope Exemple Déclaration et récupération des valeurs <html> <body bgcolor="white"> <h2>Before</h2> <jsp:include page="beanIncludeScope.jsp"/> <jsp:useBean id="myBean1" scope="page" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean2" scope="request" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean3" scope="session" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean4" scope="application" class="fr.umlv.jsp.demo.MyBean"/> <jsp:setProperty name="myBean1" property="name" value="page"/> <jsp:setProperty name="myBean2" property="name" value="request"/> <jsp:setProperty name="myBean3" property="name" value="session"/> <jsp:setProperty name="myBean4" property="name" value="appplication"/> <h2>After</h2> </body> </html>

Déclaration et modification de variables Scope Exemple (2) Déclaration et modification de variables <jsp:useBean id="myBean1" scope="page" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean2" scope="request" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean3" scope="session" class="fr.umlv.jsp.demo.MyBean"/> <jsp:useBean id="myBean4" scope="application" class="fr.umlv.jsp.demo.MyBean"/> <dl> <dt>myBean1 :</dt> <dd> <jsp:getProperty name="myBean1" property="name"/> </dd> <dt>myBean2 :</dt> <jsp:getProperty name="myBean2" property="name"/> <dt>myBean3 :</dt> <jsp:getProperty name="myBean3" property="name"/> <dt>myBean4 :</dt> <jsp:getProperty name="myBean4" property="name"/> </dl>

Scope Exemple (3) Valeurs des variables suivants le scope Reload Session/application reste après reload page ne passe pas les include Reload

Objet implicitement déclaré request (request) requête courante response (page) réponse courante pageContext (page) session (session) session courante application (application) out (page) écrivain sur la réponse config (page) config de la JSP page (page) équivalent à this. exception (page) exception dans les pages d’erreurs

La classe PageContext Permet de manipuler une variable quelque soit le scope : Object getAttribute(String name,int scope) void setAttribute(String name, Object o, int scope) void removeAttribute(String name,int scope) Scopes possibles : PAGE_SCOPE, REQUEST_SCOPE, SESSION_SCOPE, APPLICATION_SCOPE Recherche dans les scopes : Object getAttribute(String name) void setAttribute(String name, Object o) void removeAttribute(String name)

Initialiser une JSP

Récupération des erreurs Plusieurs types d’erreurs : - erreurs de traduction (pas récupérable) - erreurs d’exécution (récupérable) Une page déclare posséder une page d’erreur Déclaration être une page d’erreur

Récupération des erreurs (2) <%@ page errorPage="/error.jsp" %> <html> <body bgcolor="white"> <% // oops Object o=null; o.toString(); %> </body> </html> est une page d’erreur <%@ page isErrorPage="true" import="java.io.*" contentType="text/plain" %> <% exception.printStackTrace( new PrintWriter(out)); %> Redirige les erreurs vers la page error.jsp

Traduction Helloworld (2) public class hello_jsp extends HttpJspBase { public void _jspService(HttpServletRequest request, HttpServletResponse response) throws java.io.IOException, ServletException { … try { _jspxFactory = JspFactory.getDefaultFactory(); response.setContentType("text/html;charset=ISO-8859-1"); pageContext = _jspxFactory.getPageContext(this, request, response, null, true, 8192, true); application = pageContext.getServletContext(); config = pageContext.getServletConfig(); session = pageContext.getSession(); out = pageContext.getOut(); out.write("<html>\r\n "); out.write("<body bgcolor=\"white\">\r\n "); out.println("Hello World"); out.write("\r\n "); out.write("</body>\r\n"); out.write("</html>"); } catch (Throwable t) { pageContext.handlePageException(t); } finally { if (_jspxFactory != null) _jspxFactory.releasePageContext(pageContext); } } }

Interaction JSP/Servlet Application web gérant un panier d’achat

Interaction JSP/Servlet (2) Architecture de l’application Basket Article session new add/remove BasketActionServlet /add /remove getProductList Forward HTTP POST article="manteau" basket-product.jsp basket-list.jsp HTTP POST article="voiture" JSP Servlet JSP

Interaction JSP/Servlet (3) Les classes Article et Basket public class Article { public Article(String name) { this.name=name; } public String getName() { return name; public int getPrice() { int price=0; for(int i=0;i<name.length();i++) price+=name.charAt(i); return price; public boolean equals(Object o) { return name.equals(((Article)o).name); public static String[] getProductList() { return new String[] { "manteau","velo","courgette", "edredon" }; } private String name; public class Basket { public void add(Article article) { list.add(article); } public void remove(Article article) { list.remove(article); public Iterator iterator() { return list.iterator(); private final ArrayList list=new ArrayList();

Interaction JSP/Servlet (4) JSP : basket-product.jsp <%@ page import="java.util.*,fr.umlv.jsp.demo.*" %> <html><body bgcolor="white"> <h1>Ajouter un Article au Panier</h1> <table> <% String[] products=Article.getProductList(); for (int i=0;i<products.length;i++) { Article article=new Article(products[i]); %> <tr> <td><%= article.getName() %></td><td><%= article.getPrice() %></td> <td> <form enctype="application/x-www-form-urlencoded" action="add" method="POST"> <input type="hidden" name="article" value="<%= article.getName() %>"> <input type="submit" value="Ajouter"> </form> </td></tr> <% } %> </table> <a href="basket-list.jsp">Visualiser le panier</a> </body></html>

Interaction JSP/Servlet (5) JSP : basket-list.jsp <%@ page import="java.util.*,fr.umlv.jsp.demo.*" %> <html><body bgcolor="white"> <h1>Contenu du Panier</h1> <jsp:useBean id="basket" class="fr.umlv.jsp.demo.Basket"  scope="session"/> <% int total=0; %> <table> <% for (Iterator it=basket.iterator();it.hasNext();) { Article article= (Article) it.next(); %> <tr> <td><%= article.getName() %></td> <td><%= article.getPrice() %></td> <td> <form enctype="application/x-www-form-urlencoded" action="remove" method="POST"> <input type="hidden" name="article" value="<%= article.getName() %>"> <input type="submit" value="Enlever"> </form> </td> </tr> <% total+=article.getPrice(); } %> <tr> <td colspan="3"><hr></td> <td>Total</td><td><%= total %></td> </table> <a href="product-list.jsp">Liste des produits</a> </body></html>

Interaction JSP/Servlet (6) La servlet BasketActionServlet public class BasketActionServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session=request.getSession(); Basket basket=(Basket)session.getAttribute("basket"); if (basket==null) { basket=new Basket(); session.setAttribute("basket",basket); } Article article=new Article(request.getParameter("article")); String uri=request.getRequestURI(); if (uri.endsWith("add")) basket.add(article); else basket.remove(article); getServletContext().getRequestDispatcher("/basket/basket-list.jsp"). forward(request,response); } }