Applications WEB à base de Servlets

Transcription

Applications WEB à base de Servlets
Introduction – Applications Web
Applications WEB
à base de Servlets
Computer 1
Computer 2
2. request
processing
Vania Marangozova-Martin
Web client
Web server
[email protected]
1.
3. Web
response
request
Communication system
ibd.forge.imag.fr
V.Marangozova-Martin
Côté serveur
Le serveur peut servir des demandes de documents
statiques ou alors générer des pages à la volée
" 
! 
2
CGI = Common Gateway Interface
! 
! 
IBD
Fournit une interface standard entre le serveur web et les
programmes de génération de contenu web
Programmes de traitement/génération côté serveur
Utilité des pages web construites dynamiquement
" 
Le contenu peut dépendre des données envoyées par le client
# 
" 
" 
Exemples: resultats de moteurs de recherche, commerce
électronique et gestion des commandes
Les données évoluent
# 
Exemples: les news
La page web utilise des données de sources externes
# 
Examples: magasin en ligne qui affiche les prix des articles, les prix
étant dans la BD de gestion de stock
V.Marangozova-Martin
IBD
3
V.Marangozova-Martin
IBD
4
Exemple simple de programme CGI
Problèmes avec CGI
!  Pour
" 
#!/usr/bin/perl -wT
print "Content-type: text/html\n\n";
print "<html><head><title>Hello World</title></head>\n";
print "<body>\n";
print "<h2>Hello, world!</h2>\n";
print "</body></html>\n";
" 
!  Si
N requêtes demandent à exécuter le
même programme CGI
" 
V.Marangozova-Martin
IBD
5
Alternatives à CGI
V.Marangozova-Martin
! 
! 
pool de processus qui vont servir plusieurs
requêtes
" 
" 
6
Efficacité
" 
propriétaires aux serveurs web
! 
" 
! 
" 
7
Les servlets héritent de la portabilité de Java
Peuvent s’exécuter donc sur différents serveurs web (ex. Apache Tomcat,
IBM’s WebSphere Application Server, BEA WebLogic Application Server,
etc.)
Avantages
" 
IBD
Contrairement à CGI, chaque requête HTTP est traitée par un thread (dans
la JVM) et non par un process
Pour N requêtes sur le même traitement, N threads mais une seule copie
du code
Portabilité
" 
plug-ins, modules,…
servlets
V.Marangozova-Martin
IBD
Le servlets sont des programmes Java qui s’exécutent sur un serveur
" 
!  SCGI
!  Mécanismes
N copies du programme sont chargées en
mémoire
Les Servlets
!  FastCGI
" 
chaque requête HTTP
nouveau processus
coût de création et en mémoire
Gestion des sessions utilisateur
Gestion des connexions à la BD
V.Marangozova-Martin
IBD
8
Servlet dans Java API (2)
Servlet dans Java API
!  http://docs.oracle.com/javaee/7/api/
Servlet Server
GenericServlet subclass
request
response
service ( )
“service” method is the GenericServlet’s entry point
Implemented by subclass
V.Marangozova-Martin
IBD
9
Un servlet HTTP
javax.servlet.http.HTTPServlet
V.Marangozova-Martin
IBD
10
Cycle de vie d’un servlet
A typical servlet life cycle
time
HttpServlet subclass
HTTP (i.e. web) and Servlet server
init
GET request
response
doGet ( )
service
service
service
service
service
service
service ( )
POST request
response
service
doPost ( )
service
“doGet” method is the HttpServlet’s entry point for GET requests
destroy
“doPost” method is the HttpServlet’s entry point for POST requests
thread 1
Implemented by subclass
V.Marangozova-Martin
IBD
11
V.Marangozova-Martin
thread 2
thread 3
IBD
12
Cycle de vie (2)
javax.servlet.Servlet
!  Pour
" 
" 
3
" 
! 
2
# 
IBD
13
Cycle de vie (3)
!  Méthode
" 
" 
# 
" 
" 
IBD
!  Génération
<HTML>
<HEAD>
<TITLE>
Hello World
</TITLE>
</HEAD>
destroy
<BODY>
<BIG>
p.ex mise à jour
Hello World
Doit prendre en compte le fait que des exécutions de
service peuvent être en cours
Doit libérer les ressources allouées dans init
apelée une seule fois
V.Marangozova-Martin
14
d’une page web simple
Utilisée quand le servlet doit être désactivé
# 
" 
V.Marangozova-Martin
plusiurs threads qui l’exécutent
devrait être implémentée de manière sécurisée (thread-safe)
!  Méthode
" 
qui contient des paramètres et une référence vers
ServletContext
Exemple (1)
service
appelée pour chaque requête
Peut être appelée de manière concurrente
# 
init(ServletConfig config)
appelée qu’une seule fois
"  initialise et sauvagarde l’objet ServletConfig
" 
1
V.Marangozova-Martin
initialiser un servlet, le serveur de servlets
charge la classe
crée une instance avec un constructeur sans
arguments
appelle la méthode init(ServletConfig config)
IBD
</BIG>
</BODY>
</HTML>
15
V.Marangozova-Martin
IBD
16
Exemple (2)
Exemple 2 : Formulaire HTML
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
res.setContentType(“text/html”);
PrintWriter out = res.getWriter();
out.println(“<HTML>”);
out.println(“<HEAD> <TITLE> Hello World </TITLE> </HEAD>”);
out.println(“<BODY> <BIG> Hello World </BIG> </BODY>”);
out.println(“</HTML>”);
out.close();
}
}
V.Marangozova-Martin
IBD
17
V.Marangozova-Martin
18
Récupération
d’information des requêtes
Le source HTML
<HTML>
! 
Les requêtes implementent l’interface
ServletRequest
! 
Fournit des méthodes pour accéder à de l’information,
comme
<HEAD>
<TITLE>
Introductions
</TITLE>
</HEAD>
" 
<BODY>
<FORM METHOD=GET ACTION="servlet/HelloWorldServlet" >
If you don't mind me asking, what is your name?
<INPUT TYPE=TEXT NAME="name">
<P>
<INPUT TYPE=SUBMIT>
</ FORM>
</BODY>
" 
" 
returns the name and version of the protocol the request uses
String getRemoteAddr():
# 
19
returns the value of a request parameter as a String, or null if the
parameter does not exist
String getProtocol():
# 
" 
IBD
String getParameter(String name):
# 
</HTML>
V.Marangozova-Martin
IBD
returns the Internet Protocol (IP) address of the client that sent the
request
etc.
V.Marangozova-Martin
IBD
20
Example 3
A simple HTTP Servlet handling a form
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
! 
! 
public class HelloWorldServlet extends HttpServlet {
! 
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
public class BookInfoServlet extends HttpServlet {
res.setContentType(“text/html”);
PrintWriter out = res.getWriter();
String name = req.getParameter(“name”);
out.println(“<HTML>”);
out.println(“<HEAD> <TITLE> Hello,” + name + “</TITLE></HEAD>”);
out.println(“<BODY>”);
out.println(“Hello, ” + name);
out.println(“</BODY>”);
out.println(“</HTML>”);
out.close();
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
...
String bookId = req.getParameter("bookId");
if (bookId != null) {
// Retrieve information about that book
...
}
...
}
...
}
}
A customer wishes to get information about a book.
He calls BookInfoServlet and includes the identifier of the book in
his request
For example: http://host:port/servlets/BookInfoServlet?bookId=1234
}
V.Marangozova-Martin
IBD
21
V.Marangozova-Martin
IBD
Authentication
L’authentication en général (2)
!  Objectif
! 
" 
" 
Gérer l’accès aux ressources web
Différencier les droits des utilisateurs
# 
! 
ex. Seulement les abonnés au Monde peuvent lire les articles
complets
! 
La première fois que le client contacte un serveur, le
serveur répond qu’il a besoin d’authentifier l’utilisateur
Quand le navigateur reçoit cette réponse, il ouvre une
fenêtre de dialogue (name+password)
L’utilisateur renseigne les informations demandées, le
navigateur renvoie la requête
" 
!  Principes
" 
" 
! 
Les serveurs HTTP ont la fonctionnalité
d’authentification
Les détails de mise en place dépendent du serveur
V.Marangozova-Martin
IBD
! 
23
22
En y attachant les informations name+password
Si le serveur accepte les informations fournies, il
effectue la requête
Sinon, il refuse l’accès à la ressource
V.Marangozova-Martin
IBD
24
Deployer les servlets avec des droits
(integré)
Servlets et authentication
!  L’authentification
" 
# 
" 
des servlets
peut reposer sur de fonctionnalités integrées
https://tomcat.apache.org/tomcat-7.0-doc/realmhowto.html#Configuring_a_Realm
ou être implémentée de manière applicative
V.Marangozova-Martin
IBD
25
Fonctions disponibles (integré)
V.Marangozova-Martin
IBD
26
Authentification programmée
String userName = request.getParameter("txtUserName");
String password = request.getParameter("txtPassword");
out.println("getRemoteUser?.." +
request.getRemoteUser()+"<br>");
…
request.login(userName, password);
…
//do some work
…
request.logout();
V.Marangozova-Martin
IBD
27
V.Marangozova-Martin
IBD
28
Sessions à base de nom d’utilisateur
! 
! 
Session = se rappeler de l’utilisateur lors des échanges
avec un serveur web
! 
" 
l’utilisateur ajoute des produits dans son panier
le panier contient les produits lors du passage de la commande
V.Marangozova-Martin
IBD
29
V.Marangozova-Martin
IBD
30
Sessions à base de cookies
Sessions à base de nom d’utilisateur (3)
! 
Ajouter au panier au sein d’un servlet
String name = req.getRemoteUser();
if (name == null) {
// Explain that the server administrator should
// protect this resource
} else {
String[] items = req.getParameterValues("item");
if (items != null) {
for (int i = 0; i < items.length; i++) {
addItemToCart(name, items[i]);
}
}
}
peut être utilisé dans des traitements qui suivent
Exemple
" 
Exemple:
" 
Un servlet peut authentifier et retenir le nom d’un
utilisateur
" 
! 
Sessions à base de nom d’utilisateur (2)
Exemple:
" 
Un autre servlet peut récuperer les produits et passer à la
commande
String name = req.getRemoteUser();
if (name == null) {
// Explain that the server administrator should protect
// this page
} else {
String[] items = getItemsFromCart(name);
...
}
V.Marangozova-Martin
IBD
31
V.Marangozova-Martin
IBD
32
Sessions à base de cookies
! 
! 
Servlet API fournit la classe javax.servlet.http.Cookie
! 
Récupération de cookie
public Cookie[ ] HttpServletRequest.getCookies()
public void HttpServletResponse.addCookie(Cookie
cookie)
Cookie[ ] cookies = req.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
String name = cookies[i].getName();
String value = cookies[i].getValue();
}
}
Les cookies sont envoyés avec des entêtes HTTP
" 
! 
Création de cookie :
Cookie cookie = new Cookie("ID", "123");
res.addCookie(cookie);
public Cookie(String name, String value)
Un servlet peut envoyer un cookie au client
" 
! 
! 
Cookie() constructor
" 
! 
Sessions à base de cookies (2)
ils doivent être rajoutés à la réponse en premier
Un standard (RFC) définit que les navigateurs doivent accepter
" 
" 
" 
20 cookies par site,
300 par utilisateur
la taille d’un cookie au moins 4096 bytes.
V.Marangozova-Martin
IBD
33
References
This lecture is extensively based on:
! 
S. Bodoff. Java Servlet Technology.
http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/Servlets.html
! 
M. Boger. Java in Distributed Systems: Concurrency, Distribution and
Persistence. Wiley, 2001.
! 
M. Hall. Servlets and Java ServerPages: A Tutorial. http://www.apl.jhu.edu/
~hall/java/Servlet-Tutorial/
! 
J. Hunter, W. Crawford. Java Servlet Programming. O’Reilly, 1998.
! 
S. Zeiger. Servlet Essentials.
http://www.novocode.com/doc/servlet-essentials/
V.Marangozova-Martin
IBD
35
V.Marangozova-Martin
IBD
34

Documents pareils

Aucun titre de diapositive - Jean-Loup Guillaume website

Aucun titre de diapositive - Jean-Loup Guillaume website Gestion d'un certain nombre de requêtes Destruction de la Servlet et libération des ressources

Plus en détail

Développement Web

Développement Web "http://java.sun.com/dtd/web-app 2 3.dtd"> bonjour HelloWorld bonjour Plus en détail