Escolar Documentos
Profissional Documentos
Cultura Documentos
Les servlets
(1ere partie)
Bibliographies: Les notes de cours sur les servlets est une revue littéraire des documents mentionnés
ci-dessus. Plusieurs extraits ont été tirés ou traduits de ces références. Cette revue tient compte des
dernières mises à jour apportées au logiciel Tomcat et à la spécification (2.3) des servlets.
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 2/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 3/81
soumission
d’une requête (2) traitement
Navigateur Web Serveur Web de la requête (3)
retourne un
résultat (4)
……
….. Scripts/Prg. serveur
Une forme à
compléter (1)
HTTP CGI
Base de données
Client
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia.Serveur v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 4/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 5/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 6/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 7/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 8/81
Les servlets sont aux serveurs ce que sont les applets aux browsers
mais sans interface graphique utilisateur …
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 9/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 10/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 11/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 12/81
- Une servlet peut simplement créer une partie d'une page Web
HTML qui est intégrée à une page HTML statique existante.
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 13/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 14/81
Avantages
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 15/81
S'appuient sur un langage vraiment standard : Java (et non pas Java
script ou Visual Basic);
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 16/81
- La servlet est placée en mémoire une fois qu'elle est appelée. Elle
n'est pas remise en mémoire jusqu'à ce que la servlet change.
- Une servlet dont le code a été modifié peut être réactivée (c'est à
dire replacée en mémoire) sans redémarrer le serveur ou
l'application.
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 17/81
FastCGI
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 18/81
Les servlets
Req. servelt1
Processus Principal
Thread
servlet1
Req. servlet2
Thread
JVM
Thread servlet2
Req. servlet1
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 19/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 20/81
response.setContentType("text/html");
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 21/81
out.println("<html>");
out.println("<body>");
out.println("<head>");
out.println("<title>Hello World!</title>");
out.println("</head>");
out.println("<body>");
out.println("<h1>Hello World!</h1>");
out.println("</body>");
out.println("</html>");
}
}
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 22/81
http://java.sun.com/j2ee/
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 23/81
http://jakarta.apache.org
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 24/81
java.lang.Object
|
+--javax.servlet.GenericServlet
|
+--javax.servlet.http.HttpServlet
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 25/81
L'interface Servelt
soit directement ou bien via une classe qui implante cette interface,
comme:
— javax.servlet.GenericServlet
(paquetage javax.servlet)
— javax.servlet.http.HttpServlet
(paquetage javax.servlet.http)
g particulièrement désignée pour des requêtes et
réponses HTTP
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 26/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 27/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 28/81
import javax.servlet.*;
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 29/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 30/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 31/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 32/81
http://jakarta.apache.org/builds/jakarta-tomcat-4.0/release/v4.0.1/bin/
le fichier:
UNIX: jakarta-tomcat-4.0.1.tar.gz
Windows: jakarta-tomcat-4.0.1.zip
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 33/81
Win98: autoexec.bat
REM Le class-path pour retrouver le fichier utilisé pour compiler les servlets
SET CLASSPATH=.
SET CLASSPATH=%CLASSPATH%; %CATALINA_HOME%\common\lib\servlet.jar
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 34/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 35/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 36/81
servlets
JSP
classes utilitaires
documents statiques (pages html, images, sons, etc.)
beans, applications clients
méta informations décrivant la structure de l'application
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 37/81
/* suite du code */
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 38/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 39/81
CATALINA_HOME\webapps
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 40/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 41/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 42/81
2e partie
Configuration UdM:
/home/www2/nom_login
/home/www2/nom_login/webapps
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 43/81
webapps/moncontexte
webapps/moncontexte/servlets
webapps/moncontexte/WEB-INF
webapps/moncontexte/WEB-INF/classes
webapps/moncontexte/WEB-INF/lib
ou bien:
webapps/examples
webapps/examples/servlets
webapps/examples/WEB-INF
webapps/examples/WEB-INF/classes
webapps/examples/WEB-INF/lib
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 44/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 45/81
javax.servlet.GenericServlet
(paquetage javax.servlet)
— javax.servlet.http.HttpServlet
(paquetage javax.servlet.http)
g particulièrement désignée pour des requêtes et
réponses HTTP
GenericServlet
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 46/81
import java.io.*;
import javax.servlet.*;
javac SimpleServlet.java
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 47/81
déploiement
<HTML>
<HEAD>
<TITLE> Essai </TITLE>
</HEAD>
<BODY>
<a href="../servlet/SimpleServlet">Execute</a>
</BODY>
</HTML>
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 48/81
Essai\WEB-INF va contenir:
Le répertoire :
Essai\WEB-INF\classes
Le fichier web.xml
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 49/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 50/81
<Context path="/examples"
docBase="webapps/examples"
debug="0"
reloadable="true" />
</ContextManager>
</Server>
path
Le chemin du contexte de l’application (le préfixe URI vers
l’application web)
attribut obligatoire
Doit commencer par un /
docBase
C’est le répertoire root de l’application web
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 51/81
attribut obligatoire
Peut utiliser un chemin relative ou absolu
reloadable
Si vraie, Tomcat doit recharger la servelt en cas de mise à jour de
cette dernière.
Si non avoir recours à la séquence arrête-démarrage du serveur.
Par défaut la valeur est false: false
debug
le niveau du débogage utilisé pour enregistrer des messages de 0 à
9
Par défaut: 0
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 52/81
web.xml
Un minimum web.xml:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD
Web Application 2.2//EN"
"http://java.sun.com/j2ee/dtds/web-app_2_2.dtd">
<web-app>
</web-app>
http://localhost:8080/Essai/servlet/SimpleServlet
http://localhost:8080 protocol, host, et port
/Essai le contexte
/servlet/ le préfixe par défaut pour les servlets
SimpleServlet le nom de la classe de la servlet
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 53/81
<web-app>
<!-- General description of your Web application -->
<display-name>
IFT1176 – Servlets
</display-name>
<description>
Ceci est un exemple sur le contenu du fichier web.xml
à partir de l’exemple de la servelt SimpleServlet.
</description>
<description>
Un affichage d’un message de bienvenue en sortie
</description>
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 54/81
<servlet-class>
SimpleServlet
</servlet-class>
</servlet>
</web-app>
http://localhost:8080/Essai/servlet/SimpleServlet
http://localhost:8080/Essai/test
http://localhost:8080/Essai/servlets/index.html
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 55/81
HttpServelt
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 56/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 57/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 58/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 59/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 60/81
ServletOutputStream getOutputStream() ;
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 61/81
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 62/81
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
{
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("GET Request. No Form Data Posted");
}
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 63/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 64/81
http://localhost:8080/examples/servlet/RequestParamExample?
firstname=toto&lastname=titi
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 65/81
La méthode init()
void init()
Redéfinir celle ci pour initialiser la servelt.
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloHTML extends HttpServlet {
protected String bgcolor;
protected String fgcolor;
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 66/81
<doGet() method>
}
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 67/81
e-commerce,
publicité,
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 68/81
Cookies
Sessions
Databases
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 69/81
À partir de l’url :
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 70/81
Un champ caché :
HttpSession :
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 71/81
Cookies
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 72/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 73/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 74/81
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 75/81
// set a cookie
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 76/81
HttpSession
Avec HttpSession, une session est établie pour une durée préfixée,
indépendamment du nombre de requêtes établies ou bien du
nombre de pages sollicitées.
API
HttpSession getSession()
HttpSession getSession(boolean create)
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 77/81
String getRequestedSessionId()
Retournes le ID de la session.
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 78/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 79/81
String getId()
Retourne le ID de la session.
Enumeration getAttributeNames()
Retourne un énumérateur d’objets string contenant les noms de
tous les objets associés à cette session.
long getCreationTime()
Retourne la date de création de la session.
long getLastAccessedTime()
Retourne la date de la dernière requête envoyée par le client,
associée à cette session.
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 80/81
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets
- IFT1176 - Aspects avancés en Java - 81/81
new Date(session.getLastAccessedTime());
out.println("ID " + session.getId());
out.println("Created: " + created);
out.println("Last Accessed: " + accessed);
// set session info if needed
String dataName = request.getParameter("dataName");
if (dataName != null && dataName.length() > 0) {
String dataValue =
request.getParameter("dataValue");
session.setAttribute(dataName, dataValue);
}
// print session contents
Enumeration e = session.getAttributeNames();
while (e.hasMoreElements()) {
String name = (String)e.nextElement();
String value =
session.getAttribute(name).toString();
out.println(name + " = " + value);
}
}
}
Mohamed N. Lokbani & dans le désordre SUN, Delannoy, Itey, Jia. v1.01 Servlets