Pages jsp 1 JSP Java Server Page Pages jsp 2 Java server page - jsp • Qu’est-ce

Pages jsp 1 JSP Java Server Page Pages jsp 2 Java server page - jsp • Qu’est-ce que c’est ? – langage de script qui combine • un langage à balises (html ou xml) • des fragments de code java – chaque page est compilée en une servlet • Défini par qui – sun Pages jsp 3 Exemple de page jsp <%@ page language="java" %> <html> <head> <title>Untitled</title> </head> <body> <h1>Résultat</h1> <% int francs = Integer.parseInt( request.getParameter("somme"));%> <%= francs + " Frs valent " + francs/6.55957 + " Euro"%> </body> </html> Pages jsp 4 Servlet versus jsp • Un même objectif – construction coté serveur de pages dynamiques – concurents de php, cgi, asp • Deux logiques – servlet : priorité à java – jsp : priorité à html (ou xml) • Un même avantage – ouverture sur l’univers Java java html html java Pages jsp 5 Jsp comment • On dépose les pages jsp à coté des pages html – Pas de compilation au moment du dépôt – Visibilité identique aux pages html – url : pas déclaration de service • nomDePage.jsp • Compilation automatique en dynamique sur le serveur WEB jsp java class Compilateur jsp Javac Pages jsp 6 Déroulement d’un service jsp • La compilation ne se fait qu’une fois utilisateur serveur requête Faut-il compiler? Produire source java oui non exécuter la servlet Compiler le source réponse Pages jsp 7 Une page jsp s’occupe de la sortie 1. Lire les données expédiées par le demandeur 2. Lire les méta-informations sur la demande et le demandeur 3. Calculer la réponse (accés aux SGBD …) 4. Formater la réponse (généralement en html) 5. Envelopper la réponse http (type de document en retour, cookies …) 6. Transmettre le document dans un format adapté – texte (eg. html) – binaire (eg. gif) – compressé (eg. gzip) Trois étapes simplifiées par jsp Pages jsp 8 Qu’est-ce qui est généré ? • Un programme java contenant une classe qui implémente l’interface HttpJspPage – Une interface qui hérite de JspPage qui elle même hérite de Servlet – Son point d’entrée est la méthode _jspService Pages jsp 9 Interface HttpJspPage • Le corps de la page jsp correspond au bloc de la méthode _jspService() – Point d’entrée de la page jsp – void _jspService(HttpServletRequest request, HttpServletResponse response) – les paramètres request et response sont disponibles au sein de la page • Les méthodes jspInit() et jspDestroy() peuvent être redéfinie par l’auteur au sein de la page jsp Pages jsp 10 Scripts d’une page jsp • Elements jsp: – Directives <%@ ... %> – Déclarations (attributs et méthodes) <%! Déclarations de variables et de méthodes %> – Scriplets <% bloc d’instructions %> – Expressions <%= expression java %> – Commentaires (ne sont pas produits en sortie) <%-- expression java --%> Pages jsp 11 Code généré par les scripts JSP JSP Code Java généré <html> out.println("<html>"); <%! int i = 0; %> int i = 0; <% int i = 0; %> int i = 0; <%= i+2 %> out.println(""+(i+2)); <!–- coucou --> out.println("<!–- coucou -->"): <%–- salut --%> Pages jsp 12 Déclarations <%! private int i; public void jspInit() { ... } public void jspDestroy() { ... } %> Pages jsp 13 Scriptlet Scriptlet : code java <% Iterator i = cart.getItems().iterator(); while (i.hasNext()) { ShoppingCartItem item = (ShoppingCartItem)i.next(); BookDetails bd = (BookDetails)item.getItem(); } %> Pages jsp 14 La conditionnelle <% if (clock.getHours() < 12) {%> matin <% } else if (clock.getHours()<14) {%> midi <% } else if (clock.getHours()<17) {%> après-midi <% } else {%> soir <%}%> Pages jsp 15 La conditionnelle (code généré) if (clock.getHours() < 12) { out.println("matin"); } else if (clock.getHours()<14) { out.println("midi"); } else if (clock.getHours()<17) { out.println("après-midi"); } else { out.println("soir"); } Pages jsp 16 La boucle <ol> <% String[] items = cart.getItems(); for (int i=0; i<items.length; i++) { %> <li> <%= items[i] %> </li> <% } %> </ol> Pages jsp 17 HTML/JavaScript versus JSP (1) <html><body> <script type="text/javascript"> var mycars = new Array() mycars[0] = "Renault" mycars[1] = "Peugeot" mycars[2] = "Citroen" for (i=0;i<mycars.length;i++) { document.write(mycars[i] + "<br />") } </script> </body></html> Pages jsp 18 HTML/JavaScript versus JSP (2) <html><body> <% String[] mycars = new String[3]; mycars[0] = "Renault"; mycars[1] = "Peugeot"; mycars[2] = "Citroen"; for (i=0;i<mycars.length;i++) { out.println(mycars[i] + "<br />"); } %> </body></html> Pages jsp 19 Évaluation d’une expression • Expression dont le résultat est sorti sur le sortie courante de la servlet <%= (12+1)*2 %> • Code généré out.println(""+(12+1)*2); Pages jsp 20 Les commentaires • Commentaires html ou xml générés dans la page en sortie <!-- blabla --> • Commentaires jsp Jamais générés dans le page en sortie <%-- blabla --%> Pages jsp 21 Directives • Syntaxe <%@ directive attribut="valeur" %> • Trois directives page, include, Taglib • Exemples <%@ page language="java" %> <%@ page buffer="5" autoFlush="false" %> <%@ page import="java.sql.*, cart.*" %> <%@ include file="foo.jsp" %> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %> Pages jsp 22 Objets accessibles automatiquement au sein d'une page jsp Nom de variable Type java request javax.servlet.http.HttpServletRequest response javax.servlet.http.HttpServletResponse session javax.servlet.http.HttpSession application javax.servlet.ServletContext out javax.servlet.jsp.JspWriter pageContext javax.servlet.jsp.PageContext config javax.servlet.ServletConfig page java.lang.Object (HttpJspPage) exception java.lang.Trowable Pages jsp 23 Contexte d'une requète Pages jsp 24 Notion de context en JSP • On a quatre contextes d'exécution imbriqués les uns dans les autres • Application>session>requète>page – Page : Les variables déclarées dans un scriptlet sont locales à la page – Requète : Pages successives collaborant au traitement d'une même requète (voir "action" <jsp:forward> plus loin) – session : requètes collaborant à une même tâche – application : un ensemble de requètes regroupées sous un même thème Pages jsp 25 Extension des pages jsp Actions Librairies de « tags » Pages jsp 26 "actions" au sein de pages jsp • Syntaxe – Eléments XML "actifs" au sein d'une page JSP <prefixe:action attr="…"> … </prefixe:action> • Effet – Exécuter du code à chaque passage • Deux sortes d'actions – Actions standards (prefixe jsp) exemple <jsp:action> – Actions définies par l'utilisateur : JSP tags (autres prefixes) • Les actions sont regroupées par librairies Pages jsp 27 Actions JSP standard • Modularité <jsp:include> inclure un fichier en place <jsp:forward> transférer le contrôle à une autre page • Utiliser les beans <jsp:useBean> trouver (instancier) un bean <jsp:getProperty> valeur d’un attribut de bean <jsp:setProperty> initialise un attribut de bean • Appel d’une applet <jsp:plugin> génére du code <OBJET> ou <EMBED> Pages jsp 28 Actions standards modularité des pages jsp Pages jsp 29 Servir une requète à l'aide de plusieurs pages jsp • A quoi cela sert – Récupérer les erreurs – Simplifier le contrôle – ou simplement séparer contrôle et traitements – Modulariser les programmes • Quels outils sont nécessaires – Des outils pour passer le contrôle d'une page à une autre – Des outils pour passer de l'information d'une page à l'autre Pages jsp 30 <jsp:forward> • Action <jsp:forward> <jsp:forward page="page1.jsp"/> • Attribut page – Reférence relative à la racine de l'application page="/rep/page1.jsp" – Reférence relative à la page d'appel page="rep/page1.jsp" • Effet : arrête l'exécution de la page courante, lance l'exécution d'une autre page Pages jsp 31 <jsp:forward> suite • Effets (suite) – L'URI d'appel reste inchangée (en cas de rechargement dans le navigateur, c'est la page d'appel qui est rechargée …) – Les variables request, result … restent accessibles – Le buffer de sortie est réinitialisé (si le transfert avait déjà commencé, une erreur est générée) • Passer de l'information entre pages : <jsp:forward page="myPage.jsp"> <jsp:param name="nom" value="val"/> </jsp:forward> Pages jsp 32 Récupération d'erreurs <% try { … } catch(Exception e) { %> <jsp:forward page="erreur.jsp"> <jsp:param name="titre" value="Erreur pendant la lecture de la base"/> <jsp:param name="message" value="<%= e.getMessage()%>"/> </jsp:forward> <%}%> Pages jsp 33 <jsp:include> • Inclure en ligne la réponse d'une autre page jsp, servlet ou page statique – L'URI reste celle de la page d'appel – Les informations sur la requète restent inchangées – Le buffer de sortie est vidé sur la sortie avant de commencer – Des paramètres peuvent être passés <jsp:include page="nav.jsp"> <jsp:param name="nom" value="val"/> </jsp:include> Pages jsp 34 <jsp:plugin> • Génération d'un élément <embed> ou <object> (en fonction du navigateur utilisé) <jsp:plugin type="applet" code="Clok.class" jreversion="1.2" width="160 value="150"> <jsp:params> <jsp:param name="nom" value="val"/> </jsp:param> </jsp:plugin> Pages jsp 35 Actions standards pour utiliser les java beans Pages jsp 36 Les Beans - conventions • bean = classe qui respecte des conventions public class MonBean { // Attributs privés private type XXX; // constructeur public MonBean() {…} … // Lecture/écriture d'un attribut type getXXX() { … } setXXX(type val) { … } } Attribut caché Visibilité gérée par des méthodes d'accès Constructeur (sans paramètre) Pages jsp 37 Actions jsp standards – les "beans" • Trois actions standards pour les beans <jsp:useBean id="XXX" class="…"/> <jsp:getProperty name="XXX" property="…"/> <jsp:setProperty name="XXX" property="…" value="…"/> • Trois éléments vides (en général) : – usage des paramètres pour passer l'information – Attention XXX doit être un identificateur java valide • Trois traitements correspondants – Déclaration/création d'une instance d'objet (constructeur sans paramètre) – Lecture d'un attribut de classe – Écriture d'un attribut de classe Pages jsp 38 uploads/Litterature/ java-ee-chap3-jsp.pdf

  • 22
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager