Les Servlets et JSP - PowerPoint PPT Presentation

1 / 143
About This Presentation
Title:

Les Servlets et JSP

Description:

C'est une classe Java compil e (.class) qui s'ex cute dans un conteneur de Servlets ... encode l'URL en ajoutant l'ID de session si les. cookies sont ... – PowerPoint PPT presentation

Number of Views:821
Avg rating:3.0/5.0
Slides: 144
Provided by: nsh126
Category:
Tags: jsp | ajoutant | les | servlets

less

Transcript and Presenter's Notes

Title: Les Servlets et JSP


1
Les Servlets et JSP
Cours Java Avancée
  • Korteby Farouk

2
Les Servlets et JSP
  • Les Servlets
  • Cycle de vie d'une Servlet
  • Traitement des données de formulaires
  • Gestion de l'état avec cookies et sessions
  • Introduction aux JSP
  • Les balises JSP personnalisées
  • Règles de conception
  • Résume

3
Les Servlets
Cours Java Avancée
  • Korteby Farouk

4
Les Servlets qu'est ce que c'est ?
  • Avec JSP, c'est un des composants logiciels Web
    de l'architecture J2EE
  • C'est une classe Java compilée (.class) qui
    s'exécute dans un conteneur de Servlets (moteur),
    hébergé par le serveur Web (côté serveur)
  • Permet d'étendre les fonctionnalités du serveur
    Web de manière portable et efficace

5
Les Servlets qu'est ce que c'est ?
  • Écrit en Java technologie indépendante de la
    plate-forme et du serveur
  • S'apparente aux technologies traditionnelles CGI
    (PERL) mais
  • plus efficaces
  • plus pratiques
  • plus puissantes
  • portables et gratuites

6
Les Servlets à quoi ça sert ?
  • Créer des pages dynamiques (HTML/XML) à la
    volée
  • Effectuer des tâches de type CGI (traitements
    applicatifs) côté serveur
  • Écrire une application en Java dont l'interface
    utilisateur (en HTML) se situe dans le Browser,
    côté client

7
Les Servlets comment ça marche ?
  • Le serveur Web associe une ou plusieurs URLs à
    chaque servlet
  • Lorsque ces URLs sont appelées via une requête
    HTTP de l'utilisateur, côté client, le conteneur
    de servlet (moteur) déclenche la servlet qui
    s'exécute côté serveur
  • La servlet génère une réponse HTML/XML vers le
    client en utilisant la logique métier d'EJB ou en
    interrogeant directement la BD (via API JDBC)

8
Architecture WEB principe
9
Architecture Servlets
10
API Servlet
  • Les classes et les interfaces pour les Servlets
    sont définies dans 2 packages
  • javax.servlet
  • package générique indépendant des protocoles
  • javax.servlet.http
  • spécifique à HTTP permet la gestion des sessions
  • Où les trouver JSWDK
  • java.sun.com/products/servlets

11
Les classes de l'API
  • 2 classes abstraites
  • javax.servlet.GenericServlet
  • javax.servlet.http.HttpServlet
  • qui implémentent 2 interfaces abstraites
  • javax.servlet.Servlet
  • javax.servlet.ServletConfig

12
Les classes de l'API
13
La classe GenericServlet
  • javax.servlet.GenericServlet
  • définit une servlet indépendante des
  • protocoles
  • une classe abstraite qui fournit une
  • implémentation de base de l'interface Servlet
  • La méthode service() est le principal point
  • d'entrée
  • c'est une méthode abstraite qui doit être
  • implémentée par une classe dérivée

14
Structure de base d'une servlet
  • import javax.servlet.
  • public class first extends GenericServlet
  • public void init(ServletConfig config)
  • throws ServletException
  • public void service( ServletRequest req,
  • ServletResponse rep)
  • throws ServletException, IOException
  • public void destroy()

15
Communiquer avec le client
  • 2 arguments pour service()
  • javax.servlet.ServletRequest
  • encapsule la requête du client
  • contient le flot d'entrée dans lequel lire les
    données en provenance du client
  • javax.servlet.ServletResponse
  • contient le flot de sortie pour répondre au
    client

16
Développer des HttpServlet
  • javax.servlet.http.HttpServlet
  • dérive de GenericServlet et fournit une
    implémentation spécifique à HTTP de l'interface
    Servlet

17
La méthode service() de HttpServlet
  • HttpServlet surcharge la méthode service()
  • lit la méthode HTTP à partir de la requête
  • transmet la requête à une méthode appropriée,
    destinée à la traiter Chaque méthode a une
    méthode "handler associée, définie dans une
    méthode HttpServletdoXXX()

18
Méthodes de HttpServlet
  • Une servlet est une sous-classe de HttpServlet
    dans laquelle on surcharge la ou les méthodes
    doXXX() appropriées
  • requête GET, HEAD doGet()
  • requête POST doPost()
  • public void doXXX(HttpServletRequest req,
  • HttpServletResponse rep)

19
Squelette dune servlet Http
  • import javax.servlet.
  • import javax.servlet.http.
  • public class SimpleServlet extends HttpServlet
  • public void init(ServletConfig c)
  • throws ServletException
  • public void doGet(HttpServletRequest req,
  • HttpServletResponse res)
  • throws ServletException, IOException
  • public void destroy()
  • public String getServletInfo()

20
Développer des HttpServlet
  • javax.servlet.http.HttpServlet
  • dérive de GenericServlet et fournit une
    implémentation spécifique à HTTP de l'interface
    Servlet

21
Structure de base
  • public class SimpleServlet extends HttpServlet
  • public void doGet(HttpServletRequest req,
  • HttpServletResponse res)
  • throws ServletException, IOException
  • // Lire la requête du client
  • // La traiter
  • // Répondre

22
Lire la requête du client
  • HttpServletRequest hérite de ServletRequest
  • encapsule la requête HTTP et fournit des
    méthodes pour accéder à toutes les informations
  • contient les informations sur l'environnement
    du serveur

23
Les méthodes de HttpServletRequest
  • String getMethod()
  • retourne la méthode HTTP
  • String getHeader(String name)
  • retourne le paramètre name de l'entête HTTP de
    la requête
  • String getRemoteHost()
  • retourne le nom d'hôte du client
  • String getRemoteAddr()
  • retourne l'adresse IP du client

24
Les méthodes de HttpServletRequest
  • String getParameter(String name)
  • retourne la valeur d'un champ de formulaire
    HTML
  • String getServerName()
  • retourne le nom du serveur
  • String getServerPort()
  • le port sur lequel le serveur écoute

25
Répondre au serveur
  • HttpServletResponse hérite de ServletResponse
  • utilisé pour construire un message de réponse
    HTTP renvoyé au navigateur client
  • contient les méthodes nécessaires pour définir
    type de contenu, en-tête et code de retour
  • contient un flot de sortie pour envoyer des
    données (HTML ou autre) au navigateur

26
Les méthodes de HttpServletResponse
  • void setStatus(int statusCode)
  • définit le code de retour de la réponse
  • void setHeader(String name,String value)
  • définit la valeur de l'en-tête name
  • void setContentType(String type)
  • définit le type de contenu MIME

27
Les méthodes de HttpServletResponse
  • PrintWriter getWriter()
  • pour envoyer des données texte au client
  • ServletOutputStream getOutputStream()
  • flot pour envoyer des données binaires
  • void sendRedirect(String url)
  • redirige le navigateur vers l'URL

28
Un exemple simple ...
  • package hall
  • import java.io.
  • import javax.servlet.
  • import javax.servlet.http.
  • public class HelloWorld extends HttpServlet
  • public void doGet(HttpServletRequest request,
  • HttpServletResponse response)
  • throws ServletException, IOException
  • PrintWriter out response.getWriter()
  • out.println("Hello World")
  • out.flush()

29
Cycle de vie d'une Servlet
Cours Java Avancée
  • Korteby Farouk

30
Cycle de vie d'une Servlet
  • Méthodes du cycle de vie
  • La classe javax.servlet.Servlet définit
  • les méthodes qui permettent de contrôler le
    cycle de vie d'une servlet
  • void init()
  • void service()
  • void destroy()
  • Elles sont héritées par la servlet et doivent
    être redéfinies

31
Cycle de vie d'une Servlet
  • import javax.servlet.
  • import javax.servlet.http.
  • public class SimpleServlet extends HttpServlet
  • public void init(ServletConfig c)
  • throws ServletException
  • public void doXXX(HttpServletRequest req,
  • HttpServletResponse res)
  • throws ServletException, IOException
  • public void destroy()

32
Cycle de vie d'une Servlet
  • void init()
  • une fois créée, la servlet est initialisée
    avec cette méthode elle n'est appelée qu'une
    seule fois par le serveur au chargement initial.
  • Similaire à un constructeur
  • on peut y placer (par exemple) des
  • connexions réseaux ou à une BD

33
Cycle de vie d'une Servlet
  • void service()
  • appelée automatiquement par le serveur à chaque
    requête cliente void
  • void destroy()
  • appelée qu'une seule fois quand la servlet est
    déchargée par le serveur et lorsque le
    serveur est arrêté.
  • on y place la fermeture de connexions réseaux
    ou BD (souvent allouées par init() )

34
Cycle de vie d'une Servlet
35
Servlets et concurrence
  • - Une seule servlet gère les requêtes de
    plusieurs clients Un thread est généré à chaque
    requête du client
  • conséquences les attributs de la servlet
  • sont partagés, les variables des méthodes
    sont locales
  • Pour des portions de code critique, utiliser
    synchronized

36
Traitement des données de formulaires
Cours Java Avancée
  • Korteby Farouk

37
Traitement des données de formulaires
  • Les formulaires HTML
  • Permettent aux utilisateurs de saisir des données
    dans une interface graphique dans le Navigateur
  • Mécanisme intégré pour envoyer des données au
    serveur WEB

38
Traitement des données de formulaires
  • ltFORMgt pour définir un formulaire
  • ltINPUTgt pour définir une interface
  • text, password, checkbox, radio,
  • submit, reset
  • ltTEXTAREAgt zone de texte sur plusieurs lignes
  • ltSELECTgt liste déroulante

39
Traitement des données de formulaires
  • Envoyer les données du formulaire
  • Attributs de la balise ltFORMgt
  • ACTION l'URL où envoyer les données
  • METHOD la méthode HTTP (GET / POST)
  • Les données sont envoyées quand l'utilisateur
    clique sur un bouton de type submit

40
Traitement des données de formulaires
  • Exemple de formulaire
  • ltFORM
  • METHOD"POST"
  • ACTION"http//host/servlet/demandeServlet"
  • gt
  • Nom
  • ltINPUT type"text" name"Nom" /gt
  • ltBRgt
  • ltINPUT type"submit" value"Envoyer" /gt
  • lt/FORMgt

41
Traitement des données de formulaires
  • Les méthodes GET et POST
  • GET les champs du formulaire sont ajoutés à
    l'URL de l'attribut ACTION sous une forme
  • nomvaleur
  • URL?nom1val1nom2val2...
  • POST les données sont passées dans le corps
  • du message HTTP
  • convient pour l'envoi de données binaires

42
Traitement des données de formulaires
  • Lire les données dans une servlet La méthode de
    HttpServletRequest
  • public String getParameter(String name)
  • Dans le formulaire
  • ltINPUT type"text" name"nom" /gt
  • Dans la méthode doXXX()
  • String n req.getParameter("nom")

43
Traitement des données de formulaires
  • public class ShowParameters extends HttpServlet
  • public void doGet(HttpServletRequest req,...)
  • out.println(req.getParameter(param1))
  • Enumeration paramNames req.getParameterNames()
  • String paramValues req.getParameterValues(par
    amNames)

44
Gestion de l'état avec cookies et sessions
Cours Java Avancée
  • Korteby Farouk

45
Gestion de l'état avec cookies et sessions
  • HTTP gère les paires requête/réponse
  • ouverture, requête, réponse, fermeture
  • HTTP protocole sans états
  • aucun historique des différentes requêtes
  • n'est conservé
  • les requêtes sont totalement indépendantes
  • les unes des autres

46
Gestion de l'état avec cookies et sessions
  • Une application WEB a besoin de savoir
  • quel utilisateur a émis la requête courante
  • les requêtes déjà émises par l'utilisateur
  • l'état général de l'application
  • nombre de visites, nombres de
    produits vendus,
  • Il faut rajouter à HTTP un mécanisme de
  • gestion des états

47
Gestion de l'état avec cookies et sessions
  • Qu'est ce qu'un cookie ?
  • Petit fragment d'information textuelle échangé
    entre le serveur WEB et le Navigateur
  • collection de paires nom/valeur
  • chargés dans la mémoire du Navigateur
  • les cookies permanents sont aussi
    sauvegardés dans un fichier texte sur le client
  • Ils font partie de l'en-tête HTTP

48
Gestion de l'état avec cookies et sessions
  • Qu'est ce qu'un cookie ?
  • Crées à l'origine par Netscape
  • maintenant RFC 2109
  • Utilisés couramment pour mémoriser les
    préférences de l'utilisateur ou même pour
    l'identifier

49
Gestion de l'état avec cookies et sessions
  • Anatomie d'un cookie
  • Partie Description
  • Name Identité du cookie
  • Value Valeur du cookie
  • Domain Nom du domaine qui l'a défini
  • Path Information sur le chemin
  • Max Age Temps d'expiration du cookie
  • Secure Vrai si cookie transmis avec SSL

50
Gestion de l'état avec cookies et sessions
  • Cookie et sécurité ?
  • Jamais interprété ou exécuté pas de virus
  • Un cookie est limité à 4KB et les navigateurs
  • se limitent à 300 cookies (20 par site) pas
    de
  • surcharge de disque
  • Bien pour rendre privées des données non
  • sensibles
  • nom, adresse, mais pas No CB !
  • mais ne constitue pas un traitement sérieux
  • de la sécurité

51
Gestion de l'état avec cookies et sessions
  • Depuis API 2.1, pris en charge par
  • javax.servlet.http.Cookie
  • Cette classe construit des cookies avec des
    paires nom/valeur
  • public Cookie( String name, String value)

52
Gestion de l'état avec cookies et sessions
  • Méthodes de Cookie
  • Pour les fixer des attributs supplémentaires
  • void setValue(String val)
  • définit la valeur du cookie
  • void setMaxAge(int expSec)
  • lage de la cookie en nombre de secondes
  • par défaut
  • 1 (expire quand on ferme le navigateur)
  • 0 supprime le cookie

53
Gestion de l'état avec cookies et sessions
  • Méthodes de Cookie (suite)
  • void setPath(String path)
  • définit le chemin
  • void setSecure(boolean flag)
  • true si SSL, false par défaut
  • void setDomain(String domaine)
  • définit le domaine

54
Gestion de l'état avec cookies et sessions
  • Envoi des cookies
  • Méthode addCookie() de la classe
    HttpServletResponse
  • public void doGet(HttpServletRequest req,
  • HttpServletResponse rep)
  • Cookie c new Cookie ("nom", "toto")
  • c.setMaxAge(365246060) // 1 an
  • rep.addCookie( c )
  • rep.setContentType("text/html")

55
Gestion de l'état avec cookies et sessions
  • Lecture des cookies
  • Le navigateur envoie automatiquement les cookies
    qui correspondent à domain et path
  • Une servlet peut récupérer les cookies envoyés
    précédemment au navigateur
  • méthode getCookies() de HttpServletRequest

56
Gestion de l'état avec cookies et sessions
  • Lecture des cookies
  • Cookie cookies request.getCookies()
  • String nom getCookieValue(cookies, "nom", "non
    trouvé")
  • ...
  • public static String getCookieValue( Cookie
    cookies,
  • String cookieName, String defaultValue)
  • for(int i0 i lt cookies.length i)
  • Cookie cookie cookiesi
  • if(cookieName.equals(cookie.getName()
    )
  • return(cookie.getValue())
  • return(defaultValue)

57
Gestion de l'état avec cookies et sessions
  • Les sessions
  • Une session peut se définir
  • une série d'interactions reliées entre un
    navigateur et un serveur WEB
  • englobe plusieurs requêtes HTTP sur une période
    donnée
  • Utilisées pour mémoriser les actions (requêtes
  • HTTP) d'un utilisateur unique au cours du
    temps
  • exple opérations bancaires

58
Gestion de l'état avec cookies et sessions
  • Techniques de mémorisation
  • Pour échanger les données d'identification de la
    session dans chaque requête
  • réécriture d'URL
  • champ de formulaire caché ("hidden")
  • cookies
  • utilisation des sessions avec les
    HttpSession

59
Gestion de l'état avec cookies et sessions
  • Réécriture d'URL Principe
  • ajouter dans la chaîne de requête de la servlet
    des informations supplémentaires identifiant la
    session
  • lta href"http//leo.inria.fr/servlet/foo?uiditey"
    gt
  • Acheterlt/agt
  • l'ID utilisateur est transmis en même temps que
    la requête il est accédé par chaque servlet
    mentionnée qui récupère les informations
    persistantes (BD, fichiers) à partir de cet ID

60
Gestion de l'état avec cookies et sessions
  • Réécriture d'URL
  • Limitations
  • données volumineuses,
  • caractères autorisés,
  • longueur URL,
  • données visibles (sécurité)

61
Gestion de l'état avec cookies et sessions
  • Champs de formulaires cachés
  • Principe
  • on cache les données de session dans des champs
    "hidden"
  • ltINPUT TYPE"HIDDEN" NAME"uid VALUEitey"gt
  • Limitations
  • idem la "réécriture d'URL" sauf pour la
  • sécurité (utilisation de POST)

62
Gestion de l'état avec cookies et sessions
  • L'interface HttpSession
  • Les objets HttpSession mémorisent les données de
    chaque utilisateur fonctionne comme une table de
    "hachage" stockée sur le serveur
  • A chaque ID de session est associé, via la table
    de hachage, l'ensemble des informations

63
Gestion de l'état avec cookies et sessions
  • Identification des sessions
  • 2 façons possibles d'échanger l'ID de session
  • par défaut les cookies (de session non
    permanents)
  • ajouter l'ID de session à l'URL (réécriture
    d'URL)
  • L'implémentation est dépendante du moteur de
    Servlets

64
Gestion de l'état avec cookies et sessions
  • Obtenir l'objet de session
  • 2 méthodes de HttpServletRequest
  • HttpSession getSession()
  • retourne la session courante, si elle
    n'existe
  • pas, elle est créée
  • HttpSession getSession(boolean create)
  • idem sauf que la session n'est créée que
    si
  • create true, sinon retourne null

65
Gestion de l'état avec cookies et sessions
  • Mémoriser et extraire les données
  • Une fois la session obtenue, on peut mémoriser et
    extraire les données grâce aux méthodes de
    HttpSession
  • void putValue(String name, Object Val)
  • Object getValue(String name)

66
Gestion de l'état avec cookies et sessions
  • Mémoriser et extraire les données
  • HttpSession session request.getSession()
  • session.putValue( "table", newArrayList())
  • ArrayList tab (ArrayList)session.getValue("table
    ")

67
Gestion de l'état avec cookies et sessions
  • Autres méthodes de HttpSession
  • boolean isNew()
  • retourne true si nouvelle session
  • void invalidate()
  • invalide la session et supprime les
    associations nom / valeur

68
Gestion de l'état avec cookies et sessions
  • Autres méthodes de HttpSession
  • Les moteurs de servlets gèrent un timeout de
    durée de vie des sessions
  • int getMaxInactiveInterval()
  • retourne l'intervalle maximal d'inactivité en
  • secondes
  • void setMaxInactiveInterval
  • définit l'intervalle maximal d'inactivité en
  • secondes

69
Gestion de l'état avec cookies et sessions
  • Autres méthodes de HttpRequest
  • String getRequestedSessionId()
  • retourne l'ID de session
  • boolean isRequestedSessionIdFromCookie()
  • retourne true si l'ID de session a été passé
  • dans un cookie
  • boolean isRequestedSessionIdFromURL()
  • retourne true si l'ID des session a été passé
  • dans l'URL

70
Gestion de l'état avec cookies et sessions
  • Utiliser HttpSession sans cookies
  • L'implémentation par défaut de HttpSession
    utilise les cookies
  • si les cookies ne sont pas autorisés par le
    navigateur, la mémorisation des sessions ne
    fonctionne pas
  • Autre solution la réécriture d'URL
  • ajouter l'ID de session à la fin de l'URL
  • la réécriture d'URL doit être activée sur
    le serveur

71
Gestion de l'état avec cookies et sessions
  • Réécriture d'URL
  • Méthodes de HttpServletRequest
  • String encodeURL(String url)
  • encode l'URL en ajoutant l'ID de session si les
  • cookies sont désactivés
  • String encodeRedirectURL(String url)
  • encode l'URL avant de rediriger le Navigateur

72
Introduction aux JSP
Cours Java Avancée
  • Korteby Farouk

73
Introduction aux JSP
  • JSP Java Server Page
  • La plupart des applications Web produisent des
    pages HTML dynamiquement en modifiant uniquement
    les champs de données et pas la structure de base
    de la page.
  • Les JSP sont la technologie la plus appropriée
  • pour ce type de contenu.

74
Introduction aux JSP
  • Une page JSP contient un modèle de document
    statique et des balises spécifiques pour inclure
    du texte ou exécuter une partie de la logique
    applicative.
  • Le contenu statique est servi comme du HTML
    normal.

75
Introduction aux JSP
  • Une JSP est un fichier texte ( .jsp ) contenant
    du
  • code HTML et des fragments de code Java
  • contenus dans des balises spécifiques,
    exécutés
  • sur le serveur WEB
  • Versions 1.0 et maintenant 1.2
  • En fait, le fichier JSP est traduit en servlet
    qui est
  • compilée, puis instanciée lors de son
    invocation
  • via une URL

76
Introduction aux JSP
77
Introduction aux JSP
  • Les balises JSP
  • 3 types
  • des directives instructions qui contrôlent le
    comportement du compilateur de pages
  • JSP, et qui sont donc évaluées avant la
  • compilation,
  • des éléments de scripts (scriptlets) blocs
  • dinstructions Java inclus dans la page
    JSP
  • entre des délimiteurs lt et gt.

78
Introduction aux JSP
  • Les balises JSP (suite)
  • des balises personnalisées (custom tags ou
  • custom actions)
  • elles sont définies par le programmeur et
    génèrent du contenu dynamique lorsque la page est
    demandée.

79
Introduction aux JSP
  • Un exemple simple de JSP
  • lthtmlgtltheadgtlttitlegtUn exemple de page
    JSPlt/titlegtlt/headgtltbodygt
  • lt!-- définit les informations globales a la page
    --gt
  • lt_at_page language"java" gt
  • lt!-- Déclare la variable c --gt
  • lt! char c 0 gt
  • lt!-- Scriplet (code java) gt
  • lt for(int i 0 i lt 26 i)
  • for(int j 0 j lt 26 j)
  • c (char)(0x41 (26 - i j)26)
  • gt
  • lt c gt
  • lt gt
  • ltbrgt
  • lt gt
  • lt/bodygtlt/htmlgt

80
Introduction aux JSP
81
Introduction aux JSP
  • Les scriptlets lt gt
  • Contient du code JAVA
  • tout code JAVA valide
  • Objet out pour produire de la sortie HTML,
  • objets request et response
  • Se transforme dans la méthode jspService() de la
    servlet
  • les variables sont locales à la méthode
  • les blocs de code s'insèrent dans la
    servlet

82
Introduction aux JSP
  • Les scriptlets exemple
  • lt
  • String noms "titi", "toto"
  • for(int i 0 i lt noms.length i)
  • out.println(nomsi)
  • gt

83
Introduction aux JSP
  • Les expressions lt gt
  • Pour évaluer une expression ou un objet Java et
    renvoyer sa valeur
  • retourne une version String de
    l'expression
  • raccourci pour lt out.println() gt
  • Se transforme en out.println() dans la méthode
    jspService() de la servlet

84
Introduction aux JSP
  • lt
  • String noms "titi", "toto"
  • for(int i 0 i lt noms.length i)
  • gt
  • Le nom lt i gt ième nom est
  • lt nomsi gt
  • lt
  • gt

85
Introduction aux JSP
  • Les déclarations lt! gt
  • Pour déclarer des méthodes à l'échelle de la page
    (méthodes de la servlet générée)
  • les méthodes ne sont exécutées que si elles
    sont appelées explicitement
  • on peut aussi déclarer des attributs
  • Se transforme en déclarations de champs et
    méthodes au niveau de la servlet

86
Introduction aux JSP
  • lt!
  • private int accessCount 0
  • private int incrementCount()
  • return accessCount
  • gt
  • ltH2gtNombre et liste des articleslt/H2gt
  • Nombre d'articles lt incrementCount() gt

87
Introduction aux JSP
  • Directives
  • lt_at_ directive attribut1"valeur"
  • attribut2"valeur"... gt
  • 2 directives possibles (jsp1.1)
  • page informations relatives à la page
  • include fichiers à inclure littéralement

88
Introduction aux JSP
  • Valeurs possibles
  • lt_at_ page language"java"
  • lt_at_ page import"java.util., java.net."
    gt
  • lt_at_ page contentType"text/plain" gt
  • lt_at_ page session"truefalse " gt
  • lt_at_ page errorPage"pathToErrorPage" gt
  • lt_at_ page isErrorPage"truefalse" gt
  • lt_at_ page

89
Introduction aux JSP
  • La directive lt_at_include gt
  • Valeurs possibles
  • lt_at_ include file"chemin relatif du
    fichier" gt
  • pour se référer au home dir du serveur Web
  • lt_at_ include file"/toto.html" gtInterprété
    littéralement, le fichier peut être
  • HTML, scripting elements, directives,
  • actions, ...
  • L'insertion se fait au moment de la traduction
  • de la page...

90
Introduction aux JSP
  • Variables prédéfinies
  • Ou "objets implicites", ils sont accessibles dans
  • les balises JSP
  • request le HttpServletRequest
  • response le HttpServletResponse
  • session le HttpSession
  • out flot de sortie (idem
    response.getWriter())
  • application le ServletContext (idem
  • getServletConfig().getContext() )
  • config, pageContext, page... peu utiles

91
Introduction aux JSP
  • Cookies et Sessions fonctionnent de la même
  • façon que dans l'API Servlet Cookie
  • lt
  • Cookie c new Cookie("Sport", "Foot")
  • response.addCookie(c)
  • gt

92
Introduction aux JSP
  • Gestion des sessions avec les JSP Sessions
  • toutes les pages JSP disposent
  • automatiquement d'un objet session
  • lt
  • String val (String)session.getValue("Sport")
  • gt

93
Balises JSP personnalisées
Cours Java Avancée
  • Korteby Farouk

94
Balises JSP personnalisées
  • La technologie JSP permet au programmeur de
  • définir leurs propres bibliothèques de
    balises ce
  • type de balises est remplacé par du contenu
  • dynamique lorsque la page est envoyée au
    client.
  • Le contenu dynamique est crée par un gestionnaire
    de balises, que le programmeur crée et distribue
    dans un fichier archive de Bibliothèque de
    balises.

95
Balises JSP personnalisées
  • Le programmeur définit la syntaxe pour chaque
    balise et implémente le comportement à effectuer
    pour chaque balise dans la classe de gestion des
    balises (tag handler class).
  • Les auteurs de pages peuvent ensuite importer et
  • utiliser les balises définies dans les
    bibliothèques
  • de balises comme s'ils utilisaient des
    balises
  • traditionnelles.

96
Balises JSP personnalisées
  • Les balises personnalisées
  • sont réutilisables
  • permettent de définir des services de haut
    niveau et sont portables
  • facilitent la maintenance d'une application
  • pas de répétition du code de pages en pages
  • Modification du code en un seul endroit

97
Balises JSP personnalisées
  • facilitent la lecture et la manipulation des
    pages
  • plus simples à lire que des bouts de scripts
  • fournissent un moyen simple pour utiliser la
    logique métier
  • permettent une séparation claire entre
    présentation des données et logique métier
  • maintenance plus simple
  • montre plus clairement l'utilité de chaque
    composant
  • permet aux programmeurs et auteurs de pages de
    travailler plus indépendamment

98
Balises JSP personnalisées
  • Les bibliothèques de balises standards sont des
    jeux de balises qui fournissent un jeu de
    fonctionnalités basiques pour les pages JSP
  • inclusion de ressources Web, chaînage de
    requête (request forwarding),
  • logique conditionnelle,
  • itérations sur des collections d'objets,
  • transformations XSLT,
  • internationalisation,
  • gestion des informations d'état,
  • formulaires HTML.

99
Balises JSP personnalisées
  • Certaines sociétés ont produit leurs propres
  • bibliothèques de balises, profondément
    intégrées
  • dans leurs outils de développement et J2EE.
  • D'autres organisations produisent des
  • bibliothèques de balises génériques pour les
  • applications J2EE.
  • Exemple Apache Taglibs (bibliothèque Open
  • source de balises personnalisées).

100
Balises JSP personnalisées
  • Les librairies standards fournissent souvent la
    plupart des fonctionnalités requises pour le
    développement de pages JSP et sont testées et
    optimisées par la communauté des développeurs.
  • Utiliser une librairie de balises standards de
    haute qualité permet ainsi de gagner un précieux
    temps en développement.

101
Règles de conception
Cours Java Avancée
  • Korteby Farouk

102
Règles de conception
  • Quand utiliser des servlets ?
  • Elles sont la plupart du temps utilisées pour
  • implémenter la logique de l'application
  • générer des données binaires
  • implémenter des services
  • Les servlets ne sont pas habituellement des
  • composants visuels, à l'exception de
    certaines qui génèrent du contenu binaire.
  • Elles sont surtout utilisées comme un service
  • d'accès aux informations de l'application.

103
Règles de conception
  • Une servlet peut ainsi rendre n'importe quel
  • service (application de modèles, sécurité,
  • personnalisation, contrôle de l'application)
    et
  • ensuite choisir un composant de présentation
  • (souvent une page JSP) pour lui transmettre
    la
  • requête et s'occuper de sa présentation.
  • Comme elle peut être assimilée à un service, un
  • filtre de servlets peut être assimilé à une
  • extension ou une personnalisation du service
  • fourni par la servlet.

104
Règles de conception
  • Les servlets sont la technologie de prédilection
  • pour implémenter un contrôleur sur le tiers
    Web, qui déterminera comment traiter une requête
    et choisira la prochaine vue à afficher.
  • Un contrôleur active les opérations d'une
  • application et prend des décisions, qui sont
  • essentiellement des tâches procédurales bien
  • adaptées à l'intégration dans le code d'une
  • servlet.

105
Règles de conception
  • Les pages JSP ne doivent pas être utilisées comme
    contrôleur car si l'on mélange les balises et le
    code du programme, elles deviennent difficiles à
    lire et à maintenir, particulièrement pour les
    concepteurs Web, qui ne sont pas des
    programmeurs.

106
Règles de conception
  • Les pages JSP sont habituellement utilisées pour
  • créer du contenu structuré ou des données
  • textuelles non-structurées.
  • Elles sont particulièrement adaptées lorsque la
  • valeur des données change entre les requêtes
  • mais que leur structuration ne change pas (ou
  • peu).

107
Règles de conception
  • Utiliser les JSP pour la présentation des données
  • Les vues pour visualiser les données d'une
  • application d'entreprise sont
    traditionnellement en HTML, XHTML et DHTML.
  • Les pages JSP sont utilisées lorsque le contenu
    est
  • partiellement statique, avec quelques
    éléments
  • remplis dynamiquement à l'exécution.

108
Règles de conception
  • Utiliser les JSP pour la
  • présentation des données (suite)
  • Une page JSP contient une partie fixe appelée
  • "template data" (à ne pas confondre avec les
  • mécanismes de modèles décrits par la suite).
  • Les balises personnalisées ou les éléments de
  • script peuvent être placés à divers endroits
    des
  • données statiques et sont substitués à
    l'exécution
  • par du contenu dynamique.

109
Règles de conception
  • Utiliser les JSP pour la
  • présentation des données (suite)
  • Les pages JSP ne peuvent pas produire de contenu
    binaire et ne sont pas très adaptées à la
  • production de contenu à grande variabilité ou
    à la direction de requêtes, on préférera
    utiliser des servlets dans ce cas.
  • Les pages JSP peuvent accéder facilement à la
  • logique métier d'une application, en incluant
    des
  • beans par exemple.

110
Règles de conception
  • Le patron de conception M-V-C
  • Le patron de conception (Design pattern)
  • Modèle-Vue-Contrôleur est recommandé car il
  • permet de créer des applications
    réutilisables, et
  • dajouter de nouveaux types de clients,
    processus
  • et vues facilement.
  • Le modèle de conception le plus simple a un seul
  • contrôleur qui reçoit les requêtes des
    navigateurs, les distribue dans lapplication et
    affiche les résultats.

111
Règles de conception
  • Le modèle MVC avec Servlet et JSP
  • Utilisation conjointe des servlets et JSP
  • JSP fournit la vue
  • les servlets contrôlent et dispatchent
  • les composants servent à accéder aux
    données du modèle

112
Résumé
Cours Java Avancée
  • Korteby Farouk

113
Résumé
  • Résumé (1/4)
  • Le serveur Web dune application J2EE rend
  • disponible les applications sur le Web
  • Les pages JSP et servlets sont des composants
  • Web qui succèdent aux anciennes technologies
  • côté serveur telles que les CGIs et qui
    assurent la
  • portabilité.

114
Résumé
  • Résumé (2/4)
  • Le conteneur Web fournit des services de haut
  • niveau aux composants Web en matière de
  • transactions,
  • accès aux données,
  • gestion des états,
  • sécurité et distribution.

115
Résumé
  • Résumé (3/4)
  • Le serveur Web dune application est une
    couche
  • de service neutre, habituellement conçu sur
    le
  • modèle MVC, qui simplifie la création
  • dapplications Web interactives.
  • Les servlets sont principalement utilisées pour
  • générer des données binaires et contrôler
  • lapplication (modèle Servlet Dispatcher)
  • Les pages JSP sont principalement utilisées
    pour
  • créer du contenu textuel et des références à
    des
  • données externes.

116
Résumé
  • Résumé (4/4)
  • Pour les JSP, lutilisation de bibliothèques de
    balises personnalisées améliore la qualité du
    code source et facilite la maintenance des
    applications J2EE.

117
Ateliers
Cours Java Avancée
  • Korteby Farouk

118
Ateliers
  • l'indispensable JDK de SUN Il contient un
    compilateur, un interpréteur, les classes de
    base, et d'autres outils.
  • Un Éditeur java NetBeans IDE 5.0
  • Des Neurones frenchs qui tournent

119
Ateliers
  • Exemple 1 une simple Servlet
  • public class GreetingServlet
  • extends HttpServlet

120
Ateliers
121
Ateliers
122
Ateliers
123
Ateliers
124
Ateliers
125
Ateliers
  • ltform action"GreetingServlet" method"POST"gt
  • First Name 
  • ltinput type"text" name"firstName" size"20"gt
  • ltbr /gt
  • Surname 
  • ltinput type"text" name"surname" size"20"gt
  • ltbr /gtltbr /gt
  • ltinput type"submit" value"Submit"gt
  • lt/formgt

126
Ateliers
127
Ateliers
128
Ateliers
129
Ateliers
130
Ateliers
131
Ateliers
132
Ateliers
  • protected void doPost(HttpServletRequest request, 
    HttpServletResponse response)throws ServletExcept
    ion, IOException   
  • String firstName  request.getParameter("firstNam
    e").toString()        
  • System.out.println("firstName  "  firstName)
  •         processRequest(request, response)   

133
Ateliers
134
Ateliers
135
Ateliers
136
Ateliers
  • Dans processRequest()
  • response.setContentType("text/htmlcharsetUTF-8")
  • PrintWriter out  response.getWriter()
  • String firstName  request.getParameter("firstName
    ").toString()
  • String surname  request.getParameter("surname").t
    oString()
  • out.println("lth1gtServlet GreetingServlet at "  
  • request.getContextPath ()  "lt/h1gt")
  • out.println("ltpgtWelcome "  firstName  " "  
  • surname  "lt/pgt")
  • out.close()

137
Ateliers
  • Exemple 2 une simple Page JSP
  • lt_at_ page language"Java" import"java.util." gt
  • ltH1 Align"center"gtTime is
  • lt new Date() gtlt/H1gt
  • lt for(int i1 ilt6 i) gt
  • ltHlt i gt align"center"gtHeading lt i gt
    lt/Hlt i gtgt
  • lt gt

138
Ateliers
  • Exemple 3 Get avec une Page JSP
  • Index.html
  • ltform method"GET" action"index.jsp"gt
  • Enter Social Security Number
  • ltinput type"text" name"ssn"/gt
  • Enter Bonus Multiplier ltinput type"text"
    name"multiplier"/gt
  • ltinput type"submit" value"Submit"/gt
  • ltinput type"reset"/gt
  • lt/formgt

139
Ateliers
  • Index.jsp
  • lt! String strMult, ssn gt
  • lt! Integer integerMult gt
  • lt! int multiplier0 gt
  • lt! double bonus gt
  • lt! double inputBonus gt
  • lt! public double calculateBonus(int multiplier,
    double bonus)
  • double calculatedBonus (multiplier
    bonus)
  • return calculatedBonus
  • gt

140
Ateliers
  • Index.jsp
  • lt
  • strMult request.getParameter("multiplier")
  • ssn request.getParameter("ssn")
  • integerMult new Integer(strMult)
  • multiplier integerMult.intValue()
  • inputBonus 100.00
  • bonus this.calculateBonus(multiplier,
    inputBonus)
  • gt
  • ltPgtSocial Security Number lt ssn gt ltPgt
  • ltPgtMultiplier lt multiplier gt ltPgt
  • ltPgtBonus Amount retrieved lt bonus gt ltPgt

141
Ateliers
142
Merci de votre Attention
Cours Java Avancée -Servlets JSP-
  • By Korteby Farouk

143
Pour informations Complémentaires vous pouvez
consultezhttp//java.developpez.com/cours/servl
ets/Tutorial J2EE les Servletshttp//java.sun
.com/docs/books/tutorial/le site officiel de SUN
Cours Java Avancée -Applets-
  • By Korteby Farouk
Write a Comment
User Comments (0)
About PowerShow.com