Les Servlets et JSP

Preview:

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

Citation preview

Les Servlets et JSPLes Servlets et JSP

Korteby Farouk

Cours Java Avancée

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

Les ServletsLes Servlets

Korteby Farouk

Cours Java Avancée

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

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

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

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)

Architecture WEB : principeArchitecture WEB : principe

Architecture ServletsArchitecture Servlets

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

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

Les classes de l'APILes classes de l'API

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

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() {…}}

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

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

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

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)

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() {…}{…}}}

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

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

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

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

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

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

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

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

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

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

Korteby Farouk

Cours Java Avancée

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

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() {…}}

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

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

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

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

Traitement des données de formulaires

Korteby Farouk

Cours Java Avancée

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

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

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

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>

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

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")

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

}}

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

Korteby Farouk

Cours Java Avancée

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

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

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

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

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

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é

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)

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

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

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

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

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

}}

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

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

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

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é)

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)

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

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

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

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)

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

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

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

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

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

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

Introduction aux JSPIntroduction aux JSP

Korteby Farouk

Cours Java Avancée

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.

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.

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

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

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.

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>

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

Introduction aux JSPIntroduction aux JSP

Les scriptlets : exemple

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

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

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

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

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

%>

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

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 …

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

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

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

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");%>

Balises JSP Balises JSP personnaliséespersonnalisées

Korteby Farouk

Cours Java Avancée

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.

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.

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

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

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.

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).

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.

Règles de conceptionRègles de conception

Korteby Farouk

Cours Java Avancée

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.

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.

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.

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.

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).

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.

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.

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.

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.

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

Résumé

Korteby Farouk

Cours Java Avancée

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é.

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.

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.

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.

AteliersAteliers

Korteby Farouk

Cours Java Avancée

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

AteliersAteliers

Exemple 1: une simple Servlet

public class GreetingServlet extends

HttpServlet {}

AteliersAteliers

AteliersAteliers

AteliersAteliers

AteliersAteliers

AteliersAteliers

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>

AteliersAteliers

AteliersAteliers

AteliersAteliers

AteliersAteliers

AteliersAteliers

AteliersAteliers

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

}

AteliersAteliers

AteliersAteliers

AteliersAteliers

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

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

<% } %>

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>

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

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>

AteliersAteliers

Merci de votre AttentionMerci de votre Attention

By Korteby Farouk

Cours Java Avancée -Servlets & 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-

Recommended