J2EE : Concept des Servlets Comprendre le concept des Servlets

Transcription

J2EE : Concept des Servlets Comprendre le concept des Servlets
ISI 1022 : Programmation Internet et Java
J2EE : Concept des Servlets
Programmation Internet et Java
Jean-Noël Sorenti. Année 2002/2003
Comprendre le concept des
Servlets de J2EE
ISI 1022 : Programmation Internet et Java
1
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : API Servlet, JSP et EJB
l
l
l
Programmation Internet et Java
L ’API J2EE comprends les packages suivants :
• javax.servlet, javax.servlet.http (gestion des servlets)
• javax.ejb
(gestion des ejbs)
• javax.servlet.jsp
(gestion des jsp)
J2SE Comprend les packages standards :
• java.lang, java.util, rmi, corba
Référence sur le Web :
• http://java.sun.com/j2ee/
• http://jakarta.apache.org/tomcat/ pour l’implémentation Tomcat
2
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Qu’est ce qu’une Servlet ?
• Classe java dont le rôle est de générer une réponse à une
requête.
• La Servlet est une classe java contenant une méthode
service() qui sera appelée par le serveur d’application en
cas de requête.
• Peux aussi contenir une méthode init() et destroy() qui
seront appelées respectivement au démarrage du serveur
(ou premier appel de la Servlet) et à son arrêt.
3
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Notre Servlet a un rôle à respecter :
• Doit contenir une méthode service(), init(), …; pour
cela, elle implémentera l’interface javax.servlet.Servlet
définie par J2EE :
• Interface javax.servlet.Servlet :
• Contiens les méthodes init(), destroy(), service(),
getServletConfig(), getServletInfo() à implémenter. Toute
classe implémentant cette interface sera donc dans l’obligation
d’implémenter ces fonctions.
4
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Implémentation indirecte de l’interface Servlet :
• Nos Servlets n’implémentent pas directement
l’interface Servet mais vont hériter de GenericServlet
ou HttpServlet (qui implémentent Servlet) ; Ceci
permettra d’hériter de fonctions de bases et propriétés
déjà implémentées :
• GenericServlet implémente javax.servlet.Servlet
• getServletName(), getServletContext(), …
• HttpServet hérite de GenericServlet
• service(), getLastModified(),…
5
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
GenericServlet :
• Contiens la méthode service() abstraite à être
implémentée.
• à On implémente la méthode service()
l
HttpServlet :
• La méthode service() est implémentée, elle dispatche
selon le type MIME de l’entête de la requête
l’exécution des méthodes doXXX : doGet, doPost,
doTrace
• à On implémente les méthodes doXXX ou on ré implémente
la méthode service().
6
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Les Servlets sont gérées par un serveur
d’application qui n’est autre qu’une JVM :
• Le client envoie une requête HTTP
• Le serveur récupère la requête comprenant l’information sur
la Servlet à lancer
• Construction d’un objet ‘request’ implémentant
ServletRequest qui représente la requête du Client.
• Construction d’un objet ‘response’ implémentant
ServletResponse qui représente la réponse.
• Si la Servlet n’est pas instanciée, on a instanciation puis
appel de la méthode init()
• Appel de la méthode service() en passant ‘request’ et
‘response’ en paramètres. Service() effectue les traitement et
fournit le résultat au client.
7
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Fonctionnement du Serveur d’application et Servlets
Requête
request
response
?
OUI? Appel de
service() en passant
request et response
Réponse
Servlet
Servlets
Client
Recherche de la bonne
servlet. Cette dernière est
t-elle déjà instanciée ?
NON ?
Instanciation,
appel init()
puis de
service()
service()
init()
Instanciation d ’ Objets de
classe implémentant les
interfaces HttpServletRequest
et HttpServletResponse. On
pourra donc les récupérer en
utilisant ces interfaces !
MaServlet
service()
init()
Déjà instanciées
Serveur HTTP/Application
8
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Attention : bien retenir que l’on a seulement une
seule instance de Servlet pour toutes les
requêtes !
MaServlet
Client 1
Client 1
Client 2
service()
init()
Un seul Objet
instancié pour toutes
les requêtes
utilisateurs.
MaServlet
service()
init()
9
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Une seule instance va impliquer un partage de
ressources entre plusieurs processus en cas
d’appel simultanés de la méthode service().
• Il faut gérer les problème de Concurrence
• Utiliser intelligemment les « synchronized » car peut
•
atténuer considérablement les performances.
Utiliser l’interface SingleThreadModel : Nous verrons
plus tard dans le cours qu’il y a une parade plus
complexe si on est coincé. On pourra implémenter
une interface SingleThreadModel.
10
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Récapitulatif sur les Servlets :
•
•
•
•
a) classe java héritant de javax.servlet.GenericServlet ou
javax.servlet.http.HttpServlet ou l’on peut définir (ou redéfinir)
les méthodes init(),service(),destroy(),doGet,doPost,…
b) instanciation dynamique unique puis appel de la méthode
init(). (au démarrage du Serveur ou à son premier appel.)
c) toutes les requêtes appellent la même méthode service(). La
méthode service peut donc être appelée simultanément par
plusieurs processus.
d) à l’arrêt du Serveur, on a un appel de la méthode destroy().
11
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
L’émission de requêtes vers le serveur
peut se faire sous forme d’URL :
protocole://host.domain[:port]/path[?param1=valeur1&param2=…]
protocole
host.domain
port :
/path
param1,…
dialogue instauré entre le client et serveur pour
communiquer ; http, https, ftp…
représente le nom du serveur DNS ou une
adresse IP. localhost = IP machine courante
dans le modèle sockets, le serveur est à
l’écoute sur un port. Le port par défaut est
80 (pour protocole HTTP de base).
chemin de la ressource à exploiter.
les paramètres peuvent êtres passés dans l’URL
12
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
Emission requêtes à l’aide d’un formulaire :
dans un fichier HTML :
<form action=‘’/path’’ method=‘’post’’>
<input type=‘’hidden’’ name=‘’param1’’ value=‘’val1’’ />
<input type=‘’text’’ name=‘’param2’’ value=‘’val2’’ />
<input type=‘’submit’’ value=‘’ok’’>
</form>
Pas besoin de repréciser dans l’action du formulaire le serveur et le
protocole (http://host.domain) si cette page HTML proviens du même
serveur et que l’on veut communiquer avec le même protocole.
13
method =‘’post’’ : déclanchera la méthode doGet ou doPost de HttpServlet.
hidden
: permet de passer des champs en champ caché (Une solution
pour passer l’ID de session)
submit
: permet de créer un bouton de validation
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Les Servlets et leur fonctionnement
l
La requête est généralement émise au Serveur
à l’aide du protocole HTTP.
• Protocole sans état
•
(connexion,émission,déconnexion)
La syntaxe du protocole HTTP est interprétable par
l’homme, comme nous pouvons le voir dans l’exemple
qui suit :
GET /simple.html HTTP/1.1
Requête
HTTP/1.1_200 OK
Content-Type:text/html
Content-Length:194
Date: Tue.06 Mar 2001 18:54:41 GMT
Server : Apache Tomcat/40-B1
Etag : ‘194-72637362000’
Réponse
<HTML>….
Contenu Réponse
14
Le protocole HTTP est sans état, ce qui signifie qu’entre 2 requêtes d’un même
utilisateur, HTTP ne nous donne pas de moyen intrinsèque pour effectuer de
lien. On a toujours une connexion au serveur, l’envoie de la requête puis une
déconnexion. C’est pour cela que l’on utilisera le système des cookies ou l’ID
dans l’URL pour pouvoir instaurer un mécanisme de Session ; ce dernier étant
géré automatiquement par J2EE.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Les Eléments de l’API Servelts
l
Programmation Internet et Java
ServletConfig :
• ServletConfig comporte des données propres à une
Servlet.
• peut contenir des informations configurables dans un
fichier de déploiement du serveur. (web.xml).
• est passé en paramètre à la méthode init() de la
Servlet.
• Une instance de ServletConfig par Servlet
15
Lors de la définition d’une Servlet dans une application Web, on définit la Servlet dans un fichier
(XML). On peux aussi définir des points d’entrées pour notre Servlets. Ces derniers seront
stockés dans le ServletConfig :
<web-app>
<servlet>
<servlet-name>HelloServlet</servlet-name>
<servlet-class>jweb.examples.HelloServlet</servlet-class>
<init-param>
<param-name>greeting</param-name>
<param-value>Hello</param-value>
</init-param>
</servlet>
</web-app>
On pourra en java écrire ceci :
public void init(ServletConfig cfg) {
}
String greeting = cfg. getInitParameter(‘greeting’);
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Les Eléments de l’API Servelts
l
Programmation Internet et Java
ServletContext:
• ServletContext comporte des données propres à une
application Web.
• peut contenir des informations configurables dans un
fichier de déploiement du serveur. (web.xml).
• Une instance de ServletContext par application Web
par machine Virtuelle Java ou Serveur.
16
Comme pour la Servlet, On peut définir des paramètres d’initialisations pour le
contexte (l’application Web).
<web-app>
<context-param>
<param-name>greeting</param-name>
<param-value>Hello</param-value>
</context-param>
…
</web-app>
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Les Eléments de l’API Servelts
l
Programmation Internet et Java
ServletRequest ou HttpServletRequest :
• ServletRequest comporte des données propres à une
requête utilisateur.
• L’instance ServletRequest est fourni par le serveur.
• Une instance ServletRequest
par requêtes. Quand le
cycle Requête - Réponse est terminé, l’instance meurt.
17
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Les Eléments de l’API Servelts
l
Programmation Internet et Java
ServletResponse ou HttpServletResponse :
• ServletRequest comporte des information et des
méthodes pour générer la réponse vers le client.
• L’instance ServletResponse est fourni par le serveur.
• Une instance ServletResponse par requêtes. Quand
le cycle Requête-Réponse est terminé, l’instance
meurt.
18
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
J2EE : Les Eléments de l’API Servelts
l
Programmation Internet et Java
HttpSession :
• HttpSession comporte des information et des
méthodes sur un utilisateur donné. Ces informations
restent persistante entre plusieurs requêtes.
• L’instance HttpSession est fourni par le Serveur.
• Une instance HttpSession par utilisateur. Quand la
session est considérée obsolète (fermée,perdue),
l’instance n’est plus disponible.
19
Nous allons étudier dans les prochains cours en détail le mécanisme des
Sessions sous J2EE. Il faut savoir que notre Serveur d’application possède la
fonctionnalité de nous fournir une Session par utilisateur. Ce qui sera intéressant
est que cette Session joue le rôle de conteneur, ce qui signifie que l’on pourra y
stoker des objets de n’importe quel type, ce qui signifie encore que l’on pourra
rendre persistantes des informations entre plusieurs requêtes d’un même
utilisateur.
Jean-Noël Sorenti – Année 2002/2003
ISI 1022 : Programmation Internet et Java
Programmation Internet et Java
J2EE : Eléments de bases de l’API Servlets
javax.servlet.Servlet
javax.servlet.http.HttpServletRequest
getMethod()
init()
getParameters()
service()
getSession()
destroy()
javax.servlet.http.HttpServletResponse
javax.servlet.GenericServlet
init()
getWriter() : java.io.PrintWriter
service() invoqué par une requête
destroy()
setContentType(String)
sendError()
javax.servlet.http.HttpServlet
javax.servlet.http.HttpSession
getMethod()
getParameters()
doGet() invoqué par requête GET
doPost invoqué par requête POST
…
getSession()
javax.servlet.ServletContext
getServerInfo()
getAttribute()
setAttributes()
MaServlet
Réimplémentation service()
Implémentation doGet()
implémentation doPost()
20
Jean-Noël Sorenti – Année 2002/2003