Sie sind auf Seite 1von 72

Servlet

Mohammed Kabbaj kabbaj@univ-tlse2.fr

LE PROTOCOLE HTTP
Protocole sans tat
Les requtes sont eectues Indpendamment les unes aprs les autres Une requte est excute sans connaissance que celles qui ont prcd ou de celles qui vont suivre

Une transacMon HTTP est soit


Une requte Une rponse

Mme principe que ce soit une requte ou une rponse


Une ligne spciant le type de la transacMon HTTP L'en-tte HTTP Le corps HTTP (opMonnel pour l'envoie de la requte)

Le client envoie la requte : Mthode POST


La ligne spcifique

Post /Nom_Script HTTP/1.0 Accept : Text/html Accept : image/gif Accept : image/jpeg User-Agent : Mozilla/4.0 *** saut de ligne *** Var1=Value1& Var2=Value2 Var3=Value3

Mthode,chemin,version Documents accepts

Entte de la requte
Type et version du navigateur ayant soumis la requte. Paramtres des diffrents champs du formulaire.

corps de la requte

Le client envoie la requte : Mthode GET


La ligne spcifique

GET /Nom_Script?var1=val1&var2=val2&. HTTP/1.0

Entte de la requte

Accept : Text/html Accept : image/gif Accept : image/jpeg User-Agent : Mozilla/4.0

corps de la requte est vide

Le Serveur retourne la rponse :


La ligne spcifique

HTTP/1.0 200 OK Date : Wed, 05Feb02 15:02:01 GMT Server : Apache/1.3.24 Mime-Version 1.0 Last-Modified : Wed 02Oct01 24:05:01GMT Content-Type : Text/html Content-legnth : 4205 *** saut de ligne *** <HTML><HEAD> . </BODY></HTML>

Ligne de Status

Entte de la rponse
Nom du Serveur Dernire modification

Type de contenu Sa taille Le fichier que le client va afficher

corps de la rponse

Les Mthodes HTTP disponibles


Get : demande de doc au serveur, arguments opMonnels concatns l'URL (cf. Formulaires) Post : envoi d'informaMons au serveur, arguments passs dans le corps de la requte (cf. Formulaires) Head : Demande d'informaMon du client sur un document, sans demande du document en lui mme. La rponse du serveur ne conMendra que l'en-tte du document Put : Demande au serveur de stocker le corps de la requte l'URL spci Delete : demande la suppression du document raZach l'URL OpMons : Demande d'informaMon sur les opMons de communicaMon disponibles Trace : UMlis pour le debugge, le corps de la requte reue par le serveur est simplement retourn au client

Les codes de statut HTTP


1XX : InformaMf 2XX : Succs
requte reue, en cours de traitement requte reue, comprise et accepte d'autres acMons doivent tre excutes pour complter la requte requte incomplte, mal forme ou impossible excuter La requte est valide, mais le serveur ne peut y rpondre

3XX : Re-direcMon

4XX : Erreur du client

5XX : Erreur ct serveur

Quest ce quune servlet ?


Les servlets sont la base de la programmaMon Web Java EE. Une servlet est un programme Java cot serveur. Une servlet est une applet cot serveur LappellaMon dune servlet passe par un URL lie la servlet

Servlets

Analyse de la servlet HelloWorld (1)


import javax.servlet.*; import javax.servlet.http.*; import java.io.*;

impos

public class HelloServlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType( "text/html" ); PrintWriter out = response.getWriter();

impos par l'API servlet

ce qui suit est en HTML rcupre un flux pour gnrer le rsultat

Analyse de la servlet HelloWorld (2)


out.println( "<html><body>" ); out.println( "<h1>Hello depuis une servlet</h1>" ); out.println( "</body></html>" ); } } gnration du code HTML

Compilation HelloServlet.class install Chargement via une URL de type


http://.../

excution de HelloServlet.class

La servlet HelloWorld (code complet)


import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class HelloServlet extends HttpServlet { public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); out.println( "<html><body>" ); out.println( "<h1>Hello depuis une servlet</h1>" ); out.println( "</body></html>" ); } }

HZpServlets
Navigateur web

Requte HTTP
Method=GET ou POST

Serveur web Conteneur de servlet


HttpRequest

COOKIES

Servlet
doGet() doPost()

Rponse HTTP
HttpResponse

(HTML, javascript, css, XML)


HttpSession

FoncMonnement dune servlet


Lorsqu'une servlet est appele par un client, la mthode service() est excute. Celle-ci est le principal point d'entre de toute servlet et accepte deux objets en paramtres:

L'objet HZpServletRequest encapsulant la requte du client, c'est--dire qu'il conMent l'ensemble des paramtres passs la servlet (informaMons sur l'environnement du client, cookies du client, URL demande, ...) L'objet HZpServletResponse permeZant de renvoyer une rponse au client (envoyer des informaMons au navigateur).

Architecture du package servlet.jar


o Toutes les servlets implmentent directement ou indirectement l'interface Servlet, en drivant une classe qui l'implmente: c'est--dire gnralement la classe H3pServlet, elle-mme issue de GenericServlet. o La classe GenericServlet (javax.servlet.GenericServlet) dnit une classe abstraite (implmentaMon de base de l'interface Servlet).

Servlet

GenericSrvlet service()

HZpServlet doPost() doGet() NotreServlet doPost() doGet()

Servlets vs. applets


Les servlets sont le pendant des applets ct serveur
mais sans interface graphique uMlisateur
elle est limite la puissance du langage HTML

par contre, elles ne sont pas astreintes aux mmes rgles de scurit que les applets

peuvent tablir une connexion avec dautres clients (RMI, ) peuvent faire des appels systme (uMlisaMon pont JDBC- ODBC) ou manipuler des ressources locales (sur le serveur), ...

Servlets vs. CGI


Plus ecaces Plus praMques Plus puissantes Portables Gratuites

Servlets plus ecaces


Rsidentes, pas de fork, pas de temps de lancement MulMthreads GesMon de cache Connexions persistantes (BD) etc...

Servlets plus praMques


C'est du Java Super API pour grer les formulaires HTML, Les cookies, le suivi de session, Le protocole HTTP devient facile manipuler
manipuler les headers hZp

Plus facile uMliser que cgi/perl

Servlet plus puissantes

On peut faire des choses impossibles raliser avec des scripts CGI
Parler avec le serveur WWW, Echanger des donnes via URIs, Partager des donnes entre servlets, Chaner des servlets (pool de connecMons BD), GesMon de sessions (e-commerce), etc...

Servlets gratuites

Kit de dveloppement des servlets gratuit Nombreuses versions commerciales... (Microson, Netscape I-server, Webstar...) Mais Apache/Tomcat reste la soluMon la plus ecace... 100% gratuite !

GesMon des servlets


Moteur de Servlets
Crer un pool de threads Instancier la servlet Appeler la mthode init() IniMalisaMon Requte HTTP 1 Requte HTTP 2 Rponse HTTP 1 Rponse HTTP 2 Terminer le pool de threads Appeler la mthode destroy() Aecter une requte un thread Aecter une requte un thread Appeler la mthode service() Appeler la mthode service() ExcuMon service

Thread Thread Servlet

ExcuMon service

FoncMonnalits oertes par les servlets


Gnre une page WEB HTML dynamique. CeZe page WEB HTML dynamique peut tre crite en foncMon
des paramtres de la requte de la nature de la requte du rsultat dune requte une base de donnes. de la connaissance de donnes sur le client

Peut grer concurremment la connexion avec plusieurs clients en partageant des donnes communes. Contrle les sessions avec un client parMculier en sauvegardant ses donnes. Reconnat le contexte d'un client et peut accder aux cookies. accde au Bases de donnes Traiter et/ou stocker des donnes recueillies via un formulaire HTML

Appel dune servlet


A parMr du navigateur, entrez l URL de la servlet et les paramtres de la requte. Dans une page HTML, par les tags <FORM> et </FORM> en uMlisant la mthode GET ou POST pour fournir les paramtres de luMlisateur. Dans une page HTML, par le tag <SERVLET>

HZpServletRequest

HZpServletRequest
Hrite de ServletRequest Gre la requte en orant les services pour accder aux informaMons qu'elle conMent :
contexte du navigateur les paramtres passes et leur valeurs

accept : image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,

