Transcript servlet

SERVLETS PRESENTATION
 Une servlet est utilisée pour créer des pages web dynamiques
 Classe java s’exécutant à l’intérieur d’un moteur de servlets. Elle reçoit une
requête http et répond en renvoyant une page html
 L’API de développement est constitué de deux packages :
Javax.servlet.* et Javax.servlet.http.*
 Le cas normal d’utilisation est de sous classer la classe HttpServlet
import javax.servlet.*;
import javax.servlet.http.*;
public class Servlet1 extends HttpServlet {
}
LA CLASSE
HttpServlet
 Classe abstraite obligeant à redéfinir les méthodes doGet et/ou doPost
 doGet répondra une requête de type GET d’un navigateur
(pour transférer une petite qunatité d’infos transmises dans l’url)
 doPost répondra à une requête de type POST d’un navigateur
(pour transférer une grande quantité d’infos dans le corps de la requête)
 Ces deux méthodes répondent à la requête http d’un navigateur
 La méthode init() : appelée une seule fois au moment ou la servlet est
chargée dans le conteneur de servlet – utilisée souvent pour initialiser des
variables globales de la classe.
 La méthode destroy() : appelée avant que la servlet soit déchargée du
conteneur – utilisée pour faire le ménage d’éventuelles ressources allouées.
UNE SERVLET MINIMUM
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Servlet1 extends HttpServlet {
public void init() throws ServletException { // chargement
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // requête GET
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { // requête POST
}
public void destroy() { //déchargement
}
}
LES OBJETS REQUEST & RESPONSE
 l’objet request : sert à récupèrer ce qui vient du client (noms
et valeurs des paramètres en provenance d’un formulaire)
 l’objet response : sert à retourner des informations au client
(ouverture d’un flux d’écriture vers le client)
UTILISATION DE L’OBJET RESPONSE
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType(“text/html”); // type de doc renvoyé
PrintWriter out = response.getWriter(); // flux de sortie vers client
// construction dynamique de la page HTML à renvoyer
out.println("<html>");
out.println("<body BGCOLOR=\"#ffffc0\">");
out.println("<p>Un GET RECU : VOICI LA REPONSE</p>");
out.println("</body></html>");
}
}
DEPLOIEMENT D’UNE SERVLET SOUS TOMCAT
Ex : web.xml
<web-app>
<servlet>
1) Copier le fichier .class de la servlet avec son dossier de package qui
<servlet-name>maServlet</servlet-name>
la contient
dans WEB_INF/classe
<servlet-class>monPack.maServlet</servlet-class> (sans .class)
Ex :WEB_INF/classes/monPack/maServlet.class
</servlet>
2) Editer le fichier descripteur de déploiement web.xml qui se trouve
<servlet-mapping>
dans<servlet-name>maServlet</servlet-name>
WEB-INF .
-Indiquer le nom de la servlet
<url-pattern>/maServlet</url-pattern>
</servlet-mapping>
-Son package et le nom de sa classe
-Indiquer une url qui nous permettra de l’appeler dans une requête
</web-app>
http : url-pattern
APPEL D’ UNE SERVLET
Dans l’url du navigateur
http://localhost:8080/<path dans server.xml>/<url-pattern dans web.xml>
Dans server.xml…
<Context docbase= ‘c:\didier\monSite’ path= ‘/monSite’></Context>
Dans web.xml…
<url-pattern>/maServlet</url-pattern>
http://localhost:8080/monSite/maServlet
APPEL D’ UNE SERVLET
Dans un lien href
<a href=“ /monSite/maServlet">Cliquez ici pour appeler maServlet </a>
« /path/url-pattern »
L’appel d’une servlet dans un lien href ou dans l’url du navigateur
appelle la méthode doGet et non doPost, la méthode doPost ne peut
être appelée qu’à partir d’un formulaire.
APPEL D’ UNE SERVLET
Dans un formulaire
<FORM METHOD=POST ACTION=“ /monSite/maServlet “>
…
</FORM>
TD1 – SERVLET
Créer un nouveau site qui contiendra une seule page html.
Cette page contiendra un lien (HREF), qui appellera une servlet
La servlet renverra une page html qui affichera
« BONJOUR MONDE ! »
Deux grandes étapes :
Créer le site et le déployer sous Tomcat
Créer la servlet et la déployer sous Tomcat
TD2 – SERVLET
 Refaire le TD précédent en utilisant
