Académique Documents
Professionnel Documents
Culture Documents
03 00 Servlets JSP
03 00 Servlets JSP
Plan du cours
" " "
Rappel sur les applications Web Servlets et JSP : cest quoi ? Compilation / installation / configuration dun serveur Web compatible Premire servlet ou comment dmarrer ? Grer les formulaires HTML Servlets et bases de donnes Gestion des cookies
16/09/2000
Plan (suite)
" " " "
La gestion de session Les Java Server Pages (JSP) Des liens Des Tds
16/09/2000
$SSOLFDWLRQV :HE
Internet/Intranet
Serveur
Client
Requte (http,)
Environnement d excution
Serveur Web
2e niveau
Script/programme serveur
Navigateur Web
Rponse
Source de donnes
3e niveau
1er niveau
16/09/2000
$UFKLWHFWXUH
+ serveur Web
n niveau 2: applicatif
script
ou programme
n niveau 3: donnes
donnes
ncessaires au niveau 2
16/09/2000
'pURXOHPHQW
16/09/2000
socket / RMI avec le serveur Web mise en forme et validation des donnes
n ...
16/09/2000
n requte GET :
pour extraire des informations sur le serveur intgre les donnes de formatage l URL
http://www.inria.fr/servlet/hello?key1= value1&
n requte POST :
pour modifier les donnes sur le serveur donnes de la page assembles/envoyes vers le serveur
16/09/2000
fonction de l extension du fichier (.jsp, .cgi, ...) du rpertoire o il se trouve (cgi-bin/, servlet/)
Perl pour les programmes cgi en perl pour les servlets Java, ...
16/09/2000
Le script/prog ct serveur : n prcise le type de contenu (HTML, XML, images,) n intgre la rponse dans un flot de sortie Le navigateur : n dfinit le type MIME dans l en-tte (text/html,) n et affiche les donnes en fonction
duplication
de l environnement (variables, excution), mmoire alloue, copie du programme, retourne (en gnral) du HTML
16/09/2000
CGI (Common Gateway Interface) ISAPI, NSAPI (Netscape, Microsoft) ASP (Microsoft) Servlets Java et JSP (Sun)
16/09/2000
&*, UDSSHO
n Principe :
un
Serveur Web Interface CGI Processus 1 Env. execution Var. env. Programme Processus 2 Env. execution Var. env. Programme Processus 3 Env. execution Var. env. Programme
16/09/2000
&*, VXLWH
n Avantages :
gratuit, peut
pris en charge par tous les serveurs Web actuels tre crit dans nimporte quel langage (surtout perl)
n Inconvnients :
manque
d volutivit (plusieurs processus crs) g serveur trs sollicit si plusieurs requtes au mme moment g amlior par : FastCGI : instance partage des programmes CGI mod_perl (Apache) : script CGI interprt et excut dans le serveur Web assez lent parfois difficile dvelopper
16/09/2000
Servlets et JSP
16/09/2000
Java Servlets
Rponse de Java aux CGI Programmes s'excutant sur le serveur Web et retournant des pages Web dynamiques ( la vole) Peuvent tre chargs localement ou dynamiquement travers le rseau
16/09/2000
16/09/2000
Rsidentes, pas de fork, pas de temps de lancement Multithreads Gestion de cache Connexions persistantes (BD) etc...
16/09/2000
Thread
Thread Servlet
Initialisation
Affecter une requte un thread Requte HTTP 1 Affecter une requte un thread Requte HTTP 2 Rponse HTTP 1 Rponse HTTP 2 Terminer le pool de threads Appeler la mthode destroy()
Excution service
16/09/2000
H, c'est du Java ! Super API pour grer les formulaires HTML, les cookies, le suivi de session, le protocole HTTP devient facile manipuler
"
" "
"
"
16/09/2000
On peut faire des choses impossibles raliser avec des scripts CGI
n n n n n n
Parler avec le serveur WWW, Echanger des donnes via URIs, Partager des donnes entre servlets, Chaner des servlets (pool de connections BD), Gestion de sessions (e-commerce), etc...
16/09/2000
10
Servlets portables
"
"
"
16/09/2000
Servlets gratuites
"
Kit de dveloppement des servlets gratuit Nombreuses versions commerciales... (Microsoft, Netscape I-server, Webstar...) Mais Apache/Tomcat reste la solution la plus efficace... 100% gratuite !
"
"
16/09/2000
11
tablir une connexion avec dautres clients (RMI, ) peuvent faire des appels systme (utilisation pont JDBCODBC) ou manipuler des ressources locales (sur le serveur), ...
16/09/2000
$YDQWDJHV HW LQFRQYpQLHQWV
Avantages : n plus facile dvelopper n meilleures performances n client lger " Inconvnient : n interface graphique utilisateur limite HTML
16/09/2000
12
Rponse aux ASP/PHP/embedded perl, etc... Technologie qui permet de mixer Java et HTML
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> <HEAD><TITLE>Welcome to Our Store</TITLE></HEAD> <BODY> <H1>Welcome to Our Store</H1> <SMALL>Welcome, <!-- User name is "New User" for first-time visitors --> <% out.println(Utils.getUserNameFromCookie(request)); %> To access your account settings, click <A HREF="Account-Settings.html">here.</A></SMALL> <P> Regular HTML for all the rest of the on-line stores Web page. </BODY></HTML>
16/09/2000
Vs ASP : c'est du Java, a suffit non ? Vs Servlets : plus pratique. Sparation du look et du traitement. 100% quivalent. Vs JavaScript : Javascript tourne sur le client Vs HTML/Dynamic HTML : idem. JSP est trs facile mettre en oeuvre !
" "
"
16/09/2000
13
16/09/2000
"
"
16/09/2000
14
2 possibilits
" "
installer un serveur qui a le support intgr pour les servlets ajouter votre serveur WWW actuel un package qui supporte les servlets
Apache Tomcat (servlets 2.2, JSP 1.1) Java Server Web Development Kit (moteur) Allaire Jrun New Atlanta Server Exec Sun Java Web Server...
16/09/2000
Premires Servlets
16/09/2000
15
0RGqOH GH SURJUDPPDWLRQ
cette interface possde les mthodes pour : n initialiser la servlet : init() n recevoir et rpondre aux requtes des clients : service() n dtruire la servlet et ses ressources : destroy()
16/09/2000
6WUXFWXUH GH EDVH G
XQH VHUYOHW
import javax.servlet.*; public class first implements Servlet { public void init(ServletConf config) throws ServletException {} public void service( ServletRequest req, ServletResponse rep) throws ServletException, IOException {}
16/09/2000
16
/H F\FOH GH YLH
1. la servlet est cre puis initialise (init() )
cette mthode nest appele par le serveur quune seule fois lors du chargement en mmoire par le moteur de servlet
)
cette mthode est appele automatiquement par le serveur chaque requte de client
cette mthode nest appele par le serveur quune seule fois la fin permet de librer des ressources (alloues par init() )
16/09/2000
Pour faciliter le traitement particulier des serveurs Web, la classe Servlet est affine en
javax.servlet.http.HttpServlet
doGet() : pour les requtes Http de type GET doPost() : pour les requtes Http de type POST
17
16/09/2000
Utiliser les objets HttpServletRequest et HttpServletResponse passs en paramtres de ces mthodes pour implmenter le service :
n HttpServletRequest contient les renseignements sur le
formulaire HTML initial (utile pour doPost()) :
16/09/2000
18
16/09/2000
Un exemple
16/09/2000
19
Un exemple
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); out.println("Hello World"); } }
16/09/2000
"
Avec JSWDK, mettre hall.HelloWorld dans le rpertoire d'exemple Avec Apache Tomcat : crer une application web
"
16/09/2000
20
"
Avec Tomcat
Editer <tomcat_dir>/server.xml pour dfinir une application Web <Context path="pit" docBase="pit" defaultSessionTimeOut="30" isWARExpanded="true" isWARValidated="false" isInvokerEnabled="true" isWorkDirPersistent="false" />
" " "
Dans cet exemple, l'application web se nomme pit Mettre les classes dans <tomcat_dir>/pit/WEB-INF/classes Editer <tomcat_dir>/pit/WEB-INF/web.xml
16/09/2000
<?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> <servlet> <servlet-name> HelloWorld </servlet-name> <servlet-class> hall.HelloWorld </servlet-class> </servlet> </web-app>
16/09/2000
21
Une fois une application web cre, on peut mettre autant de servlets que l'on veut... Relancer Tomcat chaque modif des fichiers XML server.xml et/ou web.xml Pour invoquer la servlet, utiliser l'alias :
http://host/pit/servlet/HelloWorld
"
"
ou le nom complet...
http://host/pit/servlet/hall.HelloWorld
16/09/2000
http://host:port/<web-app>/servlet/<servlet_class>?param1=value1&
16/09/2000
22
16/09/2000
Un autre exemple
16/09/2000
23
Un autre exemple
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " + "Transitional//EN\">\n" + "<HTML>\n" + "<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n" + "<H1>Hello WWW</H1>\n" +"</BODY></HTML>"); } }
16/09/2000
Quelques trucs
" "
Bon, gnrer du HTML... la vraie solution c'est JSP ! Nanmoins : <DOCTYPE...> et <HEAD...> toujours pareils ! Faire une classe utilitaire !
public class ServletUtilities { public static final String DOCTYPE = "<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\">"; public static String headWithTitle(String title) { return(DOCTYPE + "\n" + "<HTML>\n" + "<HEAD><TITLE>" + title + "</TITLE></HEAD>\n"); } }
"
16/09/2000
24
Nouvelle version
package hall; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWWW2 extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(ServletUtilities.headWithTitle("Hello WWW") + "<BODY>\n" + "<H1>Hello WWW</H1>\n" + "</BODY></HTML>"); }
16/09/2000
16/09/2000
25
Introduction
"
http://host/path?user=Marty+Hall&origin=bwi&dest=lax
"
La partie complique = paramtres du formulaire Visibles ou non dans l'URL (GET/POST) Ces paramtres doivent tre dcods !
"
"
"
"
public class ShowParameters extends HttpServlet { public void doGet(HttpServletRequest request,...) { out.println(request.getParameter(param1) ); Enumeration paramNames=request.getParameterNames(); String[] paramValues = request.getParameterValues(paramNames); }
}
16/09/2000
26
Morceaux dinformations envoys par le serveur et renvoys par le client quand il revient visiter le mme URL Dure de vie rglable Permet la persistance
16/09/2000
27
Identification des utilisateurs (e-commerce) Eviter la saisie dinformations rptition n login, password, adresse, tlphone Grer des prfrences utilisateur n sites portails ...
16/09/2000
Jamais interprt ou excut : pas de virus Un cookie est limit 4KB et les navigateurs se limitent 300 cookies (20 par site) : pas de surcharge de disque Bien pour rendre prives des donnes non sensibles n nom, adresse, mais pas No CB ! mais ne constitue pas un traitement srieux de la scurit
16/09/2000
28
Utiliser les fonctions de l API des servlets n crer un cookie : classe Cookie, n crire/lire un cookie : addCookie(cookie), getCookies(), n positionner des attributs dun cookie : cookie.setXxx() Exemple denvoi dun cookie :
...
String nom = request.getParameter("nom"); Cookie unCookie = new Cookie("nom", nom); ...ici positionner des attributs si on le dsire response.addCookie(unCookie);
...
16/09/2000
&UpDWLRQ G
XQ FRRNLH
name et value
blanc [ ] ( ) = , " / ? @ : ;
16/09/2000
29
expiration du cookie (en seconde) n par dfaut : pour la session courante getPath/setPath : rpertoire o s'applique le cookie n dir. courant ou pages spcifiques
16/09/2000
30
7HPSV G
H[SLUDWLRQ
Par dfaut, dure de vie d'un cookie = la connexion. Si on veut que le cookie soit sauv sur disque, modifier sa dure de vie :
16/09/2000
31
3UREOpPDWLTXH
Protocole HTTP = protocole Internet dconnect n diffrent de Telnet, Ftp, n traite les requtes et les rponses comme transactions
simples et isoles (requtes non apparentes)
Certaines applications Web (e-commerce : caddie) ont besoin de maintenir une "mmoire" entre deux requtes n ie. maintenir une connexion de lutilisateur sur le serveur n pour se faire : concept de "suivi de sessions"
16/09/2000
6XLYL GH VHVVLRQ TX
HVWFH TXH F
HVW "
Mmoire de ce que fait l'utilisateur d'une page l'autre n consiste au transfert de donnes gnres par une
requte vers les requtes suivantes
4 mthodes avec les servlets Java n 1) utilisation des cookies (dj vu) n 2) rcriture d'URL : passage de paramtres n 3) utilisation des champs de formulaire "hidden" n 4) utilisation du JSDK (HttpSession API)
16/09/2000
32
5ppFULWXUH G
85/
<a href="http://leo.inria.fr/servlet/foo?uid=itey">Acheter</a>
16/09/2000
33
Trs simple avec l'API des servlets (JSDK) n objet HttpSession Principe : n Un objet "session" peut tre associ avec chaque
requte n Il va servir de "container" pour des informations persistantes n Dure de vie limite et rglable
16/09/2000
0RGqOH EDVLTXH
HttpSession session = request.getSession(true); Caddy caddy = (Caddy) session.getValue("caddy"); if(caddy != null) { // le caddy nest pas vide ! afficheLeContenuDuCaddy(caddy); } else { caddy = new Caddy(); ... caddy.ajouterUnAchat(request.getParameter("NoArticle")); session.putValue("caddy", caddy); }....
16/09/2000
34
16/09/2000
35
&
HVW TXRL "
On peut mettre des pages .jsp partout o on met des pages HTML Elles sont converties "au vol" en servlet par le moteur de JSP
16/09/2000
8Q H[HPSOH VLPSOH
<html><head><title>Un exemple de page JSP</title></head><body> <!-- dfinit les informations globales a la page --> <%@page language="java" %> <!-- Dclare la variable c --> <%! char c = 0; %> <!-- Scriplet (code java) %> <% for(int i = 0; i < 26; i++){ for(int j = 0; j < 26; j++){ c = (char)(0x41 + (26 - i + j)%26); %> <%= c %> <% } %> <br> <% } %> </body></html>
16/09/2000
36
Trois types : n 1 - Scripting elements : du code java n 2 - directives : pour le contrle de la structure n 3 - actions : importation de composants existants
16/09/2000
6FULSWLQJ HOHPHQWV
n permet dintgrer des valeurs dans le code HTML n ces valeurs sont values, converties en chanes de
caractres et affiches
16/09/2000
37
6FULSWLQJ HOHPHQWV
n cest un bloc de code Java n plac dans _jspService() de la servlet gnre n ayant accs :
aux aux
variables et beans dclars ( <%! %> ) objets implicites (voir plus loin)
16/09/2000
6FULSWLQJ HOHPHQWV
38
'LUHFWLYHV
<%@ directive attribut1="valeur" attribut2="valeur"... %> 2 directives possibles (jsp1.0) : n page : informations relatives la page n include : fichiers inclure littralement
16/09/2000
/D GLUHFWLYH SDJH
Valeurs possibles : n <%@ page language="java" n <%@ page import="java.util.*, java.net.*" %> n <%@ page contentType="text/plain" %> n <%@ page session="true|false " %> n <%@ page errorPage="pathToErrorPage" %> n <%@ page isErrorPage="true|false" %> n <%@ page
16/09/2000
39
/D GLUHFWLYH LQFOXGH
Valeurs possibles : n <%@ include file="chemin relatif du fichier" %> n pour se rfrer au home dir du serveur Web : <%@
include file="/toto.html" %>
Interprt littralement, le fichier peut tre : n HTML, scripting elements, directives, actions, ... L'insertion se fait au moment de la traduction de la page...
16/09/2000
9DULDEOHV SUpGpILQLHV
Ou "objets implicites", ils sont accessibles dans les scripting elements : n request : le HttpServletRequest n response : le HttpServletResponse n session : le HttpSession n out : flot de sortie (idem response.getWriter()) n application : le ServletContext (idem
getServletConfig().getContext() )
16/09/2000
40
$FWLRQV
Syntaxe XML Permettent de faire des actions au moment o la page est demande par un client : n inclure dynamiquement un fichier n utiliser des beans n rediriger vers une autre page n etc...
16/09/2000
$FWLRQV
n permet d'instancier un bean depuis une page JSP. n ncessite de connatre le mcanisme des beans... n associ <jsp:getProperty.../> et <jsp:setProperty.../>
16/09/2000
41
8VHEHDQ HW JHW3URSHUW\
/>
16/09/2000
8VHEHDQ HW VHW3URSHUW\
16/09/2000
42
([HPSOH G
XWLOLVDWLRQ G
XQ EHDQ
La page JSP :
<html> ... <jsp:usebean id="test" class="inria.SimpleBean" /> <jsp:setProperty name="test" property="message" value="Hello !!" /> <h1>Le message est : <i> <jsp:getProperty name="test" property="message" /> </i></h1> </html>
16/09/2000
([HPSOH G
XWLOLVDWLRQ G
XQ EHDQ
SimpleBean.java package inria; public class SimpleBean { private String message = "no message"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
16/09/2000
43
Java servlets
Web Server
JDBC DriverManager
SGBD
Intranet
16/09/2000
44
Lapproche en 3 parties : n la page HTML pour le formulaire d interrogation n la servlet effectuant la requte n la page HTML rsultat gnre par la servlet
16/09/2000
/H IRUPXODLUH G LQWHUURJDWLRQ
Fichier : annuaire.html
<HTML> <HEAD><TITLE>Annuaire YETI</TITLE></HEAD> <BODY> <CENTER><H1> Annuaire de la socit YETI </H1></CENTER> <HR WIDTH="75%"> <CENTER><H2>Recherche de coordonnes</H2></CENTER> <P>Tapez les premires lettres de la personne dsire <P><FORM METHOD=POST ACTION=http://fkeiko.inria.fr:8090/servlet/Annuaire> <INPUT TYPE=TEXT NAME="nom" SIZE=10 MAXLENGTH=20 VALUE=""> <P><INPUT TYPE=SUBMIT NAME="go" VALUE="Rechercher"> <INPUT TYPE=RESET NAME="reset" VALUE="Reset"> </BODY> </HTML> Servlets & JSP - page 90 16/09/2000 Patrick Itey - INRIA
45
/D VHUYOHW $QQXDLUH
import import import import javax.servlet.*; javax.servlet.http.*; java.io.*; java.sql.*;
public class Annuaire extends HttpServlet { public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { ... } public String getServletInfo() { return "La servlet Annuaire"; } }
16/09/2000
/D VHUYOHW $QQXDLUH
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><BODY>"); out.Println("<CENTER><H1>Voici les coordonnes :</H1></CENTER>"); try{ Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); String url = "jdbc:odbc:ANNUAIRE"; Connection c = DriverManager.getConnection(url, "itey", "admin"); Statement s = c.createStatement(); String query = "SELECT name,phone FROM Annuaire" + "WHERE name LIKE " + req.getParameter("nom") + ResultSet rs = s.executeQuery(query); rs.next(); out.println("<P>NOM: " + rs.getString("name")); out.println("<P>TELEPHONE: " + rs.getInt("phone")); rs.close(); s.close(); c.close(); } catch(Exception e) {} out.println("</BODY>/HTML>"); out.close(); }
"%'";
16/09/2000
46
4XHOTXHV OLHQV
http://www-sop.inria.fr/acacia/personnel/itey/Francais/Cours/internet-fra.html#liens
16/09/2000
47