Programmation distribu´ee avec Java et J2EE
Applications Web
Christophe Garion
ISAE/DMIA - SUPAERO/IN
10 avenue ´
Edouard Belin
31055 Toulouse Cedex 4
Christophe Garion IN328 Webapps 1/ 88
Plan
1Introduction : applications Web
2Servlets
D´efinition et cycle de vie
Servlets HTTP
Transfert et inclusion
Communiquer entre ressources
Pour aller plus loin. . .
3JavaServer Pages
D´efinition et exemple
Cycle de vie, traduction et compilation
G´en´erer du contenu dynamique
Christophe Garion IN328 Webapps 2/ 88
Introduction : applications Web Servlets JSP
Probl´ematique
On cherche ici `a ´etendre dynamiquement un serveur Web :
du cˆot´e pr´esentation en g´en´erant des pages HTML
d’un point de vue service en utilisant des Web Services (non abord´e ici).
Principe :
Client Web
Serveur Web ´etendu
HttpServlet
Response
HttpServlet
Request
Web
Components
HTTP Request
HTTP Response
Christophe Garion IN328 Webapps 4/ 88
Introduction : applications Web Servlets JSP
Solutions techniques propos´ees par J2EE
Composants Web `a notre disposition :
des servlets (d´efinies par une sp´ecification) : ce sont des classes Java
utilisant un mod`ele requˆete/r´eponse
des JSP (Java Server Pages) qui sont des contenus textuels statiques
s’ex´ecutant comme des servlets
JSP + Tags
des JSF (Java Server Faces) qui permettent d’avoir un MVC
Java Servlet
JSP
JSP Tag Library JSF
Christophe Garion IN328 Webapps 5/ 88
Introduction : applications Web Servlets JSP
Web container
Les composants Web utilisent un Web container :
c’est une plateforme d’ex´ecution (JVM)
des services sont fournis par le Web Container : s´ecurit´e, multithreading,
transactions, email etc.
Cycle de d´eveloppement d’une application Web :
1d´eveloppement des composants
2descripteur de d´eploiement de l’application
3compilation des composants
4´eventuellement packaging des composants
5d´eploiement de l’application dans un Web Container
6test (difficile ?) en utilisant l’URL de l’application
Christophe Garion IN328 Webapps 6/ 88
Introduction : applications Web Servlets JSP
Modules Web
efinition (module web)
Un module Web est un ensemble de ressources (composants Web,
fichiers statiques, classes utilitaires) d´eployables et utilisables par un web
container.
On va trouver dans un module Web :
des servlets
des JSP
des pages HTML statiques
des classes utilitaires serveur
des classes utilitaires client (applets par exemple)
Christophe Garion IN328 Webapps 7/ 88
Introduction : applications Web Servlets JSP
Architecture d’un module Web
Assembly root
WEB-INF
web.xml
configuration
classes
server-side :
servlets, classes
tags lib
librairies used
server-side
static HTML,
JSP pages,
applets
On peut ´egalement la «compacter »dans une archive WAR.
Christophe Garion IN328 Webapps 8/ 88
Introduction : applications Web Servlets JSP
Le fichier de configuration web.xml
Le fichier web.xml permet de configurer une application Web.
Il contient en particulier des chemins d’alias permettant de savoir quel
composant doit r´epondre `a quelle requˆete en utilisant l’URL de la requˆete.
Une URL contiendra toujours un context root (qui correspondra souvent
`a l’assembly root) et un alias path.
Par exemple, pour l’URL
http://localhost:8080/mesServlets/essai :
context root : mesServlets
alias path : essai
L’alias path peut ˆetre :
un nom pour les servlets
un nom de fichier .jsp pour une JSP (ou .html pour un fichier HTML
etc.)
Christophe Garion IN328 Webapps 9/ 88
Introduction : applications Web Servlets JSP
web.xml : un exemple de mapping
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app>
<servlet>
<servlet-name>maServletAMoi</servlet-name>
<servlet-class>fr.supaero.servlets.MaServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>maServletAMoi</servlet-name>
<url-pattern>/essai</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>servletParam</servlet-name>
<servlet-class>fr.supaero.servlets.ServletParam</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servletParam</servlet-name>
<url-pattern>/param</url-pattern>
</servlet-mapping>
</web-app>
Christophe Garion IN328 Webapps 10/ 88
Introduction : applications Web Servlets JSP
web.xml : exemple de requˆete
Client Web Web container :MaServlet
:HttpServletResponse
:HttpServletRequest
http://hote/context/essai
create
create
requete(httpServletRequest)
httpServletResponse
response
Christophe Garion IN328 Webapps 11/ 88
Introduction : applications Web Servlets JSP
Servlet : motivation et d´efinition
Pourquoi les servlets ?
applets ex´ecut´ees cˆot´e client ;
limitations des scripts CGI (s´ecurit´e, ressources utilis´ees, portabilit´e,
maintenabilit´e).
efinition (servlet)
Une servlet est une classe Java utilisant un mod`ele requˆete/r´eponse et
r´epondant `a une sp´ecification pr´ecise (2.5 `a ce jour).
On dispose d’une interface javax.servlet.Servlet avec les m´ethodes :
init(ServletConfig config)
service(ServletRequest req, ServletResponse res)
destroy()
ServletConfig getServletConfig()
Christophe Garion IN328 Webapps 13/ 88
Introduction : applications Web Servlets JSP
Cycle de vie d’une servlet
destroy()
service()
init()
requˆete
une servlet est associ´ee `a un nom de
ressource d´efini dans web.xml
au premier appel `a ce nom, la classe est
charg´ee dans la JVM et on le container
l’instancie
requˆete sur la servlet :
cr´eation des objets requˆete et r´eponse
cr´eation d’un thread
appel `a service (ou une sous-m´ethode)
fin de vie : appel `a destroy et destruction
de l’objet
On peut inscrire des listeners sur les ´ev´enements se d´eroulant dans le
cycle de vie d’une servlet (non vu ici).
Attention `a l’utilisation des threads !
Christophe Garion IN328 Webapps 14/ 88
Introduction : applications Web Servlets JSP
La classe ServletRequest
Un objet de cette classe est pass´e en param`etre de service.Il est cr´e´e
par le container.
Il permet pour la servlet d’avoir les param`etres demand´es par le client
pour la requˆete.
M´ethodes :
java.lang.String getContentType() pour d´eterminer le type MIME de
la requˆete
ServletInputStream getInputStream() pour obtenir le corps de la
requˆete
java.io.BufferedReader getReader() pour obtenir le corps de la
requˆete
int getContentLength() pour obtenir la longueur de la requˆete
java.lang.String getProtocol() pour obtenir le protocole utilis´e par
la requˆete
java.lang.String getRemoteHost() pour obtenir des informations sur
la machine cliente (ou le proxy)
Christophe Garion IN328 Webapps 15/ 88
Introduction : applications Web Servlets JSP
ServletRequest : comment r´ecup´erer des
param`etres
R´ecup´eration des param`etres via des m´ethodes de ServletRequest :
String getParameter(String name)
java.String[] getParameterValues(String name)
java.util.Enumeration getParameterNames()
java.util.Map getParameterMap()
Par exemple pour HTTP : http://.../nomRessource?id=Tof&nb=2,3
Appel R´esultat
getParameter("id") Tof
getParameter("nb") 2,3
getParameterMap() id → {Tof }
nb → {2,3}
Christophe Garion IN328 Webapps 16/ 88
Introduction : applications Web Servlets JSP
La classe ServletResponse
Un objet de cette classe est ´egalement pass´e en param`etre de service. Il
est ´egalement cr´e par le container.
Il permet pour la servlet de r´epondre au client.
M´ethodes :
setContentType(java.lang.String type) pour positionner le type
MIME de la r´eponse
setContentLength(int len) pour positionner la longueur de la r´eponse
ServletOutputStream getOutputStream() pour obtenir un flux de
r´eponse
java.io.PrintWriter getWriter() pour obtenir un flux de r´eponse
flushBuffer() pour «flusher »le contenu de la r´eponse
. . .
Christophe Garion IN328 Webapps 17/ 88
Introduction : applications Web Servlets JSP
Initialiser une servlet
La m´ethode init est appel´ee une fois lorsque la servlet est instanci´ee la
premi`ere fois.
Elle permet donc par exemple de r´ecup´erer des informations comme une
connexion vers une base de donn´ees.
On peut utiliser web.xml pour passer des param`etres `a init via un objet
de type ServletConfig :
public void init(ServletConfig config) {
super.init(config);
String bd = getInitParameter("serveurBD");
}
<servlet>
<servlet-name>essai</servlet-name>
<servlet-class>MaPremiereServlet</servlet-class>
<init-param>
<param-name>serveurBD</param-name>
<param-value>monServeur:8120</param-value>
</servlet>
Christophe Garion IN328 Webapps 18/ 88
Introduction : applications Web Servlets JSP
Le protocole HTTP
Nous allons utiliser ici HTTP (HyperText Transfer Protocol).
Dans HTTP, les m´ethodes sont des commandes demandant au serveur
d’effectuer une action :
GET : demande une ressource. Les param`etres sont pass´es dans l’URL. On
peut la r´ep´eter sans changement.
POST : utiliser pour ajouter une ressource. Les param`etres sont pass´es dans
le corps du message.
HEAD
PUT : ajoute ou remplace une ressource.
DELETE : efface une ressource.
TRACE
CONNECT : utilisation d’un proxy.
OPTIONS
Christophe Garion IN328 Webapps 20/ 88
Introduction : applications Web Servlets JSP
HTTP : est ce que ¸ca marche ?
Exemple sur ma machine :
% telnet localhost 80
Trying ::1...
Connected to localhost.
Escape character is ’^]’.
GET /index.html
<html><body><h1>It works!</h1></body></html>
Connection closed by foreign host.
On r´ecup`ere bien le fichier HTML correspondant `a la page d’accueil de
Apache (serveur utilis´e sur ma machine).
Christophe Garion IN328 Webapps 21/ 88
Introduction : applications Web Servlets JSP
La classe HttpServlet
Pour utiliser le protocole HTTP, on utilise une r´ealisation de Servlet, la
classe abstraite HttpServlet (elle appartient au paquetage
javax.servlet.http)
Cette classe poss`ede des m´ethodes pour chaque type de requˆete (la
m´ethode service dispatche les requˆetes en fonction de la m´ethode
HTTP demand´ee) :
doGet
doPost
doPut
doDelete
Remarque
Ces m´ethodes utilisent des objets de type HttpServletRequest et
HttpServletResponse.
Christophe Garion IN328 Webapps 22/ 88
Introduction : applications Web Servlets JSP
Un premier exemple de servlet HTTP
package fr.supaero.servlets;
import javax.servlet.http.*;
import javax.servlet.ServletException;
public class MaServlet extends HttpServlet {
public void init() throws ServletException {
}
public void destroy() {
}
}
Christophe Garion IN328 Webapps 23/ 88
1 / 20 100%
La catégorie de ce document est-elle correcte?
Merci pour votre participation!

Faire une suggestion

Avez-vous trouvé des erreurs dans linterface ou les textes ? Ou savez-vous comment améliorer linterface utilisateur de StudyLib ? Nhésitez pas à envoyer vos suggestions. Cest très important pour nous !