l’environnement NetBeans
Illustration du partage de données :
LES SERVLETS ET LES THREADS
public class Compteur ….{




Lesprivate
servletsint
sontcptPartagé=0;
multi – threads
Il y a une seule instance de servlet pour « n » clients
doGet(…){
Lespublic
clients void
se partagent
le meme code
Un thread est créé pour chaque méthode doGet ou doPost
int cptPrivé=0;
appelée
cptPrivé++;
 Tout ce qui est dans le corps de la classe de la servlet, variables
globales etc…,
est partagé entre{ tout les clients.
synchronized(this)
 Tout ce qui est déclaré
dans les méthodes doGet ou doPost sont
cptPartagé++;
des données} privées pour le thread
}
}
L’ OBJET REQUEST – getParameter(np)
 request.getParameter(nom_parametre);
Récupère la valeur du paramètre dont le nom est passé en argument.
EX : String valeur=request.getParameter(Pays);
<html><body>
<form action="/servlet/Servlet1" method=GET>
<input type=text name=Pays/>
<input type=submit/>
</form>
</body></html>
http://host:8080/monsite/servlet/Servlet1?Pays=France
TD3 - SERVLET
 En utilisant Netbeans, créer un site qui contient un
formulaire permettant la saisie d’un numéro de
client. Vérifier que le numéro ne contient que des
chiffres avant de l’envoyer au serveur.
 Créer une servlet qui va récupérer dans une BD les
valeurs des nom et prénom du client à partir de son
numéro, puis retourner au client:
BONJOUR « prénom » « nom »
L’ OBJET REQUEST - getParameterValues(np)
- request.getParameterValues(nom_parametre);
Récupère toutes les valeurs du paramètre passé en argument
(choix multiples dans liste).
EX : String[] valeurs=request.getParameterValues(liste);
<html><body>
<form name=‘f1’ action=‘/site/servlet’ method="post">
<select name=‘liste’ size="3" multiple>
<option value="un">un</option>
<option value="deux">deux</option>
<option value="trois">trois</option>
</select>
</form></body></html>
public void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
L’ OBJET REQUEST - getParameterNames()
response.setContentType(« text/html »);
PrintWriter out = response.getWriter();
- request.getParameterNames();
out.println("<html>");
out.println("<body
Récupère la liste desBGCOLOR=\"#ffffc0\">");
nom de paramètres dans un objet de type
Enumeration.
Enumeration
e=request.getParameterNames();
Ex : Enumeration
e=request.getParameterNames();
While( e.hasMoreElements()){
String param=(String)e.nextElement();
<html><body>
out.println(param+"="+request.getParameter(param)+”<br>”);
<form action="/servlet/Servlet1" method=GET>
}
<input type=text name=nom/>
<input type=text name=prenom/>
out.println("</body></html>");
<input type=submit/>
out.close();
</form>
}
</body></html>
http://host:8080/monsite/servlet/Servlet1?nom=Dupont&prenom=Paul
TP - SERVLET
Réaliser un site web sous Tomcat qui permet de saisir des fiches clients:
·
- Un formulaire de saisie de fiche client
On forçera la saisie des noms et prénoms en majuscule
·
- Une servlet qui récupère les infos client et les enregistre
dans une table client d’une BD.
·
- Une servlet qui lit toutes les fiches client et les retourne
sous la forme d’un tableau html.