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

Post on 04-Apr-2015

104 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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…

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.

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

J2EE – Les servlets

Architecture Servlet

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.

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

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

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

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

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

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

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

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>

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…

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

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

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

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

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

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

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

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");}

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>

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

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

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

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

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

J2EE – Les servlets

Communication des servlets

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

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

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

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 …

top related