Java EE - Cours 3

43
Java EE - Cours 3 Cours de 2 e année ingénieur Spécialisation « Génie Informatique » 1

description

inf

Transcript of Java EE - Cours 3

  • Java EE-

    Cours 3

    Cours de 2e anne ingnieur

    Spcialisation Gnie Informatique

    1

  • Problme dune Servlet : HTML dans Java

    1. Cest laid!out.println(docType);

    out.println("");

    out.println("\nClock\n");

    out.println("\n"+

    "Time on server\n"+

    ""+ today+"\n"+

    "");

    out.println("");

    2. Les ingnieurs EISTI connaissent Java,

    mais les dveloppeurs Web, NON !!

    Difficile de sparer les diffrentes tches dudveloppement (Web code vs. Business code)

    2

  • Solution : Java dans HTML

    Une JSP est identique une page HTMLdans laquelle on peut ajouter du code Java

    (mme principe quavec PHP)

    Clock

    Time on server

    3

  • JSP

    Les servlets facilitent le traitement avec javades requtes et rponses HTTP, maisils ne sont pas appropris lcriture de code HTML out.println(""+title+"");

    Les JSP permettent dintgrer du code javadans une page HTML

    Time on server

    Mais au final une JSP nest quun servlet!

    MyJSP.jsp MyJSP_jsp.java MyJSP_jsp.class obj:MyJSP_jsp

    traduit encharg et initialis

    en tant quecompil en

    Automatiquement gr par le conteneur 4

  • Clock.jsp

    Une JSP en 1 tape

    Clock

    Time on server

    webappswebapps

    tomcattomcat

    ARELAREL

    Ecrire une JSP Clock.jspet la mettre dans AREL(le rpertoire de notre application Web)

    ...

    ...

    ...

    5

  • instantiated and

    loaded into

    server's

    memory

    init (or Yes No Yes No Yes No

    equivalent)

    called

    doGet (or Yes Yes Yes Yes Yes Yes

    equivalent)

    called

    Request Request Request Request Request Request

    #1 #2 #3 #4 #5 #6

    JSP page Yes No No No Yes No

    translated into

    servlet

    Servlet Yes No No No Yes No

    compiled

    Servlet Yes No Yes No Yes No

    mo

    difie

    dP

    age

    Se

    rve

    rre

    sta

    rted

    writte

    nP

    age

    first

    Cycle de vie dune JSP

    6

  • Servlet gnr par Tomcatpublic final class Clock_jsp

    extends org.apache.jasper.runtime.HttpJspBase

    implements org.apache.jasper.runtime.JspSourceDependent{

    public void _jspService(HttpServletRequest request,

    HttpServletResponse response)

    throws java.io.IOException, ServletException{

    response.setContentType("text/html");

    JspWriter out = response.getWriter();

    // ...

    out.write("Time on server\r\n");

    out.write("");

    out.print( new java.util.Date() );

    out.write("\r\n");

    // ...

    }

    Correspondance JSP/Servlet

    JSP dorigineTime on server

    7

  • Stratgie de conception:

    Limiter le code Java dans les JSP Deux options

    Ecrire 25 lignes de code directement dans une JSP Ecrire ces 25 lignes dans une classe Java part et

    1 ligne dans une JSP pour linvoquer

    Pourquoi la 2 option est vraiment meilleure?e

    Dveloppement. Ecriture de la classe dans unenvironnement Java et pas HTML

    Debogage. Sil y a des erreurs, elles sont visible lacompilation

    Test. Laccs la classe Java facilite le test (ex:boucle de test de 100000 itrations sur un serveur)Rutilisation. Utilisation de la mme classe dansdiffrentes pages JSP

    8

  • Versions JSP

    Extensions de fichiers .jsp, page JSP standard

    .jspf, fragment de page JSP

    .jspx, page JSP compatible XML

    Deux syntaxes Standard (JSP 1.2)

    XML (JSP 2.0)

    Depuis la 2.0 : Extensible travers des librairies de tag (fichier .tld) imports ou

    personnels.9

  • Syntaxe de base

    Texte HTML Blah Pass au client. Rellement traduit en servlet par le code

    out.print("Blah");

    Commentaires HTML Pareil que les autres lments HTML: passs au client

    Commentaires JSP Ne sont pas envoys au client

    Echappement

  • Types des lments de scripts

    Expressions Format :

    Evalue et insre dans la sortie du servletSe traduit par out.print(expression)

    Scriptlets Format :

    Insr tel quel dans la mthode _jspService du servlet

    Dclarations Format :

    Pour dclarer une variable ou bien une fonction / procdure.

    Include / Import / Format : Ex :

    11

  • Expressions JSP:

    12

  • Expressions JSP

    Format

    Rsultat

    Expression value, convertie en String, et place dans la pageHTML la place quelle occupe dans la JSPLexpression est place dans _jspService en paramtre duout.print()

    Exemples Heurecourante: Hostname:

    Syntaxe compatible XML (JSP 2.0) Java Expression

    On ne peut pas mixer les deux versions dans une mme page. Ilfaut utiliser XML pour la page entire si on utilise jsp:expression.

    13

  • }Correspondance JSP/Servlet

    JSP dorigineUn nombre alatoire

    Code du servlet rsultant de la traductionpublic void _jspService(HttpServletRequest request,

    HttpServletResponse response)

    throws ServletException, IOException{

    response.setContentType("text/html");

    HttpSession session = request.getSession();

    JspWriter out = response.getWriter();

    out.println("Un nombre alatoire");

    out.println(Math.random());

    ...14

  • Expressions JSP: Exemple

    JSP Expressions

    Current time:

    Server:

    Session ID:

    The testParam form parameter:

    15

  • Variables prdfinies

    request

    Instance de HttpServletRequest (1 argument de service/doGet)

    response

    e

    Instance de HttpServletResponse (2 argument de service/doGet)

    out

    Instance de JspWriter (une version bufferise de Writer) utilise pourenvoyer des donns sur la sortie vers le client

    session

    Instance de HttpSession associe la requte (sauf si dsactive aveclattribut session de la directive de la page)

    application

    Instance de ServletContext (pour partager des donnes) telle queobtenue via getServletContext()

    e

    16

  • }Servlets vs JSP:

    Lire 3 paramtres (Servlet)public class ThreeParams extends HttpServlet{

    public void doGet(HttpServletRequest request,HttpServletResponse response)

    throws ServletException, IOException{...out.println(docType+

    "\n"+""+title+"\n"+"\n"+""+ title +"\n"+"\n"+"param1:"+ request.getParameter("param1")+"\n"+"param2:"+ request.getParameter("param2")+"\n"+"param3:"+ request.getParameter("param3")+"\n"+"\n"+"");

    } 17

  • Lire 3 paramtres (Servlet) :

    Rsultat

    18

  • Servlets vs JSP:

    Lire 3 paramtres (JSP)

    Reading Three Request Parameters

    Reading Three Request Parameters

    param1:

    param2:

    param3:

    19

  • Lire 3 paramtres (JSP) :

    Rsultat

    20

  • Scriptlets JSP:

    21

  • Scriptlets JSP

    Format

    Rsultat

    Code insr tel quel dans _jspService()

    Exemple

    Syntaxe XML Code Java 22

  • Correspondance JSP/Servlet

    JSP doriginefoo

    Code du servlet rsultant de la traductionpublic void _jspService(HttpServletRequest request,

    HttpServletResponse response)throws ServletException, IOException{

    response.setContentType("text/html");HttpSession session = request.getSession();JspWriter out = response.getWriter();out.println("foo");out.println(bar());baz();...

    } 23

  • Scriptlets JSP: Exemple

    On veut permettre lutilisateur de choisirla couleur de fond de la page HTML

    Quel est le problme avec ce code?

    24

  • Scriptlets JSP: Exemple

    Color Testing

    Testing a Background of

    "".

    25

  • Scriptlets JSP: Rsultat

    26

  • Utilisation des scriptlets pour

    crer des parties conditionnelles Postulat

    Les scriptlets sont insrs tels quels dans le servlet Pas besoin davoir des expressions Java compltes Cependant, les expressions compltes sont la plupart du temps

    plus claires et faciles maintenir

    Exemple

    Vous avez gagn !

    Vous avez perdu!

    Code du servlet rsultant de la traduction if(Math.random() < 0.5) {

    out.println("Vous avez gagn !");

    } else {

    out.println("Vous avez perdu !");

    }

    27

  • Dclarations JSP:

    28

  • Dclarations JSP

    Format

    Rsultat Insres telle quelle dans la dfinition de la classe du servlet, en

    dehors de toute mthode existante

    Exemples

    Remarque de conception Les attributs sont clairement utiles. Pour les mthodes, il est la

    plupart du temps prfrable de les dfinir dans une classe Javaspare

    Syntaxe XML Code Java

    29

  • Correspondance JSP/Servlet

    JSP dorigineSome Heading

    (Alternative : crer randomHeading() en mthodestatique dans une classe Java spare)

    30

  • Correspondance JSP/Servlet

    Code du servlet rsultant de la traductionpublic class MyJSP_jsp implements HttpJspPage{

    private String randomHeading(){

    return(""+ Math.random()+ "");

    }

    public void _jspService(HttpServletRequest request,

    HttpServletResponse response)

    throws ServletException, IOException{

    response.setContentType("text/html");

    HttpSession session = request.getSession();

    JspWriter out = response.getWriter();

    out.println("Some Heading");

    out.println(randomHeading());

    ...

    } ...

    }31

  • Dclarations JSP: Exemple

    JSP Declarations

    JSP Declarations

    Accesses to page since server reboot:

    32

  • Dclarations JSP: Rsultats

    33

  • Dclarations JSP: les

    mthodes jspInit et jspDestroy Les pages JSP, comme les servlets normaux,

    ont parfois besoin dutiliser init et destroy

    Problme : le servlet qui rsulte de la traductionde la page JSP peut dj utiliser init et destroy

    Les redfinir causerait des problmes

    Ainsi, il nest pas permis dutiliser des dclarationsJSP pour dfinir init ou destroy

    Solution : utiliser jspInit et jspDestroy Le servlet auto-gnr garantit que ces mthodes

    seront appeles depuis init et destroy, mais pardfaut limplmentation de jspInit et jspDestroy estvide (on peut donc les redfinir) 34

  • Dclarations JSP et variables

    prdfinies Problme

    Les variables prdfines (request, response, out, session, etc.)sont locales la mthode _jspService.Ainsi, elles ne sont pas disponibles pour les mthodes dfinies pardes dclarations JSP et les mthodes des classes externes.

    Que peut-on faire?

    Solution : les passer en paramtres. Ex:

    Rq1: les mthodes statiques ne rsolvent pas le problme Il faut galement les passer en paramtres

    Rq2: println de JSPWriter lance une IOException Utiliser throws IOException pour les mthodes qui utilisent println

    35

  • Pages JSP 2.0

    (avec la syntaxe XML)

    36

  • Pourquoi deux versions?

    La syntaxe classique des JSP nest pas compatible XML

    , , ne sont pas permis en XML

    HTML4 nest pas compatible XML non plus

    Donc au final, on ne peut pas utiliser des diteurs XML

    Pourquoi voudrait-on utiliser du code JSPdans des environnements XML?

    Pour produire du xhtml en particulier

    Pour produire des documents XML en gnral

    Il est possible dutiliser la syntaxe classique pour crer des documentsXML, mais il est plus simple de travailler en XML ds le dbut

    pour Web services

    pour les applications Ajax

    Il y a donc une seconde syntaxe qui suit les rgles de XML37

  • Syntaxe XML pour gnrer des

    fichiers XHTML (somefile.jspx)

    Some Title

    Le namespace jsp est ncessaire pour

    utiliser les commandes jsp:quelquechose.

    On peut utiliser dautres namespacespour se servir de librairies de tags JSP

    Construit la ligne du

    DOCTYPE

    Pour les pages JSP en syntaxe XML, le content

    type par dfaut est text/xml

    Contenu xhtml + commandes JSP utilisant la syntaxejsp:quelquechose + librairies de tags JSP

    38

  • Syntaxe XML pour gnrer des

    fichiers XML (somefile.jspx)

    foo

    bar

    Utilisation Quand on communique avec un client qui attend du

    vrai XML Ajax Web services Custom clients

    39

  • Exemple de page HTML4:

    syntaxe classique (sample.jsp)

    Sample (Classic Syntax)

    Sample (Classic Syntax)

    Num1:

    Num2:

    Num3:

    40

  • Exemple de page XHTML:

    syntaxe XML (sample.jspx)

    Sample (XML Syntax)

    Sample (XML Syntax)

    Num1: Math.random()*10

    double num2 = Math.random()*100;

    Num2: num2

    private double num3 = Math.random()*1000;

    Num3: num3

    41

  • Exemples de pages : Rsultat

    42

  • Document XML gnr avec une

    syntaxe XML

    Text

    Number:

    Math.random()*10

    43