les servlets java les bases de la génération dynamique html en java sébastien limet etgérard...

32
Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006- 2007

Upload: charlemagne-pouget

Post on 04-Apr-2015

104 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Les servlets Java

Les bases de la génération dynamique HTML en Java

Sébastien Limet etGérard Rozsavolgyi

Licence Professionnelle 2006-2007

Page 2: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 2

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…

Page 3: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 3

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.

Page 4: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 4

J2EE – Les servlets

Architecture Servlet

Page 5: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 5

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.

Page 6: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 6

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

Page 7: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 7

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

Page 8: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 8

J2EE – Les servlets

Servlet : un premier exemplepackage 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(); }}

Page 9: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 9

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

Page 10: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 10

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

Page 11: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 11

J2EE – Les servlets

Application Web

Se définit par un contexte: un répertoire

particulier sur le serveur web

Page 12: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 12

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

Page 13: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 13

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</display-name> <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></web-app>

Page 14: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 14

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…

Page 15: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 15

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

Page 16: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 16

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

Page 17: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 17

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

Page 18: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 18

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

Page 19: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 19

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

Page 20: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 20

J2EE – Les servlets

Profils

Une méthode serviceprotected void service (HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

Une méthode doGetprotected void doGet (HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

Une méthode doPostprotected void doPost (HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException

Page 21: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 21

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

Page 22: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 22

J2EE – Les servlets

doGet() Reçoit et traite les requêtes de type GET.

Demande d’une URL (page HTML, Servlet,…) http://localhost/maPage.html http://localhost:8080/maPage.html

Éventuellement avec un passage de paramètres. 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");}

Page 23: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 23

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>

Page 24: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 24

J2EE – Les servlets

Exemple de méthodepublic 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=1234Vous obtiendrez le message : Vous avez passé les valeurs ABCDEF et 1234

Page 25: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 25

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

Page 26: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 26

J2EE – Les servlets

Utiliser d’autres ressources Web

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

Exemples

Page 27: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 27

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

Page 28: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 28

J2EE – Les servlets

Communication des servlets

Page 29: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 29

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

Page 30: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 30

J2EE – Les servlets

Maintenir un état Pourquoi faire ?

Il faut pouvoir distinguer les clients dans le flux de requêtes, c’est-à-dire les sessions

Comment faire ? 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"); ...

Page 31: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 31

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

Page 32: Les servlets Java Les bases de la génération dynamique HTML en Java Sébastien Limet etGérard Rozsavolgyi Licence Professionnelle 2006-2007

Licence Professionnelle Réseaux Télécoms « Internet/extranet » 32

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 …