0% ont trouvé ce document utile (0 vote)
27 vues53 pages

Servlets

Le document présente les servlets Java, qui sont des programmes exécutés sur un serveur web pour générer des pages web dynamiques. Il explique l'architecture client-serveur, le fonctionnement des requêtes et réponses HTTP, ainsi que les techniques utilisées pour traiter ces requêtes. Enfin, il aborde la programmation des servlets, les méthodes fondamentales et l'utilisation de moteurs de servlets comme Tomcat.

Transféré par

bobo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
27 vues53 pages

Servlets

Le document présente les servlets Java, qui sont des programmes exécutés sur un serveur web pour générer des pages web dynamiques. Il explique l'architecture client-serveur, le fonctionnement des requêtes et réponses HTTP, ainsi que les techniques utilisées pour traiter ces requêtes. Enfin, il aborde la programmation des servlets, les méthodes fondamentales et l'utilisation de moteurs de servlets comme Tomcat.

Transféré par

bobo
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

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

Vous aimerez peut-être aussi