Servlet - Mohamed Quafafou

publicité
Applications Web (Java)
Mohamed Quafafou
4A – Polytech'Marseille
[email protected]
1
Servlets [
]
Bases – Exemples
2
Java Servlets
 Java Servlet est une extension générique de serveur qui
signifie qu’une classe java peut-être télécharger
dynamiquement pour étendre les fonctionnalités d’un
serveur.
 Les Servlets sont utilisées par les serveurs web et sont
exécutés dans la Java Virtual Machine (JVM) dans le
serveur.
 A l’inverse des applets qui ne nécessitent par de support
java dans un navigateur web.
 A l’inverse des CGI, les servlets n’utilisent pas de
multiple processus qui traitent des requêtes séparément.
 Les servlets peuvent être traitées par différents threads
au sein du même processus. Les servlets sont aussi
portable et indépendant des plateformes.
Java Servlets
 Qu’est ce qu’une servlet ?
 Servlets sont des composants coté serveur qui fournissent un
mécanisme puissant pour le développement de programmes
coté serveur.
 Les servlets fournissent des méthodes basées sur les
composants et indépendant des plateformes pour construire des
applications web sans hériter des limitations des performances
des programmes CGI.
 A l’inverse des mécanismes des serveur propriétaire (Netscape
Server API, modules Apaches), les servlets sont serveur et
plateforme indépendant. Ce ci vous laisse la liberté de choisir
votre serveurs, les plateformes et les outils.
Java Servlets
 En utilisant les servlets,
 les développeurs web peuvent crée rapidement et efficacement
des applications (coté serveur) qui peuvent exécuter n’importe
quelle servlet supportée par le serveur web.
 Les servlets s’exécutent entièrement au sein de le web
virtuel machine. Comme les servlets s’exécutent du coté
serveur alors elles ne vérifient pas la compatibilité avec
le navigateur.
 Les servlets peuvent accéder à toute la famille d’API Java
incluant l’API JDBC (dédiée aux bases de données).
 Les servlets peuvent aussi accéder à une libraire HTTP et
profiter de la maturité du langage Java incluant la
portabilité, performance, réutilisation, etc.
Java Servlets
 Aujoud’hui les servlets sont populaires pour la
construction d’applications web.
 Les conteneurs (3-tiers) de servlets sont disponible
(Apache Web Server, Microsoft IIS, etc.).
 Les conteneurs de servlets sont souvent les composants
de serveurs web et d’application tels que les serveurs
d’application, BEA, WebLogic, IBM WebSphere, Sun Java
System Web Server, Sun Java System Application Server,
etc.
 Une servlet HTTP est typiquement utilisée pour :
 Fournir un contenu dynamique en récupérant par exemple les
résultats d’une requête base de données en les retournant au
client.
 Traite et/ou sauvegarde les données soumises par le HTML
 Gèrer les informations sur l’état, par exemple, l’achat en ligne où
il faut gérer des requêtes concurrentes concernant différents
utilisateurs.
Squelette de Servlets
 Le squelette d’une servlet est le suivant
 les packages javax.servlet et javax.servlet.http offrent les
interfaces et les classes nécessaires pour programmer avec les
servlets
 les servlets servent généralement à étendre la classe
‘HttpSevlet’ et surchage les méthodes doGet et doPost
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class <nom servlet> extends HttpServlet {
Public void doGet (HttpServlet request, HttpResponse response) throws
ServletException, IOException {
// code pour la logique métier
// utiliser l’objet ‘request’ pour lire les requêtes du client
// Utiliser l’objet ‘response’ envoyer le retour au client
} // fermer le doGet
} // fermer le programme
Methodes des Servlets
 Une servlet générique contient les cinq méthodes suivantes:
 init()
public void init(ServletConfig config) throws
ServletException
 La méthode init() est appelée uniquement une fois par le conteneur
de servlet pendant toute la vie de la servlet. La method init() a pour
parameter l’objet ServletConfig qui contient les paramètres
d’initialisation et la configuration de la servlet et lancer
ServletException si une exception arrive.
 service()
public void service(ServletRequest req, ServletResponse
res) throws ServletException, IOException
 Une fois la servlet commence à recevoir les requêtes, la méthode
service() est appelée par le conteneur pour répondre. Pour cela la
servlet utilise les deux objets suivants :
javax.servlet.ServletRequest et javax.servlet.ServletResponse
Methodes des Servlets
 Une servlet générique contient les cinq méthodes suivantes:
 Les paramètres de la méthode service() sont les objets
ServletRequest qui contient la requête du client et l’objet
ServletResponse qui compte à lui contient la réponse de la
servlet. La méthode services lance les exceptions ServletException
et IOExceptions.
 getServletConfig()
public ServletConfig getServletConfig()
 Cette méthode contient les parameters d’initialisation et de
démarrage de la servlet. Elle retourne l’objet ConfigServlet. Cette
objet est ensuite passé à la méthode init(). Lorsque cette interface
est implémentée alors elle stock l’objet ServletConfig afin de
retourner. Ceci est effectué à l’aide une classe générique qui
implémente cette interface.
Methodes des Servlets
 Une servlet générique contient les cinq méthodes suivantes:
 getServletInfo()
public String getServletInfo()
 Les informations concernant la servlet sont retournées par cette
méthode, par exemple, la version, l’auteur, etc. Cette méthode
retourne une chaine de caractère sous forme de texte clair (plain
text).
 destroy()
public void destroy()
 Cette méthode est appelée lorsqu’on souhaite fermée la servlet.
Ainsi, avant de supprimer l’instance de la servlet du service, le
conteneur de servlet appel la méthode destroy().
Cycle de vie
 Le cycle de vie d’une servlet est le suivant (quatre
étapes):
Exemple
 But : illuster le cycle de vie d’une servlet
 Exemple: init(), doGet(), destroy
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class servlet_lifecycle extends HttpServlet
{ int i;
public void init() throws ServletException { i = 0;
// initialisation de i }
// incrémenter la valeur de i dans la méthode de doGet
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException
{ response.setContentType("text/html");
PrintWriter out = response.getWriter();
if (i==0) { out.println("<html>"); out.println("<head>");
out.println("<title> Cycle de vie d'une servlet</title>");
out.println("</head>"); out.println("<body>");
out.println("<h1>la valeur de i est initialisée par la méthode init</h1>"+ "<h1>"+ i
+ "</h1>"); out.println("</body>"); out.println("</html>"); }
Exemple
 But : illuster le cycle de vie d’une servlet
 Exemple: init(), doGet(), destroy
i = i + 1;
if (i==10) { out.println("<html>"); out.println("<head>");
out.println("<title> Cycle de vie d'une servlet</title>");
out.println("</head>"); out.println("<body>");
out.println("<h1>lorsque la valeur de i atteind 10 alors on appel la méthode
destroy pour l'initialiser à Zéro </h1>" + "<h1>"+ i+ "</h1>");
out.println("</body>"); out.println("</html>");
destroy(); // appel destroy si i = 10}
if (i<10)
// incrémenter i
{ // afficher valeur de i }
}
public void destroy() // initialiser i
{
i = 0;
}
}
http://localhost:8080/myexamples/servlet_lifecycle
Conteneur
 Un conteneur de servlets est un programme compilable
et exécutable. La fonction principale consiste en le
chargement, l’initialisation et l’exécution de servlets.
 Le conteur de servlets is l’implémentation officielle de
référence pour les technologies servlets Java et les JSP
(JavaServer Pages). Les spécifications des servlets Java
et les JSP sont développées par SUN (java Community
Process).
 Un conteneur manipule un grand nombre de requêtes
car il peut disposer de plusieurs servlets actives, des
écouteurs (listeners, etc.).
 Noter que le conteneur de servlet peut être exécuté seul
(standalone : sans serveur web encore sur un autre
ordinateur).
Développement
 Installation, configuration et execution de servlets (à la
main !) :
 Compiler votre programme (servlet)


Attention, ni javax.servlet.* ni the javax.servlet.http.* ne font partie du JDK
Standard.
Modifier le CLASSPATH en pointant l’API des servlets
 Créer de votre application web

Il faut créer un repertoire pour votre application web, par exemple
myservlet, qui doit être dans le répertoire webapps
 Créer WEB-INF

Créer le répertoire WEB-INF dans le répertoire de votre application web
 Créer le web.xml et le répertoire classes


Créer le fichier web.xml dans le répertoire WEBINF
Créer aussi le répertoire classes toujours dans le répertoire WEB-INF.
Développement
 Installation, configuration et execution de servlets (à la
main !) :
 Copier la class

Copier maintenant le fichier class de la servlet dans le répertoire classes
 Servlet et web.xml

Inclure le nom de la servlet, par exemple « servlet_lifecycle », dans le
document web.xml en mentionnant son URL (motif). Pour cela vous devez
modifier le fichier web.xml :
<servlet>
<servlet-name> servlet_lifecycle</servlet-name>
<servlet-class>servlet_lifecycle</servlet-class>
</servlet>
Développement
 Installation, configuration et execution de servlets (à la
main !) :
 Servlet et web.xml

Ensuite, il faut inclure le mapping à l’aide de la balise <servlet-mapping> :
<servlet-mapping>
<servlet-name>servlet_lifecycle</servlet-name>
<url-pattern>/servlet_lifecycle</url-pattern>
</servlet-mapping>
 Execution


Lancer le serveur Tomcat
Executer la servlet (http://localhost:8080/myexamples/ servlet_lifecycle)
Exemple
 But : première servlet
 Exemple: afficher ‘Hello World’ (HelloWorld.java):
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorld extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException,IOException{
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
pw.println("<html>");
pw.println("<head><title>Hello World</title></head>");
pw.println("<body>");
pw.println("<h1>Hello World</h1>");
pw.println("</body></html>");
}}
http://localhost:8080/myexamples/HelloWorld
Exemple suite
 Une servlet éténde HttpServlet (extends the HttpServlet)
et surrchage la méthode doGet() qu’elle hérite de la
classe HttpServlet.
 Le serveur invoque la méthode doGet() lorsqu’il recoie
une requête GET de la servlet.
 La méthode doGet() prend deux arguments, le premier
est l’objet HttpServletRequest alors que le second est
l’objet HttpServletResponse.
 Si l’utilisateur envoie une requête au serveur alors celuici génère les deux objets HttpServletRequest et
HttpServletResponse qui représentent respectivement la
requête du client et la réponse du serveur.
Exemple suite
 La method doGet() de notre servlet utilize d’abord la
method setContentType de l’objet response qui indique
que le contenu de la reponse est de type test/html.
 C’est un contenu de type MIME standard pour les pages
HTML. Après cela, on utilise la méthode getWriter() de
l’objet response pour recevoir un objet PrintWriter.
 Pour afficher la sortie sur le navigateur, on utilise la
méthode println() de la classe PrintWriter.
Exemple
 But : Gestion de compteur
 Exemple: compter le nombre de fois que la servlet a été
invoquée:
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SimpleCounter extends HttpServlet{
int counter = 0;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
counter++;
pw.println(“A présent le compteur est " + counter);
}
}
http://localhost:8080/myexamples/SimpleCounter
Page dynamique
 But : générer une page HTML qui change dans le
temps à l’aide d’une servlet
 Exemple: afficher la date (DisplayingDate.java):
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class DisplayingDate extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException{
PrintWriter pw = response.getWriter();
Date d = new Date();
pw.println("<html>"+"<body><h1>La date d’aujourd’hui est </h1>");
pw.println("<b>"+ d+"</b></body>"+ "</html>");
}
}
http://localhost:8080/myexamples/DateDisplay
Page dynamique
 But : générer une page HTML qui change dans le
temps à l’aide d’une servlet
 Exemple: afficher la date (HelloWorld.java):
 Ne pas oublier le web.wml
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>DateDisplay</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/DateDisplay</url-pattern>
</servlet-mapping>
Passage de paramètres
 But : Saisir les paramètres via une page HTML et les
traiter par une Servlet
 Exemple: saisir le login/password et les afficher par une
Servlet (LoginServlet.java)
 Page de Saisie (html)
<html> <head>
<title>New Page 1</title>
</head><body>
<h2>Login</h2>
<p>Entrer votre nom utilisateur et votre mot de passé</p>
<form method="GET" action="/htmlform/LoginServlet">
<p> Username <input type="text" name="username" size="20"></p>
<p> Password <input type="text" name="password" size="20"></p>
<p><input type="submit" value="Submit" name="B1"></p>
</form>
<p> </p> </body></html>
Passage de paramètres
 But : Saisir les paramètres via une page HTML et les
traiter par une Servlet
 Exemple: saisir le login/password et les afficher par une
Servlet (LoginServlet.java)
 Servlet pour afficher les paramètres saisies (LoginServlet.java)
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;
public class LoginServlet extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
String name = request.getParameter("username");
String pass = request.getParameter("password");
out.println("<html>");
out.println("<body>");
out.println("Merci Mr/Mme + " " + name + " " + "pour votre visite<br>" );
out.println("votre mot de passe est : " + " " + pass + "<br>");
out.println("</body></html>");
}}
Passage de paramètres
 But : Saisir les paramètres via une page HTML et les
traiter par une Servlet
 Exemple: saisir le login/password et les afficher par une
Servlet (LoginServlet.java)
 Web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>LoginServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Hello</servlet-name>
<url-pattern>/LoginServlet</url-pattern>
</servlet-mapping>
</web-app>
http://localhost:8080/myexamples/login.html
Redirection
 But : Utilisation de la méthode sendRedirect() pour
permettre le traitement de la réponse d’une servlet
par un autre servlet.
 Exemple: saisir, contrôler puis traiter les informations
 formulaire pour saisir un login et un password
<html>
<head> <title>Nouvelle page 1</title> </head>
<body>
<form method="POST" action="/SendRedirect/SendRedirectServlet">
<p>Entrer votre nom
utilisateur        
<input type="text" name="username" size="20"></p>
<p>Entrer votre mot de passe 
<input type="text" name="password" size="20"></p>
<p><input type="submit" value="Submit" name="B1"></p>
</form>
</body></html>
Redirection
 But : Utilisation de la méthode sendRedirect() pour
permettre le traitement de la réponse d’une servlet
par un autre servlet.
 Exemple: saisir, contrôler puis traiter les informations
 Servlet (contrôleur) qui vérifie si les données saisies et redirige
vers une autre servlet pour les traiter (SendRedirectServlet.java)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SendRedirectServlet extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html"); PrintWriter pw = response.getWriter();
String name = request.getParameter("username");
String password = request.getParameter("password");
if(name.equals("Mohamed")&& password.equals("memet")){
response.sendRedirect("/SendRedirect/ValidUserServlet");
}
else{ pw.println("Utilisateur invalide");}}}
Redirection
 But : Utilisation de la méthode sendRedirect() pour
permettre le traitement de la réponse d’une servlet
par un autre servlet.
 Exemple: saisir, contrôler puis traiter les information
 Servlet pour traiter les données (ValidUserServlet .java)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ValidUserServlet extends HttpServlet{
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
PrintWriter pw = response.getWriter();
pw.println("Merci de visiter notre site " + " ");
pw.println("Vous pouvez commencer maintenant le travail !");
}
}
Redirection
 But : Utilisation de la méthode sendRedirect() pour
permettre le traitement de la réponse d’une servlet par
un autre servlet.
 Exemple: saisir, contrôler puis traiter les information
 web.xml
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN« "http://java.sun.com/dtd/webapp_2_3.dtd">
<web-app>
<servlet>
<servlet>
<servlet-name>rediriger</servlet-name>
<servlet-name>Hello</servlet-name>
<servlet-class>SendRedirectServlet</servlet-class>
<servlet-class>ValidUserServlet</servlet-class>
</servlet>
</servlet>
<servlet-mapping>
<servlet-mapping>
<servlet-name>rediriger</servlet-name>
<servlet-name>Hello</servlet-name>
<url-pattern>/SendRedirectServlet</url-pattern>
<url-pattern>/ValidUserServlet</url-pattern>
</servlet-mapping>
</servlet-mapping> </web-app>
http://localhost:8080/myexamples/SendRedirect.html
Exemple
 But : Passage des paramètres
 Exemple: QCM avec un paramètre qui a plusieurs
valeurs.
 Page de saisie (qcm-questionmultiple.html)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html> <head>
<title>QCM - paramètre à plusieurs valeurs</title>
</head>
<body>
<form method = "post" action = "GetParameterValues">
<p>Quels joueurs préférez-vous ?</p>
<input type = "checkbox" name ="joueur" value = "zidane">Zidane<br>
<input type = "checkbox" name ="joueur" value = "maradonna">Maradonna<br>
<input type = "checkbox" name ="joueur" value = "pelé">Pelé<br>
<input type = "checkbox" name ="joueur" value = "platini">platini<br>
<input type ="submit" name= "submit">
</form>
</body></html>
http://localhost:8080/myexamples/qcm-questionmultiple.html
Exemple
 But : Passage des paramètres
 Exemple: QCM avec un paramètre qui a plusieurs
valeurs.
 Servlet (GetParameterValues.java)
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class GetParameterValues extends HttpServlet{
protected void doPost(HttpServletRequest request, HttpServletResponse
response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter pw = response.getWriter();
String[] joueurs = request.getParameterValues("joueur");
for(int i=0; i<joueurs.length; i++){
pw.println("<br>joueur : " + joueurs[i]);
}}
}
Téléchargement