Les servlets Java

Download Report

Transcript Les servlets Java

Les servlets Java
Les bases de la génération
dynamique HTML en Java
Sébastien Limet etGérard Rozsavolgyi
Licence Professionnelle 2006-2007
J2EE – Les servlets
Les servlets



Une première approche de la couche Web
Dans le monde Java on trouve deux possibilités
pour générer du HTML dynamique :
 les servlets.
  les Java Server Pages (JSP).
Pas ce qui a de plus attirant dans J2EE,
mais il faut en passer par là pour comprendre
les JSP et ce qui s’ensuit…
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
2
J2EE – Les servlets
Qu’est-ce que c’est, une
servlet ?



C’est une classe Java qui répond aux requêtes d’un
navigateur Web
Permet de faire rapidement et simplement des
pages Web dynamiques (genre PHP, mais en Java
et on est obligé de générer l’intégralité de la page)
Comme tous les composants J2EE, c’est le serveur
d’applications qui prend en charge tout ce qui est
autorisations, authentifications, sécurité,
transactions, cycles de vie, montée en charge, etc.
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
3
J2EE – Les servlets
Architecture Servlet
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
4
J2EE – Les servlets
Plus précisément…




Extensions puissantes, modulaires, fiables, sécurisées et
portables, les servlets sont des classes java utilisées pour
générer du HTML dynamique côté serveur.
La classe utilisée hérite de javax.servlet.http.HttpServlet.
La servlet est associée à une URL lors du déploiement.
Le plus souvent une instance de la Servlet est partagée
entre les utilisateurs d’une même application.
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
5
J2EE – Les servlets
La servlet, c’est bien pratique

Elle est écrite en Java, et bénéficie de toute l’API Java
(manipulation d’URL, multithreading, manipulation d’images,
compression de données, sérialisation d’objets, connection aux
bases de données, RMI,...)




Elle n’est chargée en mémoire qu’une seule fois , ce
qui permet une bonne montée en puissance
Elle ne consomme qu’un processus
Elle permet un partage des ressources
Elle peut émuler des sessions et contourner les
limitations de HTTP (Protocole « amnésique »)
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
6
J2EE – Les servlets
… et ca a bien des avantages


Efficacité et robustesse : essentiellement parce
que les servlets sont éxécutés dans le cadre de
threads, plus “légers”, plus aisés à manipuler, avec
des capacités de communications bien meilleures
que les processus classiques
Sécurité : de part la robustesse du langage Java
(typage fort, pas de manipulations de pointeurs,
d’exceptions,
Garbage
Collector,
Security
Manager…)
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
7
J2EE – Les servlets
Servlet : un premier exemple
package exemples;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class UnExempleDeServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Ceci est le texte de la barre de titre</title>");
out.println("</head>");
out.println("<body>");
out.println("Bien le bonjour, m'sieurs-dames !");
out.println("</body>");
out.println("</html>");
out.close();
}
}
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
8
J2EE – Les servlets
Explications…




C’est une classe Java, qui étend la classe
HttpServlet
Une série de méthodes doXxx permettent de répondre
aux requêtes HTTP (Xxx est soit Get soit Post)
Dans ces méthodes, on écrit du HTML dans un
Writer fournit par l’objet HttpServletResponse.
A étudier : le javadoc de HttpServlet,
HttpServletRequest et HttpServletResponse
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
9
J2EE – Les servlets
C’est tout ?




Hélas non!
Une servlet s'exécute au sein d'une
application web J2EE
Il faut la déployer dans une application
Les étapes du déploiement:




Ecrire l’objet (ici, notre servlet)
Ecrire le descripteur de déploiement
Packager
Déployer
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
10
J2EE – Les servlets
Application Web

Se définit par un contexte: un répertoire
particulier sur le serveur web
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
11
J2EE – Les servlets
Application Web


Un war (Web Application Archive) est un ensemble de
ressources web (jsp, images, modèles...) configurées de
manière à pouvoir être déployées sur tout serveur web
supportant les servlets.
Le répertoire WEB-INF contient les classes, les
librairies, les descripteurs de déploiement (web.xml ,
jonas-web.xml…) permettent de configurer l’application
et doivent être construits selon des DTD normalisées).
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
12
J2EE – Les servlets
Un descripteur de déploiement
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app"-//Sun Microsystems, Inc.//DTD Web Application
2.3//EN"
PUBLIC "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<servlet>
<servlet-name>MaServletAMoi</servlet-name>
<display-name>Nom facultatif de ma servlet à moi</displayname>
<description>Ceci est un exemple basique de
servlet</description>
<servlet-class>exemples.UnExempleDeServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MaServletAMoi</servlet-name>
<url-pattern>/servlet/hello</url-pattern>
</servlet-mapping>
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
</web-app>
13
J2EE – Les servlets
Explications…

Une servlet, appelée MaServletAMoi, prend
pour classe de base
exemples.UnExempleDeServlet.class


Cette servlet, une fois déployée, sera
appelée en tapant
« http://monserveur:8080/…/hello » (sous
Tomcat)
A faire : fabriquer soi-même son petit
descripteur de déploiement…
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
14
J2EE – Les servlets
Développement d'une servlet






Avoir conscience du cycle de vie
Écrire une méthode de service
Utiliser d’autres ressources Web
Partager de l’information
Maintenir un état
« Finaliser » proprement une servlet
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
15
J2EE – Les servlets
Création de servlets



Pour créer des servlets, il faut étendre la classe
HttpServlet. Les servlets Java n’ont pas de
méthode main().
Cycle de vie, un peu semblable à celui d’une
Applet
Chaque fois qu’un serveur reçoit une requête
pointant sur une servlet, il fait appel à la méthode
service() de la servlet concernée, qui redirige vers
la méthode appropriée (doGet, do Post, etc.)
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
16
J2EE – Les servlets
Packages
Deux packages constituent l’architecture servlet
 javax.servlet : comporte les interfaces génériques et les
classes implémentées et étendues par toutes les
servlets.
 javax.servlet.http : contient les classes qui sont
étendues lorsqu’on crée des servlets spécifiques
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
17
J2EE – Les servlets
Avoir conscience du cycle de
vie

Lors du premier appel :



La classe de la servlet est chargée et instanciée
La méthode init est appelée
A chaque appel, y compris le premier, la méthode
de service correspondante est appelée


En général doGet() ou/et doPost()
On peut aussi surcharger service()
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
18
J2EE – Les servlets
L’interface javax.servlet.Servlet


Elle fournit le cadre pour toutes les servlets.
Elle définit cinq méthodes. Les trois les plus importantes
sont les suivantes :
 init(), qui initialise une servlet.
 destroy(), qui assure le nettoyage.
 service(), qui reçoit les requêtes du client et y répond
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
19
J2EE – Les servlets
Profils
 Une
méthode service
protected void service (HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
 Une
méthode doGet
protected void doGet (HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
 Une
méthode doPost
protected void doPost (HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
20
J2EE – Les servlets
Écrire une méthode de service

Ce sont les méthodes appelées sur action de
l’utilisateur, qui doivent être surchargées : doGet,
doDelete, doOptions, doPost, doPut,
doTrace

Obtenir des informations à partir des requêtes
 Au travers de l’interface HttpServletRequest qui
représente la requête
Construire les réponses
 Au travers de l’interface HttpServletResponse,
qui représente la réponse

Licence Professionnelle Réseaux Télécoms « Internet/extranet »
21
J2EE – Les servlets
doGet()

Reçoit et traite les requêtes de type GET.
 Demande d’une URL (page HTML, Servlet,…)



Éventuellement avec un passage de paramètres.



http://localhost/maPage.html
http://localhost:8080/maPage.html
http://localhost/maPage.html?nom=Paul&age=12
Limité en taille (2Ko).
On peut lire les paramètres du GET à partir du
HttpServletRequest :

http://localhost/maPage?nom=Dupont
public void doGet(
HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
String nom = req.getParameter("nom");
}
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
22
J2EE – Les servlets
doPost()

Reçoit et traite les requêtes de type POST.



Demande d’une URL (Servlet,…)
Envoi de données d’un formulaire.
Pas de limite de taille.
<form method="POST" action=”/reponse”>
<input type="text" name="username" size="25">
<br>
<input type="submit" value="Submit">
<input type="reset" value="Reset">
</form>
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
23
J2EE – Les servlets
Exemple de méthode
public class QuiSertARienServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><body>");
out.println("Bien le bonjour, m'sieurs-dames !");
String param1 = request.getParameter("valeur1");
String param2 = request.getParameter("valeur2");
out.println("Vous avez passé les valeurs: " + param1 + " et " + param2);
out.println("</body></html>");
}
}
Si vous tapez quelque chose du genre :
http://monserveur/…/maservlet?valeur1=ABCDEF&valeur2=1234
Vous obtiendrez le message : Vous avez passé les valeurs ABCDEF et
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
1234
24
J2EE – Les servlets
Utiliser d’autres ressources
Web





Il s’agit d’utiliser un autre composant soit directement soit
indirectement. Par exemple, une servlet peut implémenter
l’affichage d’une bannière générique, utilisée par toutes les
autres servlets
Deux possibilités : inclure le résultat, ou transmettre la requête
à une autre ressource
Dans les deux cas, obtenir d’abord un RequestDispatcher par
la méthode getRequestDispatcher() sur le ServletContext
Puis inclure le contenu d’autres ressources dans la réponse :
méthode include()
Ou transférer le contrôle à un autre composant Web : méthode
forward()
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
25
J2EE – Les servlets
Utiliser d’autres ressources
Web

Exemples
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// On peut commencer avant …
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/banniere");
if (dispatcher != null) {
dispatcher.include(request, response);
}
// On peut continuer après…
}
public void doGet(HttpServletRequest request, HttpServletResponse response) {
throws ServletException, IOException {
RequestDispatcher dispatcher =
getServletContext().getRequestDispatcher("/autre_servlet");
if (dispatcher != null) {
dispatcher.forward(request, response);
}
// Attention : pas de out.println() dans ce cas !
}
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
26
J2EE – Les servlets
Communication des servlets

Avec le client:


Les paramètres => communication à sens unique
Au sein de l'application

A l'intérieur de la servlet, gestion des clients:
HttpSession

Entre servlets lors d'une requete
ServletRequest

Dans le contexte global ServletContext
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
27
J2EE – Les servlets
Communication des servlets
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
28
J2EE – Les servlets
Partager de l’information

Portée des objets
 Différentes portées différentes existent. Le partage
d’information se fait par appel aux méthodes
[get|set]Attribute de chaque classe représentant la
portée





Request : javax.servlet.ServletRequest
Web context : javax.servlet.ServletContext
Session : javax.servlet.http.HttpSession
Pour partager de l’information entre les appels, utiliser
l’interface session
A étudier : le javadoc des classes de portée
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
29
J2EE – Les servlets
Maintenir un état

Pourquoi faire ?


Comment faire ?


Il faut pouvoir distinguer les clients dans le flux de requêtes, c’est-à-dire les
sessions
Les sessions sont représentées par l’objet HttpSession, fourni par la
méthode getSession
Associer des attributs à une session


Par les méthodes [get|set]Attribute
Exemple :
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
throws ServletException, IOException {
HttpSession session = request.getSession();
Attribut monAttribut =
(Attribut)session.getAttribute("nom_attribut");
...
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
30
J2EE – Les servlets
Maintenir un état

Gestion des sessions


Le serveur Web garde les informations de sessions jusqu’à
ce que :
 La méthode invalidate() soit appelée
 La session tombe en timeout, dont la valeur est spécifiée
soit dans le descripteur de déploiement, soit au travers des
méthodes [get|set]MaxInactiveInterval
Le tracking des sessions


Deux méthodes :
 Par les cookies
 Par l’enrichissement de l’URL
Les deux méthodes sont entièrement gérées par le
conteneur
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
31
J2EE – Les servlets
« Finaliser » proprement une
servlet

Surcharger la méthode destroy et libérer
toutes les ressources utilisées




Fermer les connexions aux bases de données
Fermer les fichiers
Terminer les traitements asynchrones
…
Licence Professionnelle Réseaux Télécoms « Internet/extranet »
32