Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les...
Transcript of Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les...
Stéphane Frénot -MID - V.0.0.1 II - Jsp 1
Les servlets
et les conteneurs de servlets
Tomcat
Stéphane Frénot -MID - V.0.0.1 II - Jsp 2
Répartition d'une application
Données
Systèmed'exploitation
Conteneur EJB
Données
Systèmed'exploitation
Application dePrésentation
Données
Systèmed'exploitation
Application deDonnées
Middleware Implicite J2EE
Middleware Explicite•rmi
Middleware Système•SGFdistribué
Conteneur de traitementConteneur deprésentation
Stéphane Frénot -MID - V.0.0.1 II - Jsp 3
Les servlets
Stéphane Frénot -MID - V.0.0.1 II - Jsp 4
Qu'est ce qu'une servlet
• Une servlet est un programme Java utilisé pour étendre les fonctionnalités d'un serveur Web
• C'est :– Une application côté serveur
– Utilisée pour générer du contenu dynamique
– Chargée dynamiquement quand elle est demandée
• Elle est exécutée dans le cadre d'un conteneur qui en pilote son cycle de vie et son contexte
Stéphane Frénot -MID - V.0.0.1 II - Jsp 5
Le modèle d'exécution
Get /servlet/toto.Hello http/1.1
content-type: text/html
<html>coucou</html>
Conteneur de servletTomcatJservJetty
toto.Hello
doGet(HttpServletRequest, HttpServletResponse);
out ...out.print("<html>");out.print("coucou");...
Stéphane Frénot -MID - V.0.0.1 II - Jsp 6
Stéphane Frénot -MID - V.0.0.1 II - Jsp 7
Ecrire le code de la méthode service ?
Stéphane Frénot -MID - V.0.0.1 II - Jsp 8
Cycle de vie de la Servlet
Classe de la servlet
Instanciationet
Chargement
?
Initialisation?
?
ActiveRequêtes client
Destruction
?
Garbage Collection
?
Stéphane Frénot -MID - V.0.0.1 II - Jsp 9
Cycle de vie
publ i c voi d i ni t ( Ser vl et Conf i g conf i g) t hr ows Ser vl et Except i on;
Appelée une seule fois à l'initialisation de la servlet, l'objet config doit être conservé. Classiquement il est passé à l'init de la classe parent (super.init(config))
publ i c voi d ser vi ce( r eq, r es) t hr ows Ser vl et Except i on, I OExcept i on;
La requête du client préparée par le conteneur
L'objet de réponse qui contiendra la réponse au client. Intérêt ?
Cette méthode est rarement implanté, car les classes concrètes de Servlet le font pour vous (cf. HttpServlet)
publ i c voi d dest r oy( ) ;
Invoquée par le conteneur quand la servlet est détruite.
Stéphane Frénot -MID - V.0.0.1 II - Jsp 10
La servlet de base !
i mpor t j avax . ser vl et . Gener i cSer v l et ;
i mpor t j avax . ser vl et . Ser v l et Conf i g;
i mpor t j avax . ser vl et . Ser v l et Except i on;
i mpor t j ava. i o. I OExcept i on;
publ i c c l ass MaSer v l et ex t ends Gener i cSer vl et {
publ i c voi d i ni t ( Ser vl et Conf i g conf i g) t hr ows Ser vl et Except i on{
super . i ni t ( conf i g) ;
}
publ i c voi d ser v i ce ( Ser v l et Request r eq, Ser v l et Response r es)
t hr ows Ser v l et Except i on, I OExcept i on{
r es . set Cont ent Type( " t ext / ht ml " ) ;
Pr i nt Wr i t er out =r es . get Wr i t er ( ) ;
out . pr i nt l n( " <ht ml >" ) ;
out . pr i nt l n( " <head><t i t l e>Sal ut l e monde</ t i t l e></ head>" ) ;
out . pr i nt l n( " <body><h1>Bonj our l e monde</ h1></ body>" ) ;
out . pr i nt l n( " <ht ml >" ) ;
}
}
Stéphane Frénot -MID - V.0.0.1 II - Jsp 11
La servlet Http. . .
publ i c c l ass MaSer v l et ex t ends Ht t pSer vl et {
publ i c voi d i ni t ( Ser vl et Conf i g conf i g) t hr ows Ser vl et Except i on { super . i ni t( conf i g) ;
}
publ i c voi d doGet ( Ht t pSer v l et Request r eq, Ht t pSer vl et Response r es) {
t hi s . doPost ( r eq, r es) ;
}
publ i c voi d doPost ( Ht t pSer v l et Request r eq, Ht t pSer vl et Response r es)
t hr ows Ser v l et Except i on, I OExcept i on{
r es . set Cont ent Type( " t ex t / ht ml " ) ;
Pr i nt Wr i t er out =r es . get Wr i t er ( ) ;
out . pr i nt l n( " <ht ml >" ) ;
out . pr i nt l n( " <head><t i t l e>Sal ut l e monde</ t i t l e></ head>" ) ;
out . pr i nt l n( " <body><h1>Bonj our l e monde</ h1>" ) ;
out . pr i nt l n( " de " +r eq. get Remot eAddr ( ) +" </ body>" ) ;
out . pr i nt l n( " <ht ml >" ) ;
out . c l ose( ) ;
}
}
Stéphane Frénot -MID - V.0.0.1 II - Jsp 12
Communication entre servlets
• Les servlets peuvent s'échanger des informations par une « mémoire partagée »– La ServletContext
• C'est un espace commun partagé dans une webapp
• Les méthodes
voi d set At t r i but e( St r i ng name, Obj ect obj ) ;
Obj ect get At t r i but e( St r i ng name) ;
voi d r emoveAt t r i but e( St r i ng name) ;
Enumer at i on get At t r i but eNames( ) ;
Stéphane Frénot -MID - V.0.0.1 II - Jsp 13
Récupération des paramètres http
• Pour récupérer les paramètres (QUERY_STRING, POST) d ’une requête– HttpServletRequest véhicule les informations nécessaires
St r i ng get Par amet er ( St r i ng name, Obj ec t obj ) ;
St r i ng[ ] get Par amet er Val ues( St r i ng name) ;
Enumer at i on get Par amet er Names( ) ;
Stéphane Frénot -MID - V.0.0.1 II - Jsp 14
Les servlets conclusion
• Objets programmés en java
• Gérés par un conteneur
• Travaillent sur des flux (out)
• Sur des objets Request, Response
==> Pour simplifier le rôle du développeur il existe les jsp.
Stéphane Frénot -MID - V.0.0.1 II - Jsp 15
Les Jsp
Java Server Pages
Stéphane Frénot -MID - V.0.0.1 II - Jsp 16
JSP : Java Server Pages
• Technologie définie pour aider à l'écriture de pages Web
• Elle– génère une page vers le client
– est portable (Write Once, Run EveryWhere)
– mets en avant l'approche par composants
– permet la mise en œuvre facile des sites dynamiques
• Equivalents : ASP, PHP
Stéphane Frénot -MID - V.0.0.1 II - Jsp 17
La JSP de base !
<ht ml ><body>
<H1>I nf or mat i on sur l a r equêt e</ H1>
<% out . pr i nt l n( " Hel l o Monde" ) ; %>
</ body></ ht ml >
Page JSPhttp://localhost/test/hello.jsp
Génération d'une servlet.java
Servlet Compilée.class
réponse
Stéphane Frénot -MID - V.0.0.1 II - Jsp 18
Les éléments jsp
• Les directives<%@ <di r ec t i ve> { at t r i but e=" val ue" } %>
ex : <%@ page i mpor t =" j ava. ut i l . * " %>
• Le code– Les déclarations
<%! <dec l ar at i on> %>
ex : <%! St r i ng name=new St r i ng( " Bob" ) ; / * Code s t at i c * /
– Les expressions<%= <expr essi on> %>
ex : <%= get Name( ) %> / * pas de ; * /
– Les scriptlets<% <sour ce de l a scr i pt l et > %>
ex : <% out . pr i nt l n( " Hel l o Bob" ) ; %> / * Code d' exécut i on * /
Stéphane Frénot -MID - V.0.0.1 II - Jsp 19
Les directives page, include et taglib<%@ page { at t r i but =" val eur » %>
Les attributs possibles :
language="scripting language" /*Seul java est supporté pour l 'instant* /
extends="className" /* Non recommandé pour des questions d'optim.* /
import="importList" /* Liste des importations * /
session="true|false" /* Maintient des attributs de session * /
buffer="none|size in kb" /* Bufferisation du flux de sortie (out) (8kb)* /
autoflush="true|false"
isThreadSafe="true|false" /* L'applet peut être concurrente * /
info="text" /* Information fourni à la méthode Servlet.getServletInfo() * /
errorPage="error_url" /* Page jsp qui gère toutes les exceptions * /
isErrorPage="true|false" /* Indique si la page est util isé pour les erreurs * /
contentType="ctinfo" /* type MIME et Character set de la réponse * /
<%@ i ncl ude f i l e=" header . j sp" %> / * La r essour ce n' es t i nsér ée qu' une f oi s * /
<%@ t agl i b ur i =" ht t p: / / l ocal hos t / t agl i bs / menu" pr ef i x=" r and" %> / * Per met d' avoi r
des t ags : <r and: hel l o> </ r and: hel l o> * /
Stéphane Frénot -MID - V.0.0.1 II - Jsp 20
Utilisation des pages d'erreur
<ht ml >
<%@ page i sEr r or Page=" t r ue" %>
Er r eur : <%= except i on. get Message( ) %> est appar ue
</ body></ ht ml >
<ht ml >
<%@ page er r or Page=" er r or . j sp" %>
<%
i f ( t r ue) {
t hr ow new Except i on( " Cet t e page est en f aut e" ) ;
}
%>
error.jsp
Stéphane Frénot -MID - V.0.0.1 II - Jsp 21
Les objets implicites
• out : représente un jspWriter (extends java.io.Writer, aka print, println)out.println("<center> coucou </center>" );
• request : représente la requête (javax.servlet.http.HttpServletRequest)out.println("<center> coucou » request.getParameter("Name")+"</center>" );==> http://localhost/coucou.jsp?Name=sfr
• response : représente la réponse (javax.servlet.http.HttpServletResponse)• pageContext : représente le contexte d'une page spécifique (setAttribute, getAttribute)• session : représente la session (javax.servlet.http.HttpSession)(Session = context pour un
utilisateur). Elle a la durée de vie de la connexion tcp.• application : représente le contexte global, vu précédemment (javax.servlet.ServletContext)• config : référence sur un ServletConfig, qui contient les informations de conf sur le moteur de
servlet (qui contient l'application web de la page jsp)• page : la page représente la jsp courante (équivalent à this)• exception : objet exception uniquement disponible si la page se déclare comme étant
isErrorPage
Stéphane Frénot -MID - V.0.0.1 II - Jsp 22
Les actions jsp standard
• Les actions jsp sont des tags qui réalisent une tâche standard.– Les actions sur les bean (un bean est un composant)
• useBean, setProperty, getProperty
– Les autres actions
Stéphane Frénot -MID - V.0.0.1 II - Jsp 23
<jsp:useBean>
<j sp: useBean i d=" unCal cul " scope=" page" c l ass=" exos. Cal cul " / >
<j sp: useBean i d=" name" scope=" page| r equest | sessi on| appl i cat i on"
c l ass=" cl assName" >
t ext
</ j sp: useBean>
• page : la référence a la durée de vie de la page
• request : dans la chaîne de requête (forward request)
• session : durée de vie de la session (connexion tcp keep-alive)
• application : durée de vie de la webapp (arrêt du conteneur)
Stéphane Frénot -MID - V.0.0.1 II - Jsp 24
<jsp:setProperty>, <jsp:getProperty>
<jsp:setProperty name="beanName" property="propName" value="propValue"><jsp:setProperty name="beanName" property="propName" param="paramName"><jsp:getProperty name="beanName" property="propName">
package exemple;public class Compteur{ int compteur=0; public int getCompteur(){ return(compteur++); } public void setCompteur(int cptr){ this.compteur=cptr; }}
<html><body> <jsp:useBean id="unCompteur" scope="session" class="exemple.Compteur" /> <% out.println("Compteur depuis une scriptlet :"+unCompteur.getCompteur()+"<BR>"); %> Compteur depuis une propriété : <jsp:getProperty name="unCompteur" property="compteur" /><br></body></html>
Stéphane Frénot -MID - V.0.0.1 II - Jsp 25
<jsp:param>
<jsp:param name="name" value="value">
Permet de passer un paramètre pour les autres actions standard : (include, forward, plugin)
<jsp:include page="urlSpec" flush=" true"> <jsp:param name="user" value="sfrenot">/* remarque : la directive, est évaluée une seule fois à la création de la servlet. L'action est
évaluée à chaque requête */
<html><body> <jsp:include page="header.jsp" flush=" true"> <jsp:param name="user » value='<%= request.getParameter("user" ); %>' /> </jsp:include></body></html>
Stéphane Frénot -MID - V.0.0.1 II - Jsp 26
<jsp:forward>
• Délégation de l'exécution vers une autre page. L'exécution de l'appelant s'arrête immédiatement
<html><body> <% if((request.getParameter(" role" )).equals("manager" )){ %> <jsp:forward page="management.jsp" /> <% }else{ %> <jsp:forward page="welcome.jsp"> <jsp:param name="user" value='<%=request.getParameter("user" ) %>'/> </jsp:forward> <% } %> </body></html>
Stéphane Frénot -MID - V.0.0.1 II - Jsp 27
<jsp:plugin>
• Insertion de code d'applet / activeX.
<jsp:plugin type=« pluginType » code=« classFile » codeBase=« relativeURLPath » <jsp:params> <jsp:param…/> <jsp:params></jsp:plugin>
Stéphane Frénot -MID - V.0.0.1 II - Jsp 28
L'utilisation d'un EJB
<html><head><title> <%= pagetitle %> </title></head><h2><font color=#DB1260><%= pagetitle %></font></h2><%@ page import="edt.matiere.*"%><%!String pagetitle = "JSP : Fibonnacci" ;%><%try { ctx = getInitialContext(); homeFib = (FibonnacciHome) ctx.lookup(" fibonnaci" ); uneSuite=homeFib.create(); out.println(" fib(7)="+uneSuite.getFibonacciNumber(7));
}catch(Exception e){ e.printStackTrace();}
%></body></html>
Stéphane Frénot -MID - V.0.0.1 II - Jsp 29
Conteneur de déploiement
Stéphane Frénot -MID - V.0.0.1 II - Jsp 30
Architecture du conteneur tomcathttp://jakarta.apache.org/tomcat
• Le conteneur présente l'arborescence suivante :– conf
– lib
– bin
– webapps
– work
– common
– server
– temp
– shared
Toto.war
déploiement
http://localhost/Toto/
Stéphane Frénot -MID - V.0.0.1 II - Jsp 31
Architecture d'une webapplication
• Comme pour les ejb, une application web peut être pacagée dans une archive (war)
• Une webapplication peut être vue comme un site web, complet et autonome.
• Un exemple de webapp (notion de context)./examples/WEB-INF/classes/HelloWorldExample.class
./examples/WEB-INF/web.xml
./examples/images/code.gif
./examples/jsp/cal/cal1.jsp
./examples/servlets/cookies.html
./examples/servlets/helloworld.html
==> http://localhost/examples/HelloWordExample
Stéphane Frénot -MID - V.0.0.1 II - Jsp 32
Struts
Stéphane Frénot -MID - V.0.0.1 II - Jsp 33
Struts
• "Mastering jakarta Struts", James Goodwill
• Il est possible de faire des application complètes, structurées et rapide en servlet
• Le système repose sur un modèle mvc (modèle/vue/contrôleur)
• Fabrication automatique de l'ensemble des servlets de traitement/présentation pour une application
• Apports de tags spécifique (librairie taglib)
• Ensemble de classes java qui permettent de coder en java le comportement de formulaires de saisie (org.apache.struts.action.ActionForm)
• Ensemble de classes java qui permettent la redirection vers une page jsp en fonction des différentes valeurs d'un formulaire
Stéphane Frénot -MID - V.0.0.1 II - Jsp 34
Struts
ActionServlet(Contrôleur)
Vue 1
Vue 1
Action1
Action2
Action3
Action4modèle
Stéphane Frénot -MID - V.0.0.1 II - Jsp 35
Mais il faudrait un cours entier...
Stéphane Frénot -MID - V.0.0.1 II - Jsp 36
Répartition d'une application
Données
Systèmed'exploitation
Conteneur EJB
Données
Systèmed'exploitation
Moteur deservlets
Données
Systèmed'exploitation
Application deDonnées
Middleware Implicite J2EE
Middleware Explicite•rmi
Middleware Système•SGFdistribué
Conteneur de traitementConteneur deprésentation