+ All Categories
Home > Documents > Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import...

Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import...

Date post: 03-Apr-2015
Category:
Upload: ancell-roques
View: 132 times
Download: 4 times
Share this document with a friend
38
Programmation Web Les JSP
Transcript
Page 1: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Programmation Web

Les JSP

Page 2: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

HTTP HelloWorld

HelloWorld avec une servlet HTTPimport 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’obtenirle flux de sortie en écriture

Page 3: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

HelloWorld JSPEntrelacer le code HTML et le code Java

<html> <body bgcolor="white"> <% out.println("Hello World"); %> </body></html> out correspond au writer sur

le flux de sortie en écriture

Début du code

Fin du code

Le fichier hello.jsp

Page 4: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Fichier de configurationLe 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

Page 5: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Traduction des JSPUne 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().

Page 6: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Traduction de HelloWorldpublic 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); } } }

Page 7: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Hello World JSP (2)Répertoires sur le serveur

Les fichiers JSP sont au même endroitque les fichiers HTML

Page 8: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Éléments des pages JSP

• Tag de Directive

• Tag de Commentaire

• Tag de Déclaration

• Tag de Scriptlet

• Tag d’Expression

Page 9: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Directives JSP<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’includedirective de taglib

Version XML

Page 10: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Directive de page

<%@ 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”>

par ex: Java

La JSP étend la classe

Liste de import JavaUtilise 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)

Directive de page

Page 11: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

CommentaireLes 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>

Page 12: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

JSP Déclaration

<jsp:declaration … /> ou <%! …%>

Permet de déclarer :

• Des variables d’instance de JSP( d’instance de servlet)

• Des méthodes

Page 13: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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>

Page 14: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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>

Page 15: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Affichage des HeadersAfficher 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>

Page 16: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Cycle de vie d’une JSP

Le cycle de vie d'une JSP : 1. la méthode jspInit() est appelée après

le chargement ; 2. une méthode _jspService() est

appelée à chaque requête dans une nouvelle thread.

3. la méthode jspDestroy() est appelée pour le déchargement.

Page 17: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Un compteur de visiteCycle de vie et directive d’un compteur de page

<%@ 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; }%>

pas obligatoire car les préférences sont synchronizés

<html> <body bgcolor="white"> <% int counter=pref.getInt("counter", 0); %>

Page accédée : <%= ++counter %>

<% pref.putInt("counter", counter); %> </body></html>

Directive de page

Expression

Scriptlet

Page 18: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Include & Forwardmêmes restrictions que pour les servlets

• Forward :<jsp:forward page="page.html"/>

• Include : <jsp:include page="page.html"/> <%@ include file="fichier.html"/>

Page 19: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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.

Page 20: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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>

Page 21: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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

Page 22: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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>

package fr.umlv.jsp.demo;public class MyBean { public String getName() { return name; } public void setName(String name) { this.name= name; } private String name;}

Récupère le paramètre username

Page 23: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

JSP et Objet (3)Le paramètre est stocké dans l’objet

paramètre username

Formulaire méthode GET

Page 24: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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

Page 25: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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> <jsp:include page="beanIncludeScope.jsp"/>

</body></html>

Page 26: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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> <dd> <jsp:getProperty name="myBean2" property="name"/> </dd> <dt>myBean3 :</dt> <dd> <jsp:getProperty name="myBean3" property="name"/> </dd> <dt>myBean4 :</dt> <dd> <jsp:getProperty name="myBean4" property="name"/> </dd> </dl>

Page 27: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Scope Exemple (3)Valeurs des variables suivants le scope

page ne passe pas les include

Session/application reste après reload

Reload

Page 28: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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

Page 29: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

La classe PageContextPermet 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)

Page 30: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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

Page 31: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Récupération des erreurs (2)

<%@ page isErrorPage="true" import="java.io.*" contentType="text/plain" %> <% exception.printStackTrace( new PrintWriter(out)); %>

<%@ page errorPage="/error.jsp" %><html> <body bgcolor="white"> <% // oops Object o=null; o.toString(); %> </body></html>

est une page d’erreur

Redirige les erreurs versla page error.jsp

Page 32: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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); } } }

Page 33: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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

Page 34: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Interaction JSP/Servlet (2)Architecture de l’application

BasketActionServlet /add /remove

basket-product.jsp basket-list.jsp

Basket

HTTP POST Forward

article="manteau"

JSP JSPServlet

HTTP POSTarticle="voiture"

sessionArticle add/removenew

getProductList

Page 35: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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();}

Page 36: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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>

Page 37: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

Interaction JSP/Servlet (5)

<%@ 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> </tr> <tr> <td>Total</td><td><%= total %></td> </tr> </table> <a href="product-list.jsp">Liste des produits</a> </body></html>

JSP : basket-list.jsp

Page 38: Programmation Web Les JSP. HTTP HelloWorld HelloWorld avec une servlet HTTP import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public.

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); } }


Recommended