les servlets et jsp

143
Les Servlets et JSP Les Servlets et JSP Korteby Farouk Cours Java Avancée

Upload: korteby-farouk

Post on 27-Jan-2015

7.328 views

Category:

Technology


3 download

DESCRIPTION

Les ServletsCycle de vie d'une ServletTraitement des données de formulairesGestion de l'état avec cookies et sessionsIntroduction aux JSPLes balises JSP personnaliséesRègles de conception

TRANSCRIPT

Page 1: Les Servlets et JSP

Les Servlets et JSPLes Servlets et JSP

Korteby Farouk

Cours Java Avancée

Page 2: Les Servlets et JSP

Les Servlets et JSPLes Servlets et JSP

• Les ServletsLes Servlets• Cycle de vie d'une ServletCycle de vie d'une Servlet• Traitement des données de Traitement des données de

formulairesformulaires• Gestion de l'état avec cookies et Gestion de l'état avec cookies et

sessionssessions• Introduction aux JSPIntroduction aux JSP• Les balises JSP personnaliséesLes balises JSP personnalisées• Règles de conceptionRègles de conception• RésumeRésume

Page 3: Les Servlets et JSP

Les ServletsLes Servlets

Korteby Farouk

Cours Java Avancée

Page 4: Les Servlets et JSP

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

Page 5: Les Servlets et JSP

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

Page 6: Les Servlets et JSP

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

Page 7: Les Servlets et JSP

Les Servlets :comment ça marche ?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)

Page 8: Les Servlets et JSP

Architecture WEB : principeArchitecture WEB : principe

Page 9: Les Servlets et JSP

Architecture ServletsArchitecture Servlets

Page 10: Les Servlets et JSP

API Servlet

• Les classes et les interfaces pour les Servlets sont définies dans 2 packages :

– javax.servletpackage générique indépendant des

protocoles– javax.servlet.httpspécifique à HTTP permet la gestion des

sessions

• Où les trouver : JSWDK– java.sun.com/products/servlets

Page 11: Les Servlets et JSP

Les classes de l'APILes 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

Page 12: Les Servlets et JSP

Les classes de l'APILes classes de l'API

Page 13: Les Servlets et JSP

La classe La classe GenericServletGenericServlet

javax.servlet.GenericServlet– définit une servlet indépendante desprotocoles– une classe abstraite qui fournit uneimplémentation de base de l'interface

Servlet

La méthode service() est le principal pointd'entrée

– c'est une méthode abstraite qui doit êtreimplémentée par une classe dérivée

Page 14: Les Servlets et JSP

Structure de base d'une servletStructure 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() {…}}

Page 15: Les Servlets et JSP

Communiquer avec le clientCommuniquer 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

Page 16: Les Servlets et JSP

Développer des HttpServletDévelopper des HttpServlet

javax.servlet.http.HttpServlet

– dérive de GenericServlet et fournit une implémentation spécifique à HTTP de l'interface Servlet

Page 17: Les Servlets et JSP

La méthode service() de HttpServletLa 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 HttpServlet:doXXX()

Page 18: Les Servlets et JSP

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)

Page 19: Les Servlets et JSP

Squelette d’une servlet HttpSquelette d’une servlet Http

import import javax.servlet.*;javax.servlet.*;import import javax.servlet.http.*;javax.servlet.http.*;

public class SimpleServlet public class SimpleServlet extends HttpServlet extends HttpServlet {{

public void public void init(ServletConfig c)init(ServletConfig c)throws ServletException {…}throws ServletException {…}

public void public void doGet(HttpServletRequest req,doGet(HttpServletRequest req,HttpServletResponse res)HttpServletResponse res)throws ServletException, IOException {…}throws ServletException, IOException {…}

public void public void destroy() destroy() {…}{…}public String public String getServletInfo() getServletInfo() {…}{…}}}

Page 20: Les Servlets et JSP

Développer des HttpServletDévelopper des HttpServlet

javax.servlet.http.HttpServlet

– dérive de GenericServlet et fournit une implémentation spécifique à HTTP de l'interface Servlet

Page 21: Les Servlets et JSP

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

Page 22: Les Servlets et JSP

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

Page 23: Les Servlets et JSP

Les méthodes de HttpServletRequestLes 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

Page 24: Les Servlets et JSP

Les méthodes de HttpServletRequestLes 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

Page 25: Les Servlets et JSP

Répondre au serveurRé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

Page 26: Les Servlets et JSP

Les méthodes de HttpServletResponseLes 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

Page 27: Les Servlets et JSP

Les méthodes de HttpServletResponseLes 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

Page 28: Les Servlets et JSP

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

Page 29: Les Servlets et JSP

Cycle de vie d'une ServletCycle de vie d'une Servlet

Korteby Farouk

Cours Java Avancée

Page 30: Les Servlets et JSP

Cycle de vie d'une ServletCycle 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

Page 31: Les Servlets et JSP

Cycle de vie d'une ServletCycle 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() {…}}

Page 32: Les Servlets et JSP

Cycle de vie d'une ServletCycle 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

Page 33: Les Servlets et JSP

Cycle de vie d'une ServletCycle 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() )

Page 34: Les Servlets et JSP

Cycle de vie d'une ServletCycle de vie d'une Servlet

Page 35: Les Servlets et JSP

Servlets et concurrenceServlets 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

Page 36: Les Servlets et JSP

Traitement des données de formulaires

Korteby Farouk

Cours Java Avancée

Page 37: Les Servlets et JSP

Traitement des données de formulairesTraitement des données de formulaires

Les formulaires HTML:Les formulaires HTML:

• Permettent aux utilisateurs de Permettent aux utilisateurs de saisir des données dans une saisir des données dans une interface graphique dans le interface graphique dans le NavigateurNavigateur

• Mécanisme intégré pour envoyer Mécanisme intégré pour envoyer des données au serveur WEBdes données au serveur WEB

Page 38: Les Servlets et JSP

Traitement des données de formulairesTraitement des données de formulaires

<FORM> : pour définir un formulaire <INPUT> : pour définir une interface : – text, password, checkbox, radio, submit, reset <TEXTAREA> : zone de texte sur plusieurs

lignes <SELECT> : liste déroulante

Page 39: Les Servlets et JSP

Traitement des données de formulairesTraitement des données de formulaires

Envoyer les données du formulaire Attributs de la balise <FORM>

– 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

Page 40: Les Servlets et JSP

Traitement des données de formulairesTraitement des données de formulaires

Exemple de formulaire<FORM METHOD="POST"

ACTION="http://host/servlet/demandeServlet"

>Nom :<INPUT type="text" name="Nom" /><BR><INPUT type="submit" value="Envoyer" /></FORM>

Page 41: Les Servlets et JSP

Traitement des données de formulairesTraitement 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

nom=valeur URL?nom1=val1&nom2=val2&...

POST : les données sont passées dans le corps

du message HTTP – convient pour l'envoi de données

binaires

Page 42: Les Servlets et JSP

Traitement des données de formulairesTraitement 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 :

<INPUT type="text" name="nom" />

Dans la méthode doXXX() : String n = req.getParameter("nom")

Page 43: Les Servlets et JSP

Traitement des données de formulairesTraitement 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(paramNames);

}}

Page 44: Les Servlets et JSP

Gestion de l'état avec Gestion de l'état avec cookies et sessionscookies et sessions

Korteby Farouk

Cours Java Avancée

Page 45: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 46: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 47: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 48: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 49: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion de l'état avec cookies et sessions

Anatomie d'un cookie

Partie DescriptionName Identité du cookieValue Valeur du cookieDomain Nom du domaine qui l'a définiPath Information sur le cheminMax Age Temps d'expiration du cookieSecure Vrai si cookie transmis avec

SSL

Page 50: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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é

Page 51: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion de l'état avec cookies et sessions

Depuis API 2.1, pris en charge par :

javax.servlet.http.CookieCette classe construit des cookies avec

des paires nom/valeur :

public Cookie( String name, String value)

Page 52: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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) l’age de la cookie en nombre de secondes par défaut

–1 (expire quand on ferme le navigateur) 0 supprime le cookie

Page 53: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 54: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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(365*24*60*60); // 1 an rep.addCookie( c ); rep.setContentType("text/html"); … }

Page 55: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 56: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion de l'état avec cookies et sessions

Lecture des cookiesLecture des cookies

Cookie [ ] cookies = request.getCookies();Cookie [ ] cookies = request.getCookies();

String nom = getCookieValue(cookies, "nom", "non String nom = getCookieValue(cookies, "nom", "non trouvé");trouvé");

......

public static String getCookieValue( Cookie [] cookies,public static String getCookieValue( Cookie [] cookies,

String cookieName, String defaultValue) {String cookieName, String defaultValue) {

for(int i=0; i < cookies.length; i++) {for(int i=0; i < cookies.length; i++) {

Cookie cookie = cookies[i];Cookie cookie = cookies[i];

if(cookieName.equals(cookie.getName())if(cookieName.equals(cookie.getName())

return(cookie.getValue());return(cookie.getValue());

}}

return(defaultValue);return(defaultValue);

}}

Page 57: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 58: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 59: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

<a href="http://leo.inria.fr/servlet/foo?

uid=itey">Acheter</a>

– 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

Page 60: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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é)

Page 61: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion de l'état avec cookies et sessions

Champs de formulaires cachés Principe :– on cache les données de session dans

des champs "hidden" :

<INPUT TYPE="HIDDEN" NAME="uid“ VALUE=itey">

Limitations : – idem la "réécriture d'URL" sauf pour

la sécurité (utilisation de POST)

Page 62: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 63: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 64: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 65: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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)

Page 66: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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");

Page 67: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 68: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 69: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 70: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 71: Les Servlets et JSP

Gestion de l'état avec cookies et sessionsGestion 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

Page 72: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Korteby Farouk

Cours Java Avancée

Page 73: Les Servlets et JSP

Introduction aux JSPIntroduction 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.

Page 74: Les Servlets et JSP

Introduction aux JSPIntroduction 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.

Page 75: Les Servlets et JSP

Introduction aux JSPIntroduction 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

Page 76: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Page 77: Les Servlets et JSP

Introduction aux JSPIntroduction 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 d’instructions Java inclus dans la

page JSP entre des délimiteurs <% et %>.

Page 78: Les Servlets et JSP

Introduction aux JSPIntroduction 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.

Page 79: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Un exemple simple de JSP<html><head><title>Un exemple de page

JSP</title></head><body><!-- définit les informations globales a la page --><%@page language="java" %><!-- Déclare la variable c --><%! char c = 0; %><!-- Scriplet (code java) %><% for(int i = 0; i < 26; i++){ for(int j = 0; j < 26; j++){ c = (char)(0x41 + (26 - i + j)%26);%><%= c %><% } %><br><% } %></body></html>

Page 80: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Page 81: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Les scriptlets : <% … %> 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

Page 82: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Les scriptlets : exemple

<% String[ ] noms = {"titi", "toto"}; for(int i = 0; i < noms.length; i++){ out.println(noms[i]); }%>

Page 83: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Les expressions : <%= … %>

Pour évaluer une expression ou un objet Java et renvoyer sa valeur :

– retourne une version String de l'expression

– raccourci pour <% out.println(…); %> Se transforme en out.println(…) dans la

méthode jspService(…) de la servlet

Page 84: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

<% String[ ] noms = {"titi", "toto"}; for(int i = 0; i < noms.length; i++){%>Le nom <%= i %> ième nom est<%= noms[i] %><% }%>

Page 85: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Les déclarations : <%! … %> 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

Page 86: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

<%! private int accessCount = 0; private int incrementCount() {

return accessCount++;}

%> … <H2>Nombre et liste des articles</H2> Nombre d'articles : <%= incrementCount()

%>

Page 87: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Directives <%@ directive attribut1="valeur" attribut2="valeur"... %> 2 directives possibles (jsp1.1) : – page : informations relatives à la

page – include : fichiers à inclure

littéralement

Page 88: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Valeurs possibles : – <%@ page language="java"– <%@ page import="java.util.*,

java.net.*" %>– <%@ page contentType="text/plain"

%>– <%@ page session="true|false " %>– <%@ page

errorPage="pathToErrorPage" %>– <%@ page isErrorPage="true|false"

%>– <%@ page …

Page 89: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

La directive : <%@include … %> Valeurs possibles : – <%@ include file="chemin relatif du

fichier" %> – pour se référer au home dir du

serveur Web : <%@ include file="/toto.html"

%>Interprété littéralement, le fichier peut être

– HTML, scripting elements, directives, actions, ... L'insertion se fait au moment de la

traduction de la page...

Page 90: Les Servlets et JSP

Introduction aux JSPIntroduction 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

Page 91: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Cookies et Sessions fonctionnent de la même

façon que dans l'API Servlet Cookie :

<% Cookie c = new Cookie("Sport",

"Foot"); response.addCookie(c);%>

Page 92: Les Servlets et JSP

Introduction aux JSPIntroduction aux JSP

Gestion des sessions avec les JSP Sessions :

– toutes les pages JSP disposent automatiquement d'un objet session

<% String val =

(String)session.getValue("Sport");%>

Page 93: Les Servlets et JSP

Balises JSP Balises JSP personnaliséespersonnalisées

Korteby Farouk

Cours Java Avancée

Page 94: Les Servlets et JSP

Balises JSP personnaliséesBalises 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.

Page 95: Les Servlets et JSP

Balises JSP personnaliséesBalises 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.

Page 96: Les Servlets et JSP

Balises JSP personnaliséesBalises 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

Page 97: Les Servlets et JSP

Balises JSP personnaliséesBalises 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

Page 98: Les Servlets et JSP

Balises JSP personnaliséesBalises 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.

Page 99: Les Servlets et JSP

Balises JSP personnaliséesBalises 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).

Page 100: Les Servlets et JSP

Balises JSP personnaliséesBalises 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.

Page 101: Les Servlets et JSP

Règles de conceptionRègles de conception

Korteby Farouk

Cours Java Avancée

Page 102: Les Servlets et JSP

Règles de conceptionRè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.

Page 103: Les Servlets et JSP

Règles de conceptionRè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.

Page 104: Les Servlets et JSP

Règles de conceptionRè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.

Page 105: Les Servlets et JSP

Règles de conceptionRè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.

Page 106: Les Servlets et JSP

Règles de conceptionRè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).

Page 107: Les Servlets et JSP

Règles de conceptionRè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.

Page 108: Les Servlets et JSP

Règles de conceptionRègles de conception

Utiliser les JSP pour lapré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.

Page 109: Les Servlets et JSP

Règles de conceptionRègles de conception

Utiliser les JSP pour lapré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.

Page 110: Les Servlets et JSP

Règles de conceptionRè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 d’ajouter 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 l’application et affiche les résultats.

Page 111: Les Servlets et JSP

Règles de conceptionRè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

Page 112: Les Servlets et JSP

Résumé

Korteby Farouk

Cours Java Avancée

Page 113: Les Servlets et JSP

Résumé

Résumé (1/4) Le serveur Web d’une 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é.

Page 114: Les Servlets et JSP

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.

Page 115: Les Servlets et JSP

Résumé

Résumé (3/4) Le serveur Web d’une application est une

couche de service neutre, habituellement conçu sur

le modèle MVC, qui simplifie la création d’applications Web interactives. Les servlets sont principalement utilisées pour générer des données binaires et contrôler l’application (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.

Page 116: Les Servlets et JSP

Résumé

Résumé (4/4) Pour les JSP, l’utilisation de bibliothèques

de balises personnalisées améliore la qualité du code source et facilite la maintenance des applications J2EE.

Page 117: Les Servlets et JSP

AteliersAteliers

Korteby Farouk

Cours Java Avancée

Page 118: Les Servlets et JSP

AteliersAteliers

• 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

Page 119: Les Servlets et JSP

AteliersAteliers

Exemple 1: une simple Servlet

public class GreetingServlet extends

HttpServlet {}

Page 120: Les Servlets et JSP

AteliersAteliers

Page 121: Les Servlets et JSP

AteliersAteliers

Page 122: Les Servlets et JSP

AteliersAteliers

Page 123: Les Servlets et JSP

AteliersAteliers

Page 124: Les Servlets et JSP

AteliersAteliers

Page 125: Les Servlets et JSP

AteliersAteliers

<form action="GreetingServlet" method="POST">

First Name: <input type="text" name="firstName" size

="20"><br />Surname: <input type="text" name="surname" size=

"20"><br /><br />

<input type="submit" value="Submit">

</form>

Page 126: Les Servlets et JSP

AteliersAteliers

Page 127: Les Servlets et JSP

AteliersAteliers

Page 128: Les Servlets et JSP

AteliersAteliers

Page 129: Les Servlets et JSP

AteliersAteliers

Page 130: Les Servlets et JSP

AteliersAteliers

Page 131: Les Servlets et JSP

AteliersAteliers

Page 132: Les Servlets et JSP

AteliersAteliers

protected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {  

String firstName = request.getParameter("firstName").toString();        

System.out.println("firstName = " + firstName);

        processRequest(request, response);   

}

Page 133: Les Servlets et JSP

AteliersAteliers

Page 134: Les Servlets et JSP

AteliersAteliers

Page 135: Les Servlets et JSP

AteliersAteliers

Page 136: Les Servlets et JSP

AteliersAteliers

• Dans processRequest(…)Dans processRequest(…)

response.setContentType("text/html;charset=UTF-8");response.setContentType("text/html;charset=UTF-8");PrintWriter out = response.getWriter();PrintWriter out = response.getWriter();String firstName = request.getParameter("firstName").toString firstName = request.getParameter("firstName").to

String();String();String surname = request.getParameter("surname").toStrString surname = request.getParameter("surname").toStr

ing();ing();

out.println("<h1>Servlet GreetingServlet at " + out.println("<h1>Servlet GreetingServlet at " + request.getContextPath () + "</h1>");request.getContextPath () + "</h1>");

out.println("<p>Welcome " + firstName + " " + out.println("<p>Welcome " + firstName + " " + surname + "</p>");surname + "</p>");

out.close();out.close();

Page 137: Les Servlets et JSP

AteliersAteliers

Exemple 2: une simple Page JSP

<%@ page language="Java" import="java.util.*" %>

<H1 Align="center">Time is : <%= new Date() %></H1>

<% for(int i=1; i<=6; i++) { %>

<H<%= i %> align="center">Heading <%= i %> </H<%= i %>>

<% } %>

Page 138: Les Servlets et JSP

AteliersAteliers

Exemple 3: Get avec une Page JSP

• Index.htmlIndex.html<form method="GET" action="index.jsp">

Enter Social Security Number: <input type="text" name="ssn"/>

Enter Bonus Multiplier: <input type="text" name="multiplier"/>

<input type="submit" value="Submit"/> <input type="reset"/>

</form>

Page 139: Les Servlets et JSP

AteliersAteliers

• Index.jsp

<%! String strMult, ssn; %><%! Integer integerMult; %><%! int multiplier=0; %><%! double bonus; %><%! double inputBonus; %>

<%! public double calculateBonus(int multiplier, double bonus) {

double calculatedBonus = (multiplier * bonus);

return calculatedBonus; }%>

Page 140: Les Servlets et JSP

AteliersAteliers

• Index.jsp<% strMult =

request.getParameter("multiplier"); ssn = request.getParameter("ssn"); integerMult = new Integer(strMult); multiplier = integerMult.intValue(); inputBonus = 100.00; bonus = this.calculateBonus(multiplier,

inputBonus);%>

<P>Social Security Number : <%= ssn %> <P>

<P>Multiplier : <%= multiplier %> <P><P>Bonus Amount retrieved: <%= bonus %>

<P>

Page 141: Les Servlets et JSP

AteliersAteliers

Page 142: Les Servlets et JSP

Merci de votre AttentionMerci de votre Attention

By Korteby Farouk

Cours Java Avancée -Servlets & JSP-

Page 143: Les Servlets et JSP

Pour informations Complémentaires vous Pour informations Complémentaires vous pouvez consultez:pouvez consultez:

http://java.developpez.com/cours/servlets/Tutorial J2EE : les Servlets

http://java.sun.com/docs/books/tutorial/le site officiel de SUN

By Korteby Farouk

Cours Java Avancée -Applets-