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

Preview:

Citation preview

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

Recommended