Title: Les Servlets et JSP
1Les Servlets et JSP
Cours Java Avancée
2Les 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
3Les Servlets
Cours Java Avancée
4Les 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
5Les 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
6Les 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
7Les 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)
8Architecture WEB principe
9Architecture Servlets
10API 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
11Les 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
12Les classes de l'API
13La 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
14Structure 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()
-
15Communiquer 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
16Développer des HttpServlet
- javax.servlet.http.HttpServlet
- dérive de GenericServlet et fournit une
implémentation spécifique à HTTP de l'interface
Servlet
17La 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()
18Mé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)
19Squelette 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()
-
20Développer des HttpServlet
- javax.servlet.http.HttpServlet
- dérive de GenericServlet et fournit une
implémentation spécifique à HTTP de l'interface
Servlet
21Structure 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
-
-
22Lire 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
23Les 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
24Les 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
25Ré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
26Les 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
27Les 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
28Un 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()
-
-
29Cycle de vie d'une Servlet
Cours Java Avancée
30Cycle 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
31Cycle 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()
32Cycle 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
33Cycle 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() )
34Cycle de vie d'une Servlet
35Servlets 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
36Traitement des données de formulaires
Cours Java Avancée
37Traitement 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
38Traitement 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
39Traitement 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
40Traitement 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
41Traitement 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
42Traitement 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")
43Traitement 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) -
44Gestion de l'état avec cookies et sessions
Cours Java Avancée
45Gestion 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
46Gestion 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
47Gestion 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
48Gestion 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
49Gestion 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
50Gestion 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é
51Gestion 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)
52Gestion 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
53Gestion 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
54Gestion 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")
-
55Gestion 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
56Gestion 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)
-
57Gestion 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
58Gestion 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
59Gestion 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
60Gestion 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é)
61Gestion 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)
62Gestion 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
63Gestion 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
64Gestion 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
65Gestion 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)
66Gestion 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
")
67Gestion 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
68Gestion 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
69Gestion 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
70Gestion 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
71Gestion 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
72Introduction aux JSP
Cours Java Avancée
73Introduction 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.
74Introduction 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.
75Introduction 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
76Introduction aux JSP
77Introduction 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.
78Introduction 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.
79Introduction 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
80Introduction aux JSP
81Introduction 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
82Introduction aux JSP
- Les scriptlets exemple
- lt
- String noms "titi", "toto"
-
- for(int i 0 i lt noms.length i)
- out.println(nomsi)
-
- gt
83Introduction 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
84Introduction 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
85Introduction 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
86Introduction 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
87Introduction 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
88Introduction 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
89Introduction 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...
90Introduction 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
91Introduction 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
92Introduction 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
93Balises JSP personnalisées
Cours Java Avancée
94Balises 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.
95Balises 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.
96Balises 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
97Balises 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
98Balises 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.
99Balises 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).
100Balises 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.
101Règles de conception
Cours Java Avancée
102Rè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.
103Rè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.
104Rè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.
105Rè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.
106Rè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).
107Rè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.
108Rè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.
109Rè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.
110Rè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.
111Rè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
112Résumé
Cours Java Avancée
113Ré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é.
114Ré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.
115Ré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.
116Ré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.
117Ateliers
Cours Java Avancée
118Ateliers
- 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
119Ateliers
- Exemple 1 une simple Servlet
- public class GreetingServlet
- extends HttpServlet
120Ateliers
121Ateliers
122Ateliers
123Ateliers
124Ateliers
125Ateliers
- 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
126Ateliers
127Ateliers
128Ateliers
129Ateliers
130Ateliers
131Ateliers
132Ateliers
- 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)
133Ateliers
134Ateliers
135Ateliers
136Ateliers
- 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()
137Ateliers
- 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
-
138Ateliers
- 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
139Ateliers
- 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
140Ateliers
- 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
141Ateliers
142Merci de votre Attention
Cours Java Avancée -Servlets JSP-
143Pour 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-