Programmation Web - PowerPoint PPT Presentation

About This Presentation
Title:

Programmation Web

Description:

Programmation Web Les JSP HTTP HelloWorld HelloWorld avec une servlet HTTP HelloWorld JSP Entrelacer le code HTML et le code Java Fichier de configuration Le fichier ... – PowerPoint PPT presentation

Number of Views:101
Avg rating:3.0/5.0
Slides: 39
Provided by: univ193
Category:

less

Transcript and Presenter's Notes

Title: Programmation Web


1
Programmation Web
  • Les JSP

2
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"
Lobjet réponse permet dobtenirle flux de
sortie en écriture
3
HelloWorld JSP
  • Entrelacer le code HTML et le code Java

Le fichier hello.jsp
Début du code
lthtmlgt ltbody bgcolor"white"gt lt
out.println("Hello World") gt lt/bodygt lt/htmlgt
out correspond au writer surle flux de sortie en
écriture
Fin du code
4
Fichier de configuration
  • Le fichier web.xml correspondant

lt?xml version"1.0" encoding"ISO-8859-1"?gt lt!DOCT
YPE web-app PUBLIC "-//Sun Microsystems,
Inc.//DTD Web Application 2.3//EN"
"http//java.sun.com/dtd/web-app_2_3.dtd"gt ltweb-ap
pgt ltdisplay-namegtAppli de Demolt/display-namegt
ltdescriptiongtCeci est une série de servlets
de démolt/descriptiongt lt/web-appgt
Rien, lassociation.jsp ? définir une JSP est
automatique
5
Traduction des JSP
  • Une JSP est traduite en Servletlors du premier
    appel à la JSP

Hérite de javax.servlet.jsp.HttpJspPage et
implémente la méthode _jspService().
6
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/htmlcharsetISO-885
9-1") pageContext _jspxFactory.getPageCon
text(this, request, response, null,
true, 8192, true) application
pageContext.getServletContext() config
pageContext.getServletConfig() session
pageContext.getSession() out
pageContext.getOut()
out.write("lthtmlgt\r\n ") out.write("ltbody
bgcolor\"white\"gt\r\n ")
out.println("Hello World") out.write("\r\n
") out.write("lt/bodygt\r\n")
out.write("lt/htmlgt") catch (Throwable t)
pageContext.handlePageException(t)
finally if (_jspxFactory ! null)
_jspxFactory.releasePageContext(pageContext)

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

Les fichiers JSP sont au même endroitque les
fichiers HTML
8
Éléments des pages JSP
  • Tag de Directive
  • Tag de Commentaire
  • Tag de Déclaration
  • Tag de Scriptlet
  • Tag dExpression

9
Directives JSP
Version XML
  • ltjspdirective /gt ou lt_at_ gt
  • Elles permettent de changer la façon de traduire
    les pages JSP
  • Ils existent différents types directive de page
    (sur la JSP)directive dincludedirective de
    taglib

10
Directive de page
Directive de page
par ex Java
  • lt_at_ page languagescriptingLanguage
  • extendsclassName
    importimportList
    sessiontruefalse
    buffernonesizekb
    autoFlushtruefalse
    isThreadSafetruefalse
    infoinfo_text errorPageerror_ur
    l isErrorPagetruefalse
    contentTypectinfo
    pageEncodingpeinfo
    isELIgnoredtruefalsegt

La JSP étend la classe
Liste de import Java
Utilise une session
taille du buffer réponse
Flush la réponse
Nest pas synchronizé
Redirige les erreurs
Est appelé en cas derreur
Langage de script (JSP 2.0)
11
Commentaire
  • Les balises lt-- et --gt spécifie des
    commentaires non traduits

lthtmlgt ltbody bgcolor"white"gt lt!--
commentaire visible en HTML --gt lt--
commentaire invisible en HTML --gt lt
out.println("Hello World") gt lt/bodygt lt/htmlgt
12
JSP Déclaration
  • ltjspdeclaration /gt ou lt! gt
  • Permet de déclarer
  • Des variables dinstance de JSP(? dinstance de
    servlet)
  • Des méthodes

13
JSP Scriplet
  • ltjspscriplet /gt ou lt gt
  • Permet dinclure du code dans la JSP

lthtmlgt ltbody bgcolor"white"gt lt for(int
i0ilt5i) gt Hello Worldltbrgt lt
gt lt/bodygt lt/htmlgt
14
JSP Expression
  • ltjspexpression /gt ou lt gt
  • Permet laffichage de valeur dune expression

lt_at_ page import"java.util." gt lthtmlgt ltbody
bgcolor"white"gt lth1gtHeaderslt/h1gt ltdlgt lt
for (Enumeration e request.getHeaderNames()
e.hasMoreElements()) String name
(String) e.nextElement() gt ltdtgtlt
name gtlt/dtgt ltddgtlt request.getHeader(name)
gtlt/ddgt lt gt lt/bodygt lt/htmlgt
15
Affichage des Headers
  • Afficher les headers de la requête

lt_at_ page import"java.util." gt lthtmlgt ltbody
bgcolor"white"gt lth1gtHeaderslt/h1gt ltdlgt lt
for (Enumeration e request.getHeaderNames()
e.hasMoreElements()) String name
(String) e.nextElement() gt ltdtgtlt
name gtlt/dtgt ltddgtlt request.getHeader(name)
gtlt/ddgt lt gt lt/bodygt lt/htmlgt
16
Cycle de vie dune 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.

17
Un compteur de visite
  • Cycle de vie et directive dun compteur de page

Directive de page
pas obligatoire car les préférences sont
synchronizés
lt_at_ page import"java.util.prefs."
contentType"text/html"
isThreadSafe"false"gt lt! private Preferences
pref public void jspInit()
prefPreferences.userNodeForPackage(getClass())
public void jspDestroy() try
pref.sync() catch(BackingStoreException e)
getServletContext().log("can't save
prefs",e) prefnull gt
lthtmlgt ltbody bgcolor"white"gt lt int
counterpref.getInt("counter", 0) gt Page
accédée lt counter gt lt
pref.putInt("counter", counter) gt
lt/bodygt lt/htmlgt
Expression
Scriptlet
18
Include Forward
  • mêmes restrictions que pour les servlets
  • Forward ltjspforward page"page.html"/gt
  • Include ltjspinclude page"page.html"/gt lt_at_
    include file"fichier.html"/gt

19
Deux types dagrégations
  • lt_at_ include file... gteffectuer lors de la
    traduction, relatif au fichier, le contenu est
    traduit.
  • ltjspinclude page /gteffectuer lors de
    lexécution de la requête, relatif à la page
    courante.

20
Include Forward (2)
  • ltjspparam ... /gt permet dajouter des paramètres
    à un include ou un forward

ltjspforward page"parameters.jsp"gt ltjspparam
name"nouveauParamètre" value"toto"/gt
lt/jspforwardgt
21
JSP et Objet
  • Le tag jspuseBean permet de déclarer (et
    dallouer) des objet java dans les JSP
  • Le tag jspgetProperty permet dobtenir la valeur
    dune propriété suivant la norme java beans
  • Le tag jspsetProperty permet de changer la
    valeur dune propriété dun objet

22
JSP et Objet (2)
  • Utilisation dun objet dans une JSP

lthtmlgt ltbody bgcolor"white"gt ltjspuseBean
id"myBean" scope"session" class"fr.umlv.jsp.dem
o.MyBean"/gt lth1gt ltjspgetProperty
name"myBean" property"name"/gt lt/h1gt
ltjspsetProperty name"myBean" property"name"
param"username"/gt lthrgt ltform
enctype"application/x-www-form-urlencoded"
action"bean.jsp" methodGETgt Nom
ltinput typetext size20 name"username"gt
ltbrgt ltinput typesubmit
value"Envoi"gt lt/formgt lt/bodygt lt/htmlgt
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
23
JSP et Objet (3)
  • Le paramètre est stocké dans lobjet

paramètre username
Formulaire méthode GET
24
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

25
Scope Exemple
  • Déclaration et récupération des valeurs

lthtmlgt ltbody bgcolor"white"gt
lth2gtBeforelt/h2gt ltjspinclude
page"beanIncludeScope.jsp"/gt ltjspuseBean
id"myBean1" scope"page" class"fr.umlv.jsp.demo.
MyBean"/gt ltjspuseBean id"myBean2"
scope"request" class"fr.umlv.jsp.demo.MyBean"/gt
ltjspuseBean id"myBean3" scope"session"
class"fr.umlv.jsp.demo.MyBean"/gt ltjspuseBean
id"myBean4" scope"application"
class"fr.umlv.jsp.demo.MyBean"/gt
ltjspsetProperty name"myBean1" property"name"
value"page"/gt ltjspsetProperty name"myBean2"
property"name" value"request"/gt
ltjspsetProperty name"myBean3" property"name"
value"session"/gt ltjspsetProperty
name"myBean4" property"name" value"appplication
"/gt lth2gtAfterlt/h2gt ltjspinclude
page"beanIncludeScope.jsp"/gt lt/bodygt lt/htmlgt
26
Scope Exemple (2)
  • Déclaration et modification de variables

ltjspuseBean id"myBean1" scope"page"
class"fr.umlv.jsp.demo.MyBean"/gt ltjspuseBean
id"myBean2" scope"request" class"fr.umlv.jsp.de
mo.MyBean"/gt ltjspuseBean id"myBean3"
scope"session" class"fr.umlv.jsp.demo.MyBean"/gt
ltjspuseBean id"myBean4" scope"application"
class"fr.umlv.jsp.demo.MyBean"/gt ltdlgt
ltdtgtmyBean1 lt/dtgt ltddgt ltjspgetProperty
name"myBean1" property"name"/gt lt/ddgt
ltdtgtmyBean2 lt/dtgt ltddgt ltjspgetProperty
name"myBean2" property"name"/gt lt/ddgt
ltdtgtmyBean3 lt/dtgt ltddgt ltjspgetProperty
name"myBean3" property"name"/gt lt/ddgt
ltdtgtmyBean4 lt/dtgt ltddgt ltjspgetProperty
name"myBean4" property"name"/gt lt/ddgt lt/dlgt
27
Scope Exemple (3)
  • Valeurs des variables suivants le scope

Session/application reste après reload
page ne passe pas les include
Reload
28
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
    derreurs

29
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, SESS
    ION_SCOPE, APPLICATION_SCOPE
  • Recherche dans les scopes
  • Object getAttribute(String name)
  • void setAttribute(String name, Object o)
  • void removeAttribute(String name)

30
Initialiser une JSP
31
Récupération des erreurs
  • Plusieurs types derreurs - erreurs de
    traduction (pas récupérable)- erreurs
    dexécution (récupérable)
  • Une page déclare posséder une page derreur
  • Déclaration être une page derreur

32
Récupération des erreurs (2)
lt_at_ page errorPage"/error.jsp" gt lthtmlgt ltbody
bgcolor"white"gt lt // oops Object
onull o.toString() gt lt/bodygt lt/htmlgt
est une page derreur
lt_at_ page isErrorPage"true"
import"java.io." contentType"text/pla
in" gt lt exception.printStackTrace( new
PrintWriter(out)) gt
Redirige les erreurs versla page error.jsp
33
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/htmlcharsetISO-885
9-1") pageContext _jspxFactory.getPageCon
text(this, request, response, null,
true, 8192, true) application
pageContext.getServletContext() config
pageContext.getServletConfig() session
pageContext.getSession() out
pageContext.getOut()
out.write("lthtmlgt\r\n ") out.write("ltbody
bgcolor\"white\"gt\r\n ")
out.println("Hello World") out.write("\r\n
") out.write("lt/bodygt\r\n")
out.write("lt/htmlgt") catch (Throwable t)
pageContext.handlePageException(t)
finally if (_jspxFactory ! null)
_jspxFactory.releasePageContext(pageContext)

34
Interaction JSP/Servlet
  • Application web gérant un panier dachat

35
Interaction JSP/Servlet (2)
  • Architecture de lapplication

Basket
Article
session
new
add/remove
BasketActionServlet /add /remove
getProductList
Forward
HTTP POST
article"manteau"
HTTP POST
article"voiture"
JSP
JSP
Servlet
36
Interaction JSP/Servlet (3)
  • Les classes Article et Basket

public class Article public Article(String
name) this.namename public String
getName() return name public int
getPrice() int price0 for(int
i0iltname.length()i) pricename.charAt(
i) return price public boolean
equals(Object o) return name.equals(((Articl
e)o).name)
public static String getProductList()
return new String "manteau","velo","cour
gette", "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 listnew ArrayList()
37
Interaction JSP/Servlet (4)
  • JSP basket-product.jsp

lt_at_ page import"java.util.,fr.umlv.jsp.demo."
gt lthtmlgtltbody bgcolor"white"gt lth1gtAjouter un
Article au Panierlt/h1gt lttablegt lt
String productsArticle.getProductList()
for (int i0iltproducts.lengthi)
Article articlenew Article(productsi) gt
lttrgt lttdgtlt article.getName()
gtlt/tdgtlttdgtlt article.getPrice() gtlt/tdgt
lttdgt ltform enctype"application/x-www-form-
urlencoded" action"add"
method"POST"gt ltinput type"hidden"
name"article" value"lt article.getName() gt"gt
ltinput type"submit" value"Ajouter"gt
lt/formgt lt/tdgtlt/trgt lt gt lt/tablegt
lta href"basket-list.jsp"gtVisualiser le
panierlt/agt lt/bodygtlt/htmlgt
38
Interaction JSP/Servlet (5)
  • JSP basket-list.jsp

lt_at_ page import"java.util.,fr.umlv.jsp.demo."
gt lthtmlgtltbody bgcolor"white"gt lth1gtContenu du
Panierlt/h1gt ltjspuseBean id"basket"
class"fr.umlv.jsp.demo.Basket" 
scope"session"/gt lt int total0 gt
lttablegt lt for (Iterator itbasket.iterator(
)it.hasNext()) Article article
(Article) it.next() gt lttrgt
lttdgtlt article.getName() gtlt/tdgt lttdgtlt
article.getPrice() gtlt/tdgt lttdgt
ltform enctype"application/x-www-form-urlencoded"
action"remove"
method"POST"gt ltinput type"hidden"
name"article" value"lt article.getName() gt"gt
ltinput type"submit" value"Enlever"gt
lt/formgt
lt/tdgt lt/trgt lt totalarticle.getPr
ice() gt lttrgt lttd
colspan"3"gtlthrgtlt/tdgt lt/trgt lttrgt
lttdgtTotallt/tdgtlttdgtlt total gtlt/tdgt lt/trgt
lt/tablegt lta href"product-list.jsp"gtListe
des produitslt/agt lt/bodygtlt/htmlgt
39
Interaction JSP/Servlet (6)
  • La servlet BasketActionServlet

public class BasketActionServlet extends
HttpServlet protected void doPost(HttpServletR
equest request, HttpServletResponse response)
throws ServletException, IOException
HttpSession sessionrequest.getSession()
Basket basket(Basket)session.getAttribute("basket
") if (basketnull) basketnew
Basket() session.setAttribute("basket",bask
et) Article articlenew
Article(request.getParameter("article"))
String urirequest.getRequestURI()
if (uri.endsWith("add")) basket.add(article)
else basket.remove(article)
getServletContext().getRequestDispatcher("/basket/
basket-list.jsp"). forward(request,response)
Write a Comment
User Comments (0)
About PowerShow.com