Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les...

18
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ème d'exploitation Conteneur EJB Données Système d'exploitation Application de Présentation Données Système d'exploitation Application de Données Middleware Implicite J2EE Middleware Explicite rmi Middleware Système SGFdistribué Conteneur de traitement Conteneur de présentation

Transcript of Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les...

Page 1: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 2: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 3: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 4: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

?

Page 5: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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 >" ) ;

}

}

Page 6: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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( ) ;

Page 7: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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.

Page 8: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 9: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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 * /

Page 10: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 11: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 12: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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>

Page 13: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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>

Page 14: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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>

Page 15: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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/

Page 16: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 17: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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

Page 18: Les servlets - INSA Lyonperso.citi.insa-lyon.fr/sfrenot/cours/SID/cours/SID23...Les servlets et les conteneurs de servlets Tomcat Stéphane Frénot -MID - V.0.0.1 II - Jsp 2 Répartition

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