0% ont trouvé ce document utile (0 vote)
47 vues42 pages

Cours Servlets

Le document traite de la programmation web avec un accent sur Tomcat et les servlets, en abordant des spécifications J2EE, l'architecture des applications multi-tiers et la configuration de Tomcat. Il décrit également le cycle de vie des servlets, les types de servlets, ainsi que la gestion des requêtes et des réponses HTTP. Enfin, il aborde la gestion des sessions et des formulaires dans les applications web.

Transféré par

reubeuenechec
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 PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
47 vues42 pages

Cours Servlets

Le document traite de la programmation web avec un accent sur Tomcat et les servlets, en abordant des spécifications J2EE, l'architecture des applications multi-tiers et la configuration de Tomcat. Il décrit également le cycle de vie des servlets, les types de servlets, ainsi que la gestion des requêtes et des réponses HTTP. Enfin, il aborde la gestion des sessions et des formulaires dans les applications web.

Transféré par

reubeuenechec
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 PPT, PDF, TXT ou lisez en ligne sur Scribd

Programmation Web

Tomcat et les Servlets


Spécification J2EE
• Servlet, JSP
• JAX (JAX-P, JAX-B, JAX-R, JAX-RPC)
• JNDI, JMS
• EJB, JTA, JTS
• JavaMail, JDBC
• JMX, J2EE Connector, etc.
Application multi-tiers

L’application Web
est décomposée
en plusieurs
parties (tiers)
Conteneurs de Servlet
• Tomcat
• GlassFish
• IronFlare Orion
• Jetty
• Caucho Resin
• Sun ONE
• IBM WebSphere
• BEA WebLogic
Tomcat
• Tomcat (appelé aussi Catalina)
• Projet Apache (Apache  Apache pour
PHP)
• Open source
• Implantation de référence de la
spécification
• Spécification Servlet et JSP
Servlet & Conteneur
Le conteneur de servlets associe à
des URLs virtuelles à une servlet

Browser HTTP

/admin/*
Requête servlet 1
/vignette/*.html
Réponse
/examples/*.html servlet 2

Conteneur de Servlets
Répertoire de Tomcat
Organisation des répertoires de Tomcat

scripts startup & shutdown


/bin jar utilisés par Tomcat (Ant, Servlet, etc.)
/lib
/conf configuration: [Link], [Link], [Link]
/logs
/webapps fichiers de logs

zone de déploiement
Configuration Tomcat
Le fichier [Link]
• Server
Racine, spécifie le port de shutdown.
• Service
Associe des connecteurs à un engine.
• Connector
Ils correspondent à un point d’accès à un service,
soit via un serveur soit en connexion directe.
• Engine
correspond au conteneur de servlet en lui-même.
• Logger
Ils effectuent la journalisation.
• Host
Déclare où sont stockées les servlets pour un nom de machine.
• Context
Chaque Context représente la configuration associée à un chemin
dans la hiérarchie
Configuration Tomcat (2)
port d’écoute

Un Connector point d’accès utilisable par un client :


• port="8080"
• minProcessors="5" nombre de threads minimum
• maxProcessors="75"
• enableLookups="true" nombre de threads maximum
• acceptCount="100"
• DNS inverse
connectionTimeout="20000"
nombre de connections pendantes
Le conteneur Engine
• name="Standalone"
• defaultHost="localhost"
Nom de l’host si pas HTTP 1.1
Configuration Tomcat (3)
Gestion des associations entre un URI
et un chemin sur le disque

Un Context représente l’association entre un chemin


sur le serveur (URI) et un chemin sur le disque
• path= "/examples" URI d’accès
• docBase="examples"
• reloadable="true" Chemin d’accès des fichiers
(relatif ou absolu par rapport à webapps)

Détection automatique des changements


et rechargement si besoin
Architecture d’une appli Web
Une application Web possède dans un
repertoire lui-même dans webapps une
architecture spécifique

Nomdemawebapp fichiers HTML, jsp, images, javascript


*.html, *.jsp
/WEB-INF/[Link] fichier de configuration (XML)
/WEB-INF/classes/
classes des servlets
/WEB-INF/lib/
fichiers jar des servlets

L’ensemble des fichiers et répertoire peut être mis dans un war (Web Archive)
grâce à la commande jar. Le war est automatiquement dé-jarré s’il est placé
dans le répertoire webapps.
Configuration d’une appli Web
Le fichier [Link]
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"[Link]
<web-app>
<display-name>Mon application Web</display-name>
<servlet> nom de la servlet
<servlet-name>maServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
<url-pattern>*.test</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>maServlet</servlet-name>
<url-pattern>/toto</url-pattern> URI d’accès
</servlet-mapping>
</web-app>
Configuration d’une appli Web
Paramètres d’initialisation d’une servlet
association name/value
<servlet>
<servlet-name>maServlet</servlet-name>
<servlet-class>[Link]</servlet-class>
<init-param>
<param-name>parametre1</param-name>
<param-value>valeur1</param-value>
</init-param>
<init-param>
<param-name>parametre2</param-name>
<param-value>valeur2</param-value>
</init-param>
</servlet>
Generic vs HTTP Servlet
Il existe deux types de servlets
• Les GenericServlet qui ne pré-suppose
pas d’un protocole
• Les HttpServlet qui repondent à des
clients par le protocole HTTP

GenericServlet est une classe du paquetage [Link] tandis que


HttpServlet est une classe du paquetage [Link]
Cycle de vie d’une servlet
Le cycle de vie d'une servlet :
[Link] méthode init() est appelée après le
chargement ;
[Link] méthode service() est appelée à
chaque requête dans une nouvelle
thread.
[Link] méthode destroy() est appelée pour
le déchargement.
La synchronisation est gérée par l’objet Response
HelloServlet
La méthode service() est appelée avec
un objet requête et un objet réponse
import [Link].*;
import [Link].*;

public class HelloServlet extends GenericServlet {

public void service(ServletRequest request, ServletResponse response)


throws ServletException, IOException {
PrintStream out = new PrintStream([Link]());
[Link]("Hello World!");
}
public String getServletInfo() {
return "Hello World Servlet";
}
} L’objet réponse permet d’obtenir
le flux de sortie en écriture
Information textuelle sur la servlet
L’interface Request
L'interface ServletRequest permet de récupérer les paramètres de la requête :
public abstract int getContentLength()
public abstract String getContentType()
public abstract String getProtocol() Description du serveur
public abstract String getScheme()
public abstract String getServerName()
public abstract int getServerPort() Description du client
public abstract String getRemoteAddr()
public abstract String getRemoteHost()
public abstract ServletInputStream getInputStream() throws IOException
public abstract String getParameter(String name)
public abstract String[] getParameterValues(String name)
public abstract Enumeration getParameterNames()
public abstract Object getAttribute(String name)

Il est possible de rajouter


des attributs (non HTTP)
L’interface Response
L'interface ServletResponse permet de renvoyer une réponse :
public abstract void setContentLength(int length)
public abstract void setContentType(String type)
public abstract ServletOutputStream getOutputStream() throws IOException

Taille de la réponse
(peut être omis)

Type de contenu au
format MIME

L’objet réponse permet d’obtenir


le flux de sortie en écriture
Fichier de configuration
Le fichier [Link] correspondant
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"[Link]
<web-app>
<display-name>Appli de Demo</display-name>
<description>Ceci est une série de servlets de démo</description>

<servlet>
<servlet-name>hello</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>

<servlet-mapping>
<servlet-name>hello</servlet-name>
<url-pattern>/[Link]</url-pattern>
</servlet-mapping> Le ‘/’ ici est par rapport
</web-app> à l’application Web
Hello World

Le conteneur de servlets
fait l’association entre
l’URL et la servlet
Hello World (2)
Répertoires sur le serveur
Les servlets HTTP
• La méthode service de la classe HttpServlet est
déjà implantée et redirige les requêtes vers les
méthodes do*
• Les méthodes sont doDelete, doGet, doHead,
doOptions, doPost, doPut, doTrace

protected void do*(HttpServletRequest req,


HttpServletResponse resp) throws
ServletException, IOException
HTTP HelloWorld
HelloWorld réécrit avec une servlet HTTP
import [Link].*;
import [Link].*;
import [Link].*;

public class HelloHttpServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
[Link]("text/plain");
PrintWriter out = [Link]();
[Link]("HTTP Hello World!");
}
public String getServletInfo() {
return "HTTP Hello World Servlet"; L’objet réponse permet d’obtenir
} le flux de sortie en écriture
}
Informations sur la requête
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/plain");
PrintWriter out= [Link](); GET, POST, PUT etc.
[Link]("Protocol: " + [Link]());
[Link]("Scheme: " + [Link]());
[Link]("ServerName: " + [Link]());
[Link]("ServerPort: " + [Link]()); Chemin virtuel complet
[Link]("RemoteAddr: " + [Link]());
[Link]("RemoteHost: " + [Link]());
[Link]("Method: " + [Link]());
[Link]("requestuestURI: " + [Link]()); Chemin de la servlet
[Link]("ServletPath: " + [Link]());
[Link]("PathInfo: " + [Link]());
[Link]("PathTranslated: " + [Link]());
[Link]("QueryString: " + [Link]()); Chemin de la
[Link]("RemoteUser: " + [Link]()); ressource
[Link]("AuthType: " + [Link]());
}

Chemin sur le serveur


Informations sur la requête (2)
Déclaration de la servlet « header »
Définition des servlets

<servlet>
<servlet-name>header</servlet-name>
<servlet-class>[Link]</servlet-class>
</servlet>
<servlet>

</servlet> Chemin de la servlet
...
<servlet-mapping>
<servlet-name>header</servlet-name>
<url-pattern>/header/*</url-pattern>
</servlet-mapping>

Définition des associations


Réponse HTTP
L’objet HttpServletResponse permet en
plus de renvoyer des codes d’erreurs
public class HttpRedirectServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

if ("/[Link]".equals([Link]()))
[Link]("/demo/header/[Link]");
else
[Link](HttpServletResponse.SC_NOT_FOUND);
}
}

Redirection HTTP
SC = Status Code
Les formulaires
Deux méthodes de passage de paramètres :
• GET (dans l’URL)
• POST (dans la requête HTTP)

Gestion uniforme au niveau des servlets


Les formulaires GET
HTML pour la méthode GET
<form enctype="application/x-www-form-urlencoded"
action="subscribe" method=GET>
Titre :
<select name=title>
<option value="Mr">Mr
<option value="Ms">Mme
</select>
Nom :
<input type=text size=20 name=username>
Prénom :
<input type=text size=20 name=firstname>
<hr>
<input type=submit value="Envoi">
<input type=reset value="Réinitialiser">
</form>
Les formulaires GET (2)
Utilisation des méthodes getParameter*()
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
Équivalent à $_GET[‘username’] en PHP
[Link]("text/html");
PrintWriter out= [Link]();
[Link]("<html><body bgcolor=\"white\">");
String e=[Link](‘’username’’);

[Link](name+'='+e+"<br>");

[Link]("</body></html>");
} Valeurs d’un paramètre
de la requète
Les formulaires POST
HTML pour la méthode POST
<form enctype="application/x-www-form-urlencoded"
action="subscribe" method=POST>
Titre :
<select name=title>
<option value="Mr">Mr
<option value="Ms">Mme
</select>
Nom :
<input type=text size=20 name=username>
Prénom :
<input type=text size=20 name=firstname>
<hr>
<input type=submit value="Envoi">
<input type=reset value="Réinitialiser">
</form>
Les formulaires POST (2)
Utilisation des méthodes getParameter*()
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html");
PrintWriter out= [Link](); Équivalent à $_POST [‘username’] en P
[Link]("<html><body bgcolor=\"white\">");
String e=[Link](‘’username’’);

[Link](name+'='+e+"<br>");
[Link]("</body></html>");
}
Valeurs d’un paramètre
de la requète
Inclusion & Redirection
• L’interface RequestDispatcher :
- include(request,response)
- forward(request,response)

• Obtenir un RequestDispatcher :
getServletContext().getRequestDispatcher(path)

Chemin correspondant
• soit à une servlet
• soit à un fichier
Inclusion & Redirection (2)
La redirection n’est pas visible au niveau du client
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {

getServletContext().getRequestDispatcher("/[Link]").
forward(request,response); fichier
}

L’inclusion permet d’inclure plusieurs fois des ressources


protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html"); servlet
getServletContext().getRequestDispatcher("/[Link]").
include(request,response);
getServletContext().getRequestDispatcher("/[Link]").
include(request,response);
}
Inclusion & Redirection (3)
Plusieurs problèmes :
• Forward :
- ne pas faire de setContentType() avant
- ne rien faire après un forward sur le
flux de sortie

• Inclusion :
- eviter setContentType() après,
- enlever les balises <html> et <body>
dans la ressource inclue
Session
Permettre de garder des informations
d’une requête à l’autre

• Problème :
HTTP est un protocole sans état
• Solutions :
– Authentification
– Session (Cookie, URL rewriting)
Session (2)
L’objet HttpSession gère les sessions
Créé une session si
Création : non existante
[Link]()
[Link](boolean create)

Gestion d’association clé/valeur :


[Link]()
[Link](String name)
[Link](String name, Object value)
[Link](String name)

Destruction :
session. invalidate()
Invalide toutes les sessions
session. logout()
pour un client
Session (3)

Ouverture et
fermeture
d’une
session
Session (4)
Requête GET sur la servlet
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/html");
PrintStream out = new PrintStream([Link]());
[Link]("<html><body bgcolor=\"white\">");
HttpSession session=[Link](false);
if (session!=null) {
[Link]("<h1>Welcome "+[Link]("username")+
' '+[Link]("firstname")+"</h1><hr>");
}
getServletContext().getRequestDispatcher("/[Link]").
include(request,response);
Demande une session
[Link]("</body></html>");
sans création automatique
}
Session (5)
Requête POST sur la servlet

protected void doPost(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {
HttpSession session=[Link]();
if ([Link]("logout")==null) {
[Link]("username", [Link]("username"));
[Link]("firstname", [Link]("firstname"));
}
else
[Link]();
doGet(request,response);
} Demande une session
avec création automatique
Paramètres d’initialisation
Les paramètres sont déclarés dans le
fichier [Link]

<servlet>
<servlet-name>initParam</servlet-name>
<servlet-class>[Link]</servlet-class>
<init-param>
<param-name>count</param-name>
<param-value>5</param-value>
</init-param>
<init-param>
<param-name>message</param-name>
<param-value>hello config</param-value>
</init-param>
</servlet>
Paramètres d’initialisation (2)
L’objet ServletConfig permet de récupérer
les paramètres
public class InitParamServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
[Link]("text/plain"); Demande la valeur du
PrintWriter out= [Link](); paramètre "count"
for(int i=0;i<count;i++) {
[Link](message);
}
}
public void init(ServletConfig config) throws ServletException {
count = [Link]([Link]("count"));
message = [Link]("message");
}
private int count;
private String message;
}
Paramètres d’initialisation (3)
Le destroy doit libérer les ressources !!
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
… Stockage des paramètres
}
public void init(ServletConfig config) throws ServletException {
[Link](config);

count = [Link]([Link]("count"));
message = [Link]("message");
}
public void destroy() {
message=null;
}

private int count;


Libération des paramètres
private String message;

Vous aimerez peut-être aussi