les servlets et jsp
Post on 27-Jan-2015
7.321 Views
Preview:
DESCRIPTION
TRANSCRIPT
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-
top related