Les servlets Le langage Java
Les Servlets
XVII-1 JMF
Les servlets Le langage Java
Rappels : l'architecture client
serveur du web
(Merci à Pascal Graffion pour cette partie)
XVII-2 JMF
Les servlets Le langage Java
Le navigateur Web
• Il est installé sur le poste client
• Il affiche des pages web
• Il sollicite le serveur web par une requête et
reçoit une réponse
• Il communique avec le serveur Web par le
protocole HTTP
XVII-3 JMF
Les servlets Le langage Java
Le serveur Web
• C’est un programme situé sur une machine
connectée au réseau internet
• Il détecte les requêtes des clients pour les
traiter dans l’ordre de leur arrivée
• Il renvoie une page HTML
• Il communique avec le client avec le
protocole HTTP
XVII-4 JMF
Les servlets Le langage Java
Communication serveur Web /
navigateur Web (1)
• Le navigateur formule une requête HTTP référençant un
document :
- statique : [Link]
- ou dynamique :
• Le navigateur envoie la requête HTTP au serveur
• Le serveur traite la requête et renvoie la réponse
XVII-5 JMF
Les servlets Le langage Java
HTTP
• A protocol to obtain resources (not only
HTML pages)
• Format of the exchanged messages
A line (the request or the
response)
Header variables (informations
about the sender)
A blank line
Eventually data
❚ A text-oriented protocol (maybe except the
XVII-6
data) JMF
Les servlets Le langage Java
HTTP: a request (1/2)
❚ A message from client to server = a
request
The line of the request
Header variables (information about
the client)
A blank line
Data (sometimes empty)
XVII-7 JMF
Les servlets Le langage Java
HTTP: a request (2/2)
[Link]
=
1°) Open a TCP connection to service on
port 8080
2°) Send a HTTP message (a request)
which first line is:
get /[Link] HTTP/1.1
XVII-8 JMF
Les servlets Le langage Java
HTTP: a response (1/2)
❚ A message from server to client = a
response
The line of the response
Header variables (information about
the server)
A blank line
Data (seldom empty)
XVII-9 JMF
Les servlets Le langage Java
HTTP: a response (2/2)
❚ Example of response:
HTTP/1.1 200 OK The line of the
Server: Apache/1.3.12 (Unix) response
Last-Modified: Sat, 1 Jan 2000 [Link] GMT
Content-Length: 2608 Header variables
Content-Type: text/html
<html>
<head><title>Latakie</title></head>
<body>
<h1> Welcome in Syria </h1>
… … … Data (body of
</body> the response)
</html>
XVII-10 JMF
Les servlets Le langage Java
Traitement d’une requête HTTP
Le serveur web détermine si une requête est dynamique en
fonction :
• du répertoire quelle référence (cgi-bin/, servlet/, ...)
• ou de l'extension du fichier référencé (. jsp, .php, ...)
Délègue l’exécution de la requête à :
• une JVM pour une servlet Java
• un interpréteur adéquat pour php, asp, jsp, ...
XVII-11 JMF
Les servlets Le langage Java
Techniques utilisées côté serveur
Les requêtes peuvent être traitées par différentes
technologies :
– CGI ( Common Gateway Interface)
– API de serveur WEB propriétaires (ISAPI, NSAPI)
– Servlets Java
– JSP ( JavaServer Pages)
– ASP
– PHP
– ...
XVII-12 JMF
Les servlets
Static and dynamic web: Le langage Java
conclusion
Client side
Server side
HTML Files
I static
n
Web
t
server
e
r
n
e
t dynamic
CGI
build program
HTML
Files
XVII-13 JMF
Les servlets Le langage Java
Parameters of CGI Programs
• Generally these programs are launched with
parameters
• Give examples. Who first gives these parameters ?
❚ So HTML (2.0) proposes GUI to launch
programs and give them parameters : the
form
❚ GUI can have :
❙ checkboxes, textfield, textfield with * as echo
character, radio button, reset button, button to
XVII-14
launch the request, selection list, textarea JMF
Les servlets Le langage Java
GUI with a form
XVII-15 JMF
Les servlets Le langage Java
The code of the form
• The form:
is obtained by:
<html>
<head>
<title>Test of CGI script</title>
</head>
<body>
<h1 ALIGN=CENTER>example of a form</h1>
<hr>
<form METHOD="POST" ACTION="[Link]
<h3>checkboxes</h3>
<input TYPE="…
<!-- the rest is the … exercise -->
XVII-16 JMF
Les servlets
So the parameters to the Le langage Java
program?
• The GUI components have a name. This name is used
by the program. The program receives a line
constitued by a NameOfComponent=value
separated by &
• Some transformations (blank character, ...)
<INPUT TYPE="CHECKBOX" NAME="choice1" VALUE="choice 1 is selected">the choice 1<BR>
<INPUT TYPE="CHECKBOX" NAME="choice2">second choice<BR>
<INPUT TYPE="CHECKBOX" NAME="choice3">and the third one<BR>
<P>
Give your text : <INPUT TYPE="TEXT" NAME="wtext" VALUE="initial text"><BR>
Give your password : <INPUT TYPE="PASSWORD" NAME="wpass" VALUE="initial password"><BR>
<P>
<INPUT TYPE="SUBMIT" NAME="Send" VALUE="click here to send">
• is sent choice1=choice+1+is
+selected&choice2=on&wtext=my+text&wpass=my
+passwd&Send=click+here+to+send
XVII-17 JMF
Les servlets Le langage Java
How the parameters are sent?
• It depends of the way (the HTTP method)
• Method GET: in the URL
• Method POST: in the body of the HTTP request
• Usually POST is used
XVII-18 JMF
Les servlets Le langage Java
Exécution des servlets
XVII-19 JMF
Les servlets Le langage Java
Les Servlets
XVII-20 JMF
Les servlets Le langage Java
servlet = ?
• Une servlet est un programme (plug-in) à
ajouter à un serveur (quel qu'il soit).
• Ce cours a trait à la programmation Java
coté serveur (Java EE)
• Pour l'instant les serveurs acceptant des
servlets sont plutôt des serveurs Web.
• Contre-exemple : une servlet pour un
serveur de mail qui détruit les mails
contenant des virus.
XVII-21 JMF
Les servlets Le langage Java
application web = ?
• Les servlets sont une des techniques
utilisées pour construire des applications
web.
• "A web application is a dynamic extension
of a web or application server. There are
two types of web applications:
– Presentation-oriented: A presentation-oriented
web application generates interactive web pages
containing various types of markup language
(HTML, XML, and so on) and dynamic content
in response to requests.
– Service-oriented: A service-oriented web
application implements the endpoint of a web
service."
• [[Link]
XVII-22 docs/tutorial/doc/[Link]] JMF
Les servlets Le langage Java
application web = ?
• Euh en français :
• "Une application web est une extension
dynamique d'un serveur web ou applicatif.
Il y a deux types d'applications web :
– les application web orientées présentation qui
génèrent des pages web (HTML, XML)
dynamiquement
– les applications web orientées service : ce sont
les web services
• [[Link]
docs/tutorial/doc/[Link]]
XVII-23 JMF
Les servlets Le langage Java
Motivation et historique
• Nécessité d'avoir des pages HTML
dynamiques i.e. pages créées lors de la
requête (météo, cours de la bourse, vente
aux enchères, etc.)
• Technologie des scripts CGI.
• Le serveur Web demande à lancer un
programme par le protocole CGI
• Inconvénient : nécessite de créer un process
(sauf technique propriétaire)
XVII-24 JMF
Les servlets Le langage Java
CGI : la technique
• Le serveur Web, lorsqu'une URL de script
CGI est demandée, passe la main au
programme adéquat qui exécute le script.
• Ce programme génère la partie dynamique
en HTML.
• La page HTML est complétée par le serveur
Web et retournée au client Web.
XVII-25 JMF
Les servlets Le langage Java
Servlets
• La technique des CGI en Java
• MAIS
– Sans créer de processus
– toute la puissance des API Java (accès aux
divers domaines de l'informatique : BD,
multimédia, réseau, objets distribués,
composants, etc.)
– indépendance de la plate-forme (OS et machine)
XVII-26 JMF
Les servlets Le langage Java
Comment ça marche ?
• Le serveur (Web) possède désormais un
interpréteur Java (JVM)
• => il n'y a pas de processus créé lors de
l'exécution de code Java
• Cf. les clients Web possèdent un
interpréteur Java permettant de lancer des
applets.
• D'où le nom de servlets.
XVII-27 JMF
Les servlets Le langage Java
Moteurs de servlets (et de JSP)
• Pour exécuter des servlets (resp. des JSP), il
faut un moteur de servlets (resp. de JSP)
dans le serveur Web.
• Ces moteurs sont des plug-in pour des
serveurs Web existants
• Souvent des serveurs Web eux mêmes
• Un bon candidat plug-in : tomcat
([Link]
XVII-28 JMF
Les servlets Le langage Java
Serveurs Web et servlets
• Il existe des serveurs Web qui traitent les
servlets (et JSP) :
– IBM WebSphere
– BEA WebLogic Server 10
– JBoss
• Voir à
[Link]/products/servlet
XVII-29 JMF
Les servlets Le langage Java
Tomcat
• Développé par la communauté qui implémente
les spécifications des servlets et JSP.
• Téléchargeable (en version d'utilisation
élémentaire) gratuitement à
[Link]
• Plug-in de Apache, Microsoft IIS, …
• Est aussi un mini-serveur Web.
• "Apache Tomcat 6.x is the current focus of
development. It implements the Servlet 2.5 and
JSP 2.1 specifications."
XVII-30 JMF
Les servlets Le langage Java
Bidouilles Tomcat
• Il faut aussi :
– positionner la variable JAVA_HOME au
répertoire racine de la hiérarchie du SDK.
Exemple :
set JAVA_HOME=C:\Applications\jdk
• Documentation (d'installation et tutorial) de
tomcat à
[Link]
doc/[Link]
XVII-31 JMF
Les servlets Le langage Java
Programmation des servlets
• Utilise deux paquetages :
– [Link] : paquetage générique
– [Link] : paquetage pour
serveurs Web
• Ces paquetages ne sont pas dans Java SE
• Sont des paquetages supplémentaires qui sont apportés
avec l'installation de Tomcat.
• Ils sont aussi intégrés dans Java EE voir à
[Link]
• Pour ce cours sur les servlets, il n'est pas nécessaire
d'installer Java EE
XVII-32 JMF
Les servlets Le langage Java
Documentation et tutorial
• Documentation à
[Link]
• Tutorial à :
[Link]
XVII-33 JMF
Les servlets Le langage Java
Finalement une servlet =
• De manière similaire à une applet :
– une servlet est une classe Java chargée par JVM
intégrée au serveur.
– Lorsque cette classe a été chargée, la JVM construit
un objet de cette classe (instanciation).
– Parfois (souvent) c'est cet objet qui est appelé une
servlet.
XVII-34 JMF
Les servlets Le langage Java
Les états d'une servlet
• Cf. les états d'une applet. Le passage d'un
état à un autre est automatique et est fait
par le conteneur de servlets. service(...)
init() puis service(...)
Avant chargement
de la servlet
Servlet chargé Servlet exécuté
destroy()
Servlet déchargé
• Chargement = chargement en mémoire
dans le moteur (conteneur) de servlets (i.e.
la JVM).
• Le conteneur de servlets lance la méthode
XVII-35 service(…) à chaque requête. JMF
Les servlets Le langage Java
Méthodes fondamentales d'une
servlet
• Les trois méthodes
– public void init(),
– public void service(…),
– public void destroy()
sont définies dans la classe abstraite
[Link].
• service(...) contient deux paramètres
qui modélisent la requête et la réponse
XVII-36 JMF
Les servlets Le langage Java
Servlet pour serveur Web
• On a de nouveau les trois méthodes
– public void init(),
– public void service(…),
– public void destroy()
• spécialisées dans la classe abstraite
[Link]
qui sont lancées automatiquement. Cette
classe dérive de
[Link]
XVII-37 JMF
Les servlets Le langage Java
Construire une servlet pour
serveur Web
• Cf. construction des applets
• On construit une classe qui hérite de la
classe [Link]
• On spécialise les méthodes qui nous
intéressent
• On dépose cette classe « au bon endroit » du
serveur Web
XVII-38 JMF
Les servlets Le langage Java
service(...) dans HttpServlet
• Contient deux paramètres :
protected void
service(HttpServletRequest req,
HttpServletResponse resp) throws
ServletException, [Link]
• Le premier argument (HttpServletRequest
req) modélise la requête
• Le second argument (HttpServletResponse
resp) modélise la réponse
XVII-39 JMF
Les servlets Le langage Java
service(...) dans HttpServlet
(suite)
• service(...) de HttpServlet redirige la
requête suivant le type du message http.
• Méthode HTTP GET => doGet(…)
• Méthode HTTP POST => doPost(…)
XVII-40 JMF
Les servlets Le langage Java
doGet(…), doPost(…)
• Ont les mêmes paramètres que service(…)
de HttpServlet :
public void doXXX(HttpServletRequest
request, HttpServletResponse
response) throws ServletException,
[Link]
• En général on spécialise l'une des deux
méthodes et l’autre méthode appelle cette
première.
XVII-41 JMF
Les servlets Le langage Java
Récupérer les données de la
requête
• La requête envoie ses données par http
• Souvent des champs d'un formulaire
• On récupère ces données par
String getParameter(String
nomComposantFormulaire)
• sur request
• Cf. les applets
XVII-42 JMF
Les servlets Le langage Java
Récupérer les données de la
requête (2/2)
• Plus précisément si on a, dans la
page HTML :
Login : <input type="text" name="login" />
on doit avoir, dans les méthodes
respecter la casse (majuscules et
doXXX() de la servlet : minuscules significatives !)
String nomLogin = [Link]("login");
XVII-43 JMF
Les servlets Le langage Java
Envoyer une réponse
• On positionne le type MIME par :
void setContentType(String
type)
• On récupère le canal de sortie texte par :
PrintWriter getWriter()
• sur response
XVII-44 JMF
Les servlets Le langage Java
Une servlet : code complet
import [Link].*;
import [Link].*;
import [Link].*;
public class MaPremiereServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Etape 1. Spécifier le type MIME du contenu de la réponse
[Link]("text/html");
// Etape 2. Récupère le PrintWriter pour envoyer des données au client
PrintWriter out = [Link]();
// Step 3. Envoyer l’information au client
[Link]("<html>");
[Link]("<head><title>Bonjour Servlet</title></head>");
[Link]("<body>");
[Link]("<h1>Bonjour aux étudiants de l'UE GLG203</h1>");
[Link]("Il est : " + new [Link]());
[Link]("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
XVII-45 JMF
Les servlets Le langage Java
Démonstration
• On lance le serveur Web
• La servlet compilée est rangée sous
REP_INSTAL_TOMCAT\webapps\examples\WEB-
INF\classes
• correspond à l'URL : [Link]
8080/examples/servlet/MaPremiereServlet
Euh + bidouilles dans le fichier
REP_INSTAL_TOMCAT\webapps\exam
XVII-46 ples\WEB-INF\[Link] JMF
Les servlets Le langage Java
Quelques précisions
• Pour compiler on peut utiliser le script (qu'il
faut évidemment adapter !) :
set TOMCAT_HOME=C:\Applications\Tomcat
set OLD_CLASSPATH=%CLASSPATH%
set CLASSPATH=%TOMCAT_HOME%\lib\[Link];%CLASSPATH%
javac [Link]
copy [Link] %TOMCAT_HOME%\webapps\examples\WEB-INF\classes
set CLASSPATH=%OLD_CLASSPATH%
XVII-47 JMF
Les servlets Le langage Java
Les bidouilles du [Link] de
l'application web dans tomcat 6.x
• Le fichier [Link] du répertoire WEB-INF de
l'application web configure l'application web.
• L'élément <servlet> associe un nom à une classe
Java servlet
• L'élément <servlet-mapping> associe à ce nom
l'URL relative qui permet d'atteindre cette servlet
<servlet>
<servlet-name>nomQuelconque</servlet-name>
<servlet-class>MaPremiereServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>nomQuelconque</servlet-name>
<url-pattern>/servlet/MaPremiereServlet</url-pattern>
</servlet-mapping>
XVII-48 JMF
Les servlets Le langage Java
Architecture d'une application
web 1/3
❚ Une bonne référence est :
[Link]
doc/appdev/[Link]
❚ Depuis la version 2.2 des spécifications des servlets, les ressources
doivent être rangées comme indiqué ci dessous et diapos suivantes.
❚ Un site web est construit dans un arbre commençant au noeud
RACINE (eh oui !) : c'est le "document root of your application".
❚ Ce noeud est associé à un "context path" pour les URL.
❚ Exemple : si le "context path" de votre application est /catalog, le
fichier [Link] du répertoire RACINE est accessible par une
URL se terminant par /catalog/[Link]
XVII-49 JMF
Architecture d'une application
Les servlets Le langage Java
web 2/3
❚ Les fichiers .html et .jsp doivent être rangés à partir de
RACINE.
❚ /WEB-INF/[Link] : le fichier descripteur de déploiement de
votre application web
❚ /WEB-INF/classes/ : le répertoire racine de rangement
des .class (servlets compilés, etc.). Si les classes sont dans
des packages, la hiérarchie des packages doit être respectée à
partir de /WEB-INF/classes/. Par exemple la classe
[Link] doit être mise dans
/WEB-INF/classes/cnam/ihm/[Link]
XVII-50 JMF
Architecture d'une application
Les servlets Le langage Java
web 3/3
❚ /WEB-INF/lib/ : le répertoire contenant les .jar nécessaires à
votre application web (driver JDBC, etc.)
RACINE
WEB-INF [Link]
classes
lib
*.html, *.jsp
❚ On peut mettre tout cela dans un fichier compressé : un .war
XVII-51 JMF
Les servlets Le langage Java
Bibliographie
• Page de départ de la technologie servlets :
[Link]
[Link]
• Java servlets, Jason Hunter, ed O'Reilly
traduit en français
XVII-52 JMF
Les servlets Le langage Java
Fin
XVII-53 JMF