A
Applicatif cˆ
ot´
e serveur (Servlets)
TPI P. Reignier
Contenu
Formulaires HTML
Interface CGI
Perl
PhP
Servlets
TPI P. Reignier
A.1
A1 - Servlets
TPI P. Reignier
Motivations
Java : langage de programmation g´
en´
eraliste
Permet le d´
eveloppement de grosses applications
Objectif : offrir un acc`
es Web `
a ces applications
TPI P. Reignier
A.3
Motivations (2)
Java : support r´
eseau (Sockets ...)
Support Web :
Interpr´
eteur HTTP
Codage + d´
ecodage MIME
Support des cookies, des sessions
...
Deux approches potentiellement possibles :
1. Ajout de biblioth`
eques (jar) `
a votre application
2. Ajout de vos classes `
a une application (serveur Web)
TPI P. Reignier
A.4
Motivations (3)
Application :
Prise en charge de tous les services communs
Evite de les red´
evelopper pour chaque application web
Container de servlets
Interfac¸age :
Plusieurs fournisseurs de container de servlet
Comment peux-t-on fournir ses classes pour ´
etendre le container
Normalisation de l’interface
Les Servlets
TPI P. Reignier
A.5
Plan
Servlets + Container de servlets
JSP
Architecture MVC
JSP tags (Philippe Genoud)
TPI P. Reignier
A.6
Servlet
<< interface >>
Servlet
+init ():void
+destroy ():void
+service (req:ServletRequest ,resp:SevletResponse ):void
GenericServlet
+service (req:ServletRequest ,resp:ServletResponse ):void
Classe abstraite
HttpServlet
+doGet(req:HttpServletRequest ,resp:HttpServletResponse ):void
+doPost(req:HttpServletRequest ,resp:HttpServletResponse ):void
+ doHead (req:HttpServletRequest ,resp:HttpServletResponse ):void
Created with Poseidon for UML Community Edition. Not for Commercial Use.
TPI P. Reignier
A.7
Cycle de vie
G´
er´
e par le container.
Initialisation :
Chargement de la classe (au d´
emarrage ou sur requˆ
ete).
Instantiation d’un objet.
Appel de la m´
ethode init() (par exemple : ouverture de lien JDBC)
Utilisation :
Appel de la m´
ethode service()
Dans le cas d’une HttpServlet : appel vers doGet(),doPost().
Destruction :
Peut ˆ
etre provoqu´
ee pour optimiser la m´
emoire
Appel de la m´
ethode destroy()
TPI P. Reignier
A.8
doGet, doPost : param`
etres
HttpServletRequest :
Contexte de l’appel
Param`
etres de formulaires
Cookies
Headers
...
HttpServletResponse
Contrˆ
ole de la r´
eponse
Type de donn´
ees
Donn´
ees
Cookies
Status
...
TPI P. Reignier
A.9
Premi`
ere Servlet
import java.io.;
import javax.servlet.;
import javax.servlet.http.;
public class PremiereServlet extends HttpServlet
{public void doGet(HttpServletRequest requete,HttpServletResponse reponse)
throws IOException, ServletException
{reponse.setContentType("text/html");
PrintWriter pw = reponse.getWriter();
pw.print("<html>");
pw.print("<body bgcolor=\"white\">");
pw.print("<head>");
pw.print("<title>Ma premi`
ere servlet</title>");
pw.print("</head>");
pw.print("<body>");
pw.print("<h1>Ca marche !</h1>");
pw.print("</body>");
pw.println("</html>");
}
}
TPI P. Reignier
A.10
SerlvetRequest / ServletResponse
<< interface >>
ServletRequest
+ getParameterName (name:String ):String
+getParameterNames ():
+ getReader ():
+getInputStream ():
+getContentLength ():int
+getContentType ():String
<< interface >>
HttpServletRequest
+getCookies ():
+ getRequestURI ():String
<< interface >>
ServletResponse
+ setContentType (type:String ):void
+getOutputStrem ():ServletOutputStream
+getWriter ():PrintWriter
<< interface >>
HttpServletResponse
+ addCookie (cookie :Cookie ):void
+ sendError (err:int ,mesg:String ):void
+ sendRedirect (location :String ):void
Created with Poseidon for UML Community Edition. Not for Commercial Use.
TPI P. Reignier
A.11
Cookie
Cookie
+getName ():String
+getValue ():String
+getDomain ():String
+getPath ():String
+ setValue (name:String ):void
+ setMaxAge (age:int ):void
+ setPath(path :String ):void
<< create >> + Cookie (domain :String ,name:String ,value:String ):void
Une fois cr´
e´
e, le nom d’un cookie ne peut ˆ
etre chang´
e
TPI P. Reignier
A.12
Exemple
protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws java.io.IOException, ServletException {
res.setContentType("text/html");
PrintWriter pw = reponse.getWriter();
Enumeration e = req.getParameterNames();
pw.setContentType("text/html") ;
...
while (e.hasMoreElements())
{// r´
ecup´
eration des param`
etres
String attribute = (String)e.nextElement();
pw.print("Attribut : " + attribute) ;
pw.print("Valeur : " + req.getParameter(attribute)) ;
}
...
}
TPI P. Reignier
A.13
Exemple (suite)
cookie = req.getCookies() ;
if (cookie != null)
{for (int i=0; i<cookie.length; i++)
{pw.print("<TR><TD>\n") ;
pw.print(cookie[i].getName()) ;
pw.print("</TD><TD>\n") ;
pw.print(cookie[i].getValue()+"</TD>\n") ;
pw.print("</TR>\n") ;
}
}
TPI P. Reignier
A.14
Execution
Serveur web multi-thread´
e
Un thread par requˆ
ete
Attention `
a la gestion des ressources partag´
ees
Lien Instance Thread. Par d´
efaut :
Une seule instance
Les attributs de la classe deviennent des ressources partag´
ees
TPI P. Reignier
A.15
Exemple
public class Factorielle extends HttpServlet {
protected int nombre ;
protected int factorielle(int x) {
int res=1 ;
try {this.nombre = x ;
res = 1 ;
for (int i =1; i<=nombre; i++) {
Thread.sleep(1000) ;
res =i ;
}
}catch (InterruptedException e) {
e.printStackTrace() ;
}
return res ;
}
protected void goGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
TPI P. Reignier
A.16
Exemple (suite)
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head>");
out.println("<title>Factorielle</title>");
out.println("</head>");
out.println("<body>");
int x = Integer.parseInt(request.getParameter("x")) ;
int fact = factorielle(x) ;
out.println(request.getParameter("x")+"! ="+ fact) ;
out.println("</body>");
out.println("</html>");
out.close();
}
TPI P. Reignier
A.17
Solutions
Sections critiques :
Utilisation du mot cl´
esynchronized
Mod`
ele d’ex´
ecution : 1 instance par thread
Impl´
ementer l’interface SingleThreadModel
TPI P. Reignier
A.18
Sessions
Permet de simuler une connexion continue entre un navigateur et le serveur.
Sauvegarde d’objets (associ´
es `
a un client) :
entre diff´
erentes pages
entre des appels successifs `
a une mˆ
eme page
Identifiant unique transmis sous forme de cookie
Utilisation de l’interface :
javax.servlet.http.HttpSession
TPI P. Reignier
A.19
1 / 10 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 !