Beruflich Dokumente
Kultur Dokumente
Servlets et API
Architecture de dveloppement
Cycle de vie
Suivi de session
Collaboration de Servlets
keulkeul.blogspot.com
Scurit : authentification
Processus principal
Rponse HTTP
Requte HTTP
Conteneur de Servlets
Servlet 1
Servlet 2
Client WEB
Servlet 3
Thread
keulkeul.blogspot.com
Applet (SWING)
Tlphone portable (WAP)
Navigateur (HTML)
Servlets - M. Baron - Page 41
Puissance des Servlets
Portabilit
Technologie indpendante de la plate-forme et du serveur
Un langage (Java) et plusieurs plate-forme (.NET plusieurs langages
et une plate-forme)
Puissance
Disponibilit de lAPI de Java
Manipulation dimages, connectivit aux bases de donnes (JDBC),
Efficacit et endurance
Une Servlet est charge une seule fois (CGI charge puis dcharge
aprs utilisation)
keulkeul.blogspot.com
out.println("<HTML>");
out.println("<HEAD><TITLE>Bonjour tout le monde</TITLE></HEAD>");
out.println("<BODY>");
out.println("<BIG>Bonjour tout le monde</BIG>");
keulkeul.blogspot.com
out.println("</BODY></HTML>");
}
}
requte
keulkeul.blogspot.com
service(...)
rponse
rponse
requte GET doGet(...)
keulkeul.blogspot.com
service(...)
rponse doPost(...)
requte POST
HelloWorldError.java
du projet
keulkeul.blogspot.com
HelloWorldServlet
InfosServlet.java du
projet InfosServlet
Exemples de mthodes
void setStatus(int) : dfinit le code de retour de la rponse
keulkeul.blogspot.com
out.println("Premier Message");
out.println("Coucou voil comment crire un message");
out.println("Second Message");
}
}
keulkeul.blogspot.com
HelloWorldPrintWriter.java
du projet HelloWorld
SendRedirect.java du
projet HelloWorld
keulkeul.blogspot.com
int count;
byte buf[] = new byte[4096];
while ((count = is.read(buf)) > -1)
os.write(buf, 0, count);
keulkeul.blogspot.com
is.close();
os.close(); En-tte de la rponse
} catch (Exception e) { adapte pour retourner
// Y a un problme. un fichier
}
} DownloadFileServlet.java du
} projet DownloadFileServlet
if (count > 0) {
resp.setHeader("Refresh","1"); Toutes les 1 seconde
count-- la page est recharge
out.println(count + "...");
et cela 10 fois de suite
} else {
out.println("Fin");
}
}
keulkeul.blogspot.com
PullClientServlet.java du projet
PullClient
}
out.println("Content-Type: text/plain");
out.println();
Connexion ferme
out.println("Fin"); rponse envoye au
out.println("--End--");
out.flush(); client
}
} PushServerServlet.java du
projet PushServer Servlets - M. Baron - Page 58
Servlets et formulaires : du cot HTML
Le formulaire appelle
<body>
<p>Formulaire de satisfaction du cours Servlet/JSP </p>
index.html du projet
UIForm
keulkeul.blogspot.com
if (req.getParameterValues("radio1")[0].equals("mas")) {
out.print("C'est un homme. Il");
keulkeul.blogspot.com
} else {
out.print("C'est une femme. Elle");
}
UIFormServlet.java du projet
UIForm Servlets - M. Baron - Page 61
Architecture de dveloppement d'une application WEB
/HelloWorldServlet/* Servlet 1
requte
keulkeul.blogspot.com
rponse /*.html
Servlet 2
/FormulaireServlet/*.htm
Conteneur de Servlets
Serveur Web
classes
Classes (bytecode) des Servlets
*.jar, *.class
lib
Fichiers bibliothques sous
diffrents formats
</servlet-mapping>
<servlet-mapping>
<servlet-name>HelloWorldServlet</servlet-name>
<url-pattern>/msg.hello</url-pattern>
</servlet-mapping>
Une seule faon dappeler <servlet-mapping>
la Servlet <servlet-name>HelloWorldPrintWriter</servlet-name>
<url-pattern>/printwriter.html</url-pattern>
HelloWorldPrintWriter </servlet-mapping>
</web-app>
Servlets - M. Baron - Page 67
Le fichier web.xml : cest quoi ?
Serveur
</servlet-mapping>
WEB ...
http://localhost:8080/HelloWorldServlet
http://localhost:8080/HelloWorldServlet/bonjour.toutpourservlet
keulkeul.blogspot.com
http://localhost:8080/HelloWorldServlet/hello.toutpourservlet
http://localhost:8080/HelloWorldServlet/HelloWorldServlet/msg.hello
InitCounterServlet.java du
projet Counter Servlets - M. Baron - Page 74
Cycle de vie d'une Servlet : mthode init()
<servlet>
<servlet-name>InitConfigFileCounterServlet</servlet-name>
Balise qui dtermine la <servlet-class>InitConfigFileCounterServlet</servlet-class>
valeur du paramtre <init-param>
<param-name>initial_counter_value</param-name>
<param-value>50</param-value>
<description>Valeur initiale du compteur</description>
keulkeul.blogspot.com
count++;
Exemples de ressources
Connexion une base de donnes
...
} finally {
if (bufferedReader != null)
bufferedReader.close();
}
}
} InitDestoryCounterServlet.java
du projet Counter
Servlets - M. Baron - Page 79
Envoyer un contenu multimdia
g = buffer_image.createGraphics();
g.setFont(new Font("Serif", Font.ITALIC, 48));
g.drawString("Bonjour tout le monde !", 10,50);
encode.encode(buffer_image);
out.close();
}
}
GenerateImageServlet.java du
projet Multimedia
Servlets - M. Baron - Page 81
Suivi de session
Rcriture dURL
Cookies persistants
Suivi de session
Servlets - M. Baron - Page 82
Cookies persistants : Cookie
res.addCookie(c);
out.println("Bonjour le nouveau");
Gnre un identifiant
} else {
out.println("Encore vous"); ... } unique pour chaque
} client
}
CookiesServlet.java du projet
Cookies Servlets - M. Baron - Page 86
Suivi de session : HttpSession
Lutilisateur peut
configurer son
navigateur pour quil
refuse ou pas les
cookies
keulkeul.blogspot.com
HttpSessionServlet.java
du projet HttpSession
keulkeul.blogspot.com
Client n2
...
throws ServletException, IOException {
Lecture des
attributs
keulkeul.blogspot.com
PizzasClient.java du projet
ServletContext Servlets - M. Baron - Page 92
Partage dinformation
Servlet 1
keulkeul.blogspot.com
Servlet 2
Servlet 3
Ne fonctionne
que dans le Servlet 4 Communication
par le contexte
mme serveur
Serveur Web
WEB Servlets - M. Baron - Page 93
Partage dinformation
DateFormat df = DateFormat.getDateInstance(DateFormat.MEDIUM);
String today = df.format(day);
ReadSharePizzas.java du projet
Pour communiquer entre contextes, CrossServletContext
il faut autoriser la communication
inter-contextes (voir partie suivante)
Servlets - M. Baron - Page 94
Collaboration de Servlets : partage du contrle
req.setAttribute("bonsoir", "Bonsoir");
keulkeul.blogspot.com
dispat.include(req,res);
out.println("<br>");
out.println("</BODY></HTML>");
}
} IncluderServlet.java du projet
ForwardInclude
Servlets - M. Baron - Page 101
Partage du contrle : distribuer une inclusion
IncludedServlet.java du projet
ForwardInclude
GET / HTTP/1.1
Application
HTTP/1.1 401 Unauthorized WEB
WWW-Authenticate: BASIC
realm="Users"
GET / HTTP/1.1
Autorisation: BASIC RkfddsIRSddO=
Client Web Serveur Web Vrification si l'utilisateur
est connu et son mot de
Principe des autorisations de type FORM passe correct
GET / HTTP/1.1
keulkeul.blogspot.com
Application
HTTP/1.1 200 OK
Content-Type: text/html
WEB
...
POST / HTTP/1.1
...
Serveur Web
Client Web
Donnes caches et non visible
Servlets - M. Baron - Page 104
Scurit : deux familles d'identification pour les Servlets
No
t i
en si
n
Id rus
keulkeul.blogspot.com
loginpage.html
</web-app>
page des erreurs de
web.xml du projet connexion
AuthentificationFormByRoles
<INPUT TYPE=SUBMIT>
</FORM>
return false;
Servlet de Correcte
traitement
login.html
Errone
} else {
req.getSession().setAttribute("logon.isDone", account);
out.println("Bravo : " + account); Lidentification est
}
}
russie et on modifie la
... session en ajoutant le
} nom de lutilisateur
SecurityFormServlet.java du projet
AuthentificationFormByServlet
Servlets - M. Baron - Page 113
Se connecter aux bases de donnes
Charger le pilote
Se connecter la base
Crer et excuter une requte SQL
Traiter le rsultat si ncessaire Servlets - M. Baron - Page 114
Se connecter aux bases de donnes : charger un pilote
pas trouve
Class.forName("org.apache.derby.jdbc.ClientDriver");
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Chargement du
pilote ODBC Servlets - M. Baron - Page 115
Se connecter aux bases de donnes : se connecter la
base
Pour se connecter une base de donnes il faut fournir une
URL qui indique o se trouve la base
URL ORACLE : jdbc:oracle:thin:host:port:idbase
URL ODBC : jdbc:odbc:IDDSN
URL mySQL : jdbc:mysql:host
Exception leve si la connexion
URL Derby : jdbc:derby:host la base est impossible
Connection ma_connexion =
DriverManager.getConnection("jdbc:mysql://localhost/Espoir","michael","baro
n");
Connection ma_connexion =
DriverManager.getConnection("jdbc:oracle:thin:@dbhost:1528:ORCL","michael",
"baron");
Connexion une base
ORACLE nomme ORCL Servlets - M. Baron - Page 116
Se connecter aux bases de donnes : crer et excuter
une requte SQL
La requte ne peut tre cre et excute que si le pilote et
la connexion la base se sont valides
Il faut avant tout crer une instruction SQL sur la base
createStatement() throws SQLException
Exception leve si l instruction
SQL ne peut tre cre
La rfrence de la connexion
une base de donnes
Il faut enfin excuter la requte en crivant concrtement le
requte SQL executeQuery(String requete) throws SQLException
keulkeul.blogspot.com
La requte SQL
Rfrence de linstruction SQL
Servlets - M. Baron - Page 117
Se connecter aux bases de donnes : traiter le rsultat
while (mon_resultat.next()) {
String colonne1 = mon_resultat.getString(1);
out.println("Nom:" + colonne1);
}
} catch(SQLException e) {
...
}
}
}
Noubliez pas dans la requte
SQL les cotes ` ` entre les
diffrentes tables
Servlets - M. Baron - Page 119