applicaMon/vnd.ms-powerpoint, applicaMon/vnd.ms-excel, applicaMon/msword, */*

accept-language: fr accept-encoding: gzip, deate user-agent : Mozilla/4.0 (compaMble; MSIE 6.0; Windows NT 5.0) host : localhost:8080 connecMon: Keep-Alive cookie nom=ogor

HZpServletRequest
Mthode
String getMethod() String getHeader(String Key) String getRemoteHost() String getRemoteAddr()

Description
Rcupre la mthode HTTP utilise par le client Rcupre la valeur de l'attribut Key de l'entte Rcupre le nom de domaine du client Rcupre l'adresse IP du client

String getParameter(String Key)

Rcupre la valeur du paramtre Key (cl) d'un formulaire. Lorsque plusieurs valeurs sont prsentes, la premire est retourne
Rcupre les valeurs correspondant au paramtre Key (cl) d'un formulaire, c'est--dire dans le cas d'une slection multiple (cases cocher, listes choix multiples) les valeurs de toutes les entits slectionnes Retourne un objet Enumeration contenant la liste des noms des paramtres passs la requte Rcupre le nom du serveur Rcupre le numro de port du serveur

String[] getParameterValues(String Key)

Enumeration getParameterNames() String getServerName() String getServerPort()

HZpServletResponse

HZpServletResponse
Hrite de ServletReponse Gre la rponse en orant les services pour y meZre les informaMons ncessaires :
type de contenu, en-tte, code de retour un ot de sorMe pour les donnes transmeZre au navigateur (HTML, Image, son, etc)

Mthode
String setStatus(int StatusCode)

HZpServletResponse
Description
Dfinit le code de retour de la rponse Dfinit une paire cl/valeur dans les en-ttes

void setHeader(String Nom, String Valeur)

void setContentType(String type)


void setContentLength(int len)

Dfinit le type MIME de la rponse HTTP, c'est--dire le type de donnes envoyes au navigateur
Dfinit la taille de la rponse

PrintWriter getWriter()

Re t o u r n e u n o b j e t P r i n t W r i t e r permettant d'envoyer du texte au navigateur client. Il se charge de convertir au format appropri les caractres Unicode utiliss par Java
Dfinit un flot de donnes envoyer au client, par l'intermdiaire d'un objet ServletOutputStream, driv de la classe java.io.OutputStream

ServletOutputStream getOutputStream()

void sendredirect(String location)

Permet de rediriger le client vers l'URL location

Modle de programmaMon
Une servlet doit implmenter linterface
javax.servlet.Servlet
soit directement, soit en drivant dune classe implmentant dj ceZe interface comme (GenericServlet ou H/pServlet )

ceZe interface possde les mthodes pour :


iniMaliser la servlet : init() recevoir et rpondre aux requtes des clients : service() dtruire la servlet et ses ressources : destroy()

La classe HZpServlet

Une servlet Web : httpServlet


Pour faciliter le traitement parMculier des requtes Web, la classe Servlet est ane en javax.servlet.http.HttpServlet
2 mthodes remplacent service() de la classe mre
doGet() pour les requtes http de type GET doPost() pour les requtes http de type POST

La classe servlet doit OBLIGATOIREMENT contenir lune ou lautre de ces 2 mthodes rednies, choisies selon le mode denvoi du formulaire html qui lexcute! service() de HttpServlet appelle automaMquement la bonne mthode en foncMon du type de requtes http

Paramtres des mthodes doGet() et doPost()


UMliser les objets HttpServletRequest et HttpServletResponse passs en paramtres de ces mthodes pour implanter le service
HttpServletRequest conMent les renseignements sur le formulaire html iniMal (uMle pour doPost())
La mthode getParameter() rcupre les paramtres dentre

HttpServletResponse conMent le ux de sorMe pour la gnraMon de la page html rsultat (getWriter())

Exemple : les donnes d'un formulaire


<HTML> <BODY> <FORM ACTION="http://..." METHOD=POST> Nom <INPUT NAME="nom"> <P> Prnom <INPUT NAME="prenom"> <P> <INPUT TYPE=SUBMIT VALUE="Envoi"> <INPUT TYPE=RESET VALUE="Remise zro"> </FORM> </BODY> </HTML>

form1.html

RcupraMon par la servlet


public class LireParam extends HttpServlet { public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); String nom = request.getParameter( "nom" ); String prenom = request.getParameter( "prenom" ); out.println( out.println( out.println( out.println( } } "<html><body>" ); "<h1>Exemple de rsultat</h1>" ); "Bonjour " + prenom + " " + nom ); "</body></html>" );

import java.io.*;! import javax.servlet.*;! import javax.servlet.http.*;! public class conv extends HttpServlet {! ! !protected void doGet(HttpServletRequest req, HttpServletResponse res)! ! !throws ServletException, IOException {! ! !res.setContentType("text/html");! !PrintWriter out = res.getWriter();! !out.println("<html>");! !out.println("<head><title>Conversion Franc-Euro ou Euro-Franc</title></ head>");! !out.println("<FORM METHOD=POST ACTION=http://localhost:8081/ conversion>");! !out.println("<h1><B>Conversion Francs-Euros ou Euros-Francs</B></h1>");! !out.print("<pre>Montant convertir : ");! !out.print("<input type=text name=montant size=25>");! !out.println("<I>Utiliser le . pour la dcimale</I></pre>");! !out.println("<P><B>Type de conversion :</B><BR>");! !out.println("<input type=radio name=choix value=\"EF\" checked> Euros en Francs <BR>");! !out.println("<input type=radio name=choix value=\"FE\"> Francs en Euros <BR></P>");! !out.println("<P><input type=submit value=\"Valider\"></P>");! !out.println("</FORM>");! !out.println("</html>");! !out.close();! !}

3me exemple

3me exemple (suite)


protected void doPost(HttpServletRequest req, HttpServletResponse res)! ! !throws ServletException, IOException {! ! !double montantOrigine;! !double montantConverti;! ! !montantOrigine=Double.parseDouble(req.getParameter("montant"));! !if (req.getParameter("choix").equals("FE")) {! ! !montantConverti=montantOrigine / 6.55957; ! ! !}! !else !montantConverti=montantOrigine * 6.55957;! ! !res.setContentType("text/html");! !PrintWriter out = res.getWriter();! !out.println("<html>");! !out.println("<head><title>Rsultat de la conversion</title></head>");! !out.print("<P><B> Le Montant d'origine est : </B>");! !out.print(montantOrigine);! !out.println("</P>");! !out.print("<P><B> Montant converti : </B>");! !out.print(montantConverti);! !out.println("</P>");! !out.println("</html>");! !out.close();! !}! }

Excuter la servlet

Exemple dexcuMon

Rsultat dune bonne excuMon

Dploiement dune servlet


Pour que le serveur Tomcat reconnaisse une servlet, celle-ci doit tre dclare dans le chier web.xml qui se trouve dans le dossier WEB-INF. Le chier web.xml sappelle le descripteur de dploiement de Servlet. Ce descripteur doit dclarer principalement les lments suivant :
Le nom aZribu ceZe servlet La classe de la servlet Le nom URL uMliser pour faire appel ceZe servlet via le protocole HTTP.

Le chier web.xml
<?xml version="1.0" encoding="UTF-8"?>! <!DOCTYPE web-app! PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"! "http://java.sun.com/dtd/web-app_2_3.dtd">! <web-app>! <servlet>! <servlet-name>conversion</servlet-name>! <servlet-class>conv</servlet-class>! </servlet>! <servlet>! <servlet-name>conv</servlet-name>! <display-name>conversion</display-name>! <servlet-class>conv</servlet-class>! </servlet>! <servlet-mapping>! <servlet-name>conversion</servlet-name>! <url-pattern>/conversion</url-pattern>! </servlet-mapping>! <servlet-mapping>! <servlet-name>conv</servlet-name>! <url-pattern>/conversion</url-pattern>! </servlet-mapping>! </web-app>

Chanage des servlets


AggrgaMon des rsultats fournis par plusieurs servlets
meilleure modularit meilleure ruMlisaMon servlet 4 servlet 1 servlet 5 servlet servlet 2 servlet 3

UMlisaMon d'un RequestDispatcher obtenu via un objet request

RequestDispatcher rd = request.getRequestDispatch er( "servlet1" );

Inclusion du rsultat d'une autre servlet


rd.include(request, response);

DlgaMon du traitement une autre servlet


rd.forward(request, response); URL

IllustraMon du cycle de vie dune servlet


Chaque servlet n'est instancie 1 seule fois persistance de ces donnes entre 2 invocations
public class CompteurServlet extends HttpServlet { int compteur = 0; public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { response.setContentType( "text/html" ); PrintWriter out = response.getWriter(); out.println( "<html><body>" ); out.println( "<h1> "+ compteur++ + "</h1>" ); out.println( "</body></html>" ); } }

Deux excuMons successives de lexemple


Chaque servlet n'est instancie 1 seule fois persistance de ces donnes entre 2 invocations

1re invocation

2me invocation

Le cycle de vie
1. la servlet est cre puis iniMalise (init() )
ceZe mthode nest appele par le serveur quune seule fois lors du chargement en mmoire par le moteur de servlet

2. le service du client est implment (service()

ceZe mthode est appele automaMquement par le serveur chaque requte de client

3. la servlet est dtruite (destroy() )


ceZe mthode nest appele par le serveur quune seule fois la n permet de librer des ressources (alloues par init() )

Cycle de vie
craMon init IniMalisaMon/ Disponible pour requtes Erreur Dbut requte Requte Fin requte Erreur

instanciaMon

Fermeture du conteneur

Erreur destrucMon Fermeture du conteneur

ProblmaMque
Protocole HTTP = protocole Internet dconnect
dirent de Telnet, Ftp, traite les requtes et les rponses comme transacMons simples et isoles (requtes non apparentes)

Certaines applicaMons Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes
ie. maintenir une connexion de l'uMlisateur sur le serveur pour se faire : concept de "suivi de sessions"

Suivi de session : qu'est-ce que c'est ?


Mmoire de ce que fait l'uMlisateur d'une page l'autre
consiste au transfert de donnes gnres par une requte vers les requtes suivantes

4 mthodes avec les servlets Java


1) uMlisaMon des cookies 2) rcriture d'URL : passage de paramtres 3) uMlisaMon des champs de formulaire "hidden" 4) uMlisaMon du JSDK (HZpSession API)

Cookies
Donnes textuelles envoyes par le serveur au client Stockes chez le client Renvoyes vers le serveur lors de toutes requtes vers le serveur Dure de vie rglable Permet la persistance

A quoi a sert ?
IdenMcaMon des uMlisateurs (e-commerce) Eviter la saisie dinformaMons rpMMon
login, password, adresse, tlphone

Grer des prfrences uMlisateur


sites portails

...

Cookie et scurit
Jamais interprt ou excut : pas de virus Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site) : pas de surcharge de disque Bien pour rendre prives des donnes non sensibles nom, adresse, mais pas No CB ! mais ne consMtue pas un traitement srieux de la scurit

Manipuler les cookies


UMliser les foncMons de l API des servlets crer un cookie : classe Cookie, crire/lire un cookie : addCookie(cookie), getCookies(), posiMonner des aZributs dun cookie : cookie.setXxx() Exemple d'envoi d'un cookie : ... String nom = request.getParameter("nom"); Cookie unCookie = new Cookie("nom", nom); ...ici positionner des attributs si on le dsire response.addCookie(unCookie); ...

CraMon d'un cookie


Cookie unCookie = new Cookie(name, value);

2 arguments de type java.lang.String :


name et value

caractres non autoriss :


espace blanc [ ] ( ) = , " / ? @ : ;

RcupraMon des cookies


Exemple de rcupraMon des cookies
Cookie [] cookies = request.getCookies(); String nom = getCookieValue(cookies, "nom", "non trouv"); ... public static String getCookieValue(Cookie [] cookies, String cookieName, String defaultValue) { for(int i=0; i < cookies.length; i++) { Cookie cookie = cookies[i]; if(cookieName.equals(cookie.getName()) return(cookie.getValue()); } return(defaultValue); }

Temps d'expiraMon
Par dfaut, dure de vie d'un cookie = la connexion. Si on veut que le cookie soit sauv sur disque, modier sa dure de vie :
public static final int SECONDS_PER_YEAR = 60*60*24*365; cookie.setMaxAge(SECONDS_PER_YEAR);

Modica(on des proprits d'un cookie


L'age
cookie.setMaxAge(60000);
Une valeur posi(ve, le temps en seconde aprs lequel il expire, 0, il est supprim -1, il ne dure que le temps de la session

Le domaine La version

cookie.getDomain() cookie.setDomain() cookie. getVersion cookie. setVersion

Le commentaire associ Le nom et la valeur

cookie. setComment("pour savoir ") cookie. getComment cookie. getName() // le nom ne peut pas tre modie cookie. getValue() // la valeur peut tre lue ou modie cookie. setValue("une valeur")

Cockies
Pour
facile implmenter facile faire voluer Peut persister mme aprs l'arrt du navigateur Parfois refuss par les navigateurs ("r-criture URL) Non supports par certains navigateurs DsacMvs par certains uMlisateurs pour des raisons de scurit ou de sauvegarde des donnes personnelles (si cookie prsent, vous tes alls sur le site) Nombre limitde cookiesautoris, taille de cookielimite (un navigateur est sens accepter 20 cookies par Serveur Web, 300 cookies au total et peut limiter la taille d'un cookie 4 KB. Pas scuris Fichiers textes, ditables et modiables Indisponibles si l'uMlisateur change de poste ou de navigateur

Contre

Rcriture d'URL
Principe :

ajouter dans la chane de requte de la servlet des informaMons supplmentaires idenMant la session

<a href="http://leo.inria.fr/servlet/foo?uid=itey">Acheter </a>


l'ID uMlisateur est transmis en mme temps que la requte; il est accd par chaque servlet menMonne qui rcupre les informaMons persistantes (BD, chiers) parMr de cet ID

LimitaMons :
donnes volumineuses, caractres autoriss, longueur URL, donnes visibles (scurit)

Rcriture d'URL
Pour
L'uMlisateur reste anonyme, pas de traces Supports par tous les navigateurs

Contre
R-criture systmaMque des URLs fasMdieuse Ne marche que pour les documents crs de faon dynamique (formulaires)

Champs de formulaires cachs


Principe :
on cache les donnes de session dans des champs "hidden" :
<INPUT TYPE="HIDDEN" NAME="uid" VALUE=itey">

LimitaMons :
idem la "rcriture d'URL" sauf pour la scurit (uMlisaMon de POST)

Champs cachs
Pour
Supports par tous les navigateurs L'uMlisateur reste anonyme, pas de traces

Contre
Ne marche que pour une squence de formulaires gnrs dynamiquement Impossibles uMliss, avec des documents staMques, des mails, des document "bookmarks" Ne persiste pas l'arrt du Navigateur

Lobjet session
Trs simple avec l'API des servlets (JSDK)
objet HttpSession

Principe :
Un objet "session" peut tre associ avec chaque requte Il va servir de "container" pour des informaMons persistantes Dure de vie limite et rglable

Servlet: HZpSession
API de suivi de session HZpSession Mthodes de craMon lies la requte (HZpServletRequest)
HZpSession getSession() : retourne la session associe luMlisateur HZpSession getSession(boolean p) : craMon selon la valeur de p AZenMon : getSession avant getWriter. EnumeraMon getAZributNames() : retourne les noms de tous les aZributs Object getAZribut(String name) : retourne lobjet associ au nom setAZribut(String na, Object va) : modie na par la valeur va removeAZribut(String na) : supprime laZribut associ na invalidate() : expire la session logout() : termine la session

GesMon dassociaMon (HZpSession)

DestrucMon (HZpSession)

Modle basique
HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy n'est pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); ... caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); }....

Architecture
Web Client Internet / Intranet Database Server HTML page

Java servlets

Web Server

JDBC DriverManager

SGBD

SGBD Intranet

Un exemple complet : "publier sur le Web un annuaire dune socit"


LobjecMf :
publier sur le Web en uMlisant une servlet les coordonnes dun employ en le recherchant par son nom

Lapproche en 3 parMes :
la page HTML pour le formulaire d interrogaMon la servlet eectuant la requte la page HTML rsultat gnre par la servlet

Le formulaire dinterrogaMon
<HTML> Fichier : annuaire.html <HEAD><TITLE>Annuaire YETI</TITLE></HEAD> <BODY> <CENTER><H1> Annuaire de la socit YETI </H1></CENTER> <HR WIDTH="75%"> <CENTER><H2>Recherche de coordonnes</H2></CENTER> <P>Tapez les premires lettres de la personne dsire <P><FORM METHOD=POST ACTION=http://fkeiko.inria.fr:8090/servlet/Annuaire> <INPUT TYPE=TEXT NAME="nom" SIZE=10 MAXLENGTH=20 VALUE=""> <P><INPUT TYPE=SUBMIT NAME="go" VALUE="Rechercher"> <INPUT TYPE=RESET NAME="reset" VALUE="Reset"> </BODY> </HTML>

La servlet Annuaire (1)


import import import import javax.servlet.*; javax.servlet.http.*; java.io.*; java.sql.*;

public class Annuaire extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ... } public String getServletInfo() { return "La servlet Annuaire"; } }

La servlet Annuaire (2)


public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><BODY>"); out.Println("<CENTER><H1>Voici les coordonnes :</H1></CENTER>"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:ANNUAIRE"; Connection c = DriverManager.getConnection(url, "itey", "admin"); Statement s = c.createStatement(); String query = "SELECT name,phone FROM Annuaire" + "WHERE name LIKE '" + req.getParameter("nom") + "%'"; ResultSet rs = s.executeQuery(query); rs.next(); out.println("<P>NOM: " + rs.getString("name")); out.println("<P>TELEPHONE: " + rs.getInt("phone")); rs.close(); s.close(); c.close(); } catch(Exception e) {} out.println("</BODY>/HTML>"); out.close(); }

Das könnte Ihnen auch gefallen