Post on 18-Sep-2015
description
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