Vous êtes sur la page 1sur 54

JSP

Java Server Pages

Des Servlets aux JSP


Les Servlets
Lecture des donnes de lu:lisateur Lecture des requtes HTTP Cra:on des Cookies Etc.

Limita:ons
Pas pra:ques pour les longs chiers HTML out.println("<h1>Bla Bla</h1>" + "bla bla bla bla bla " + " lots more here...")

Principes des JSP


U:lisa:on du HTML pour dvelopper les rponses aux requtes crire du code java directement dans les pages HTML (comme le Javascript) Transforma:on des JSP en Servlets
Ce sont ces Servlets qui sont excutes
3

Rela:on entre les Servlets et les JSP


Dans les Servlets, le code HTML est insr dans le code Java Dans les JSP, le code Java est insr dans du code HTML
Java HTML HTML Java

Exemple
<HTML> <HEAD> <TITLE>Hello World Example</TITLE> </HEAD> <BODY> <H2>Hello World Example</H2> <B>Hello <% =request.getParameter("name") %>!</B> </BODY>

</HTML>

La jsp se trouve dans : tomcat_home/webapps/proj/HelloWorld.jsp Elle est appelle par lURL : http://<host>:<port>/proj/HelloWorld.jsp?name=snoopy6

Cas dURL sans paramtres : http://<host>:<port>/proj/HelloWorld.jsp


7

Avantages des JSP


Les JSP font ce que font les Servlets Il est plus facile dcrire et de maintenir le code HTML La spara:on entre le HTML et le code Java est plus facile
8

Traitement dune page JSP


Recherche de la page .jsp par:r de lURL et des chiers de congura:on Analyse du code de la page Conversion en une Servlet et le code associ lintrieur de la mthode _jspService() Dmarrage de la Servlet
9

Fonc:onnement de la JSP
2 phases :
Traduc:on de la JSP en Servlet
La premire fois que la JSP est accde Le code peut se trouver dans tomcat_home/work

Rponse aux requtes


Cest la Servlet gnre qui rpond aux requtes

10

Bonnes pra:ques
Pas de long code lintrieur dune page Melre le long code dans une classe Java et appeler ce code dans la page JSP Objec:fs
Spara:on claire du code Simplica:on du dbogage Simplica:on de la tche des tests Ru:lisa:on du code

11

Les lments Scrip&ng des JSP


Les lments Scrip:ng des JSP permelent dinsrer du code dans la Servlet gnre par:r de la JSP 3 formes:
Expressions de la forme <%= expression %> qui sont values et insrs en sor:e Scriptlets de la forme <% code %> qui sont insres dans la mthode _jspService Dclara:ons de la forme <%! code %> insres dans la classe Servlet en dehors des mthodes

12

Les expressions JSP (1/2)


But
Insrer des valeurs Java directement en sor:e

Syntaxe
<%= Java Expression %>

Exemple
<%= Math.random() %>
13

Les expressions JSP (2/2)


tapes
Une expression est value Le rsultat est conver: en string Le string est insr dans la page

Ces tapes sont eectues au run&me (quand la page est appele par une requte)
Accs aux informa:ons de la requte
14

Traduc:on dune expression


<H1>A Random Number</H1> <%= Math.random() %>
public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println("<H1>A Random Number</H1>"); out.println(Math.random()); ... }
15

Variables prdnies
Request correspond HlpServletRequest Response correspond HlpServletResponse Session correspond HlpSession associe la requte Out correspond PrintWriter (une version en buer du type JspWriter) u:lis pour envoyer la rponse au client

16

<HTML> <HEAD> <TITLE>JSP Expressions</TITLE></HEAD> <BODY> <H2>JSP Expressions</H2> <UL> <LI>Current time: <%= new java.util.Date() %> <LI>Your hostname: <%= request.getRemoteHost() %> <LI>Your session ID: <%= session.getId() %> <LI>The <CODE>testParam</CODE> parameter: <%= request.getParameter("testParam") %> </UL> </BODY> </HTML>
17

Encoded

Unencoded

18

Les Scriplets JSP


But Syntaxe
Les Scriplets JSP permelent dinsrer du code arbitraire qui sera insr dans ( _jspService ) <% Java Code %>

Accs aux mmes variables prdnies que les expressions


Request correspond HlpServletRequest Response correspond HlpServletResponse Session correspond HlpSession associe la requte Out correspond PrintWriter (une version en buer du type JspWriter) u:lis pour
envoyer la rponse au client

19

Traduc:on dune Scriptlet


<%= foo() %> <% bar(); %>

public void _jspService(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.setContentType("text/html"); HttpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println(foo()); bar(); ... }
20

Gnra:on de code
Les Scriptlets peuvent crire en sor:e en u:lisant out Exemple:
<% String queryData = request.getQueryString(); out.println("Alached GET data: " + queryData); %>

21

Code HTML dans les Scriptlets


Alternance avec du code HTML
<% if (Math.random() < 0.5) { %> You <B>won</B> the game! <% } else { %> You <B>lost</B> the game! <% } %>

if (Math.random() < 0.5) { out.println("You <B>won</B> the game!"); } else { out.println("You <B>lost</B> the game!"); }

22

Dclara:on dans les JSP


But
Une dclara:on permet dinsrer des mthodes ou des champs dans la classe de la Servlet en dehors de toute mthode

Syntaxe
<%! Java Code %>

Les dclara:ons ne gnrent pas de sor:es Elle dnissent des variables et des mthodes

23

Ache le nombre de requtes reues par cele page depuis quelle a t charge
<%! private int accessCount = 0; %> <%! private synchronized int incAccess() { return ++accessCount; } %> Accesses to page since server reboot: <%= incAccess() %>

Exemple : dclara:on

24

Exemple : code gnr


public class xxxx implements HlpJspPage { private int accessCount = 0; private synchronized int incAccess() { return ++accessCount; } public void _jspService(HlpServletRequest request, HlpServletResponse response) throws ServletExcep:on, IOExcep:on { response.setContentType("text/html"); HlpSession session = request.getSession(true); JspWriter out = response.getWriter(); out.println("Accesses to page since server reboot: "); out.println(incAccess()); ... } ... }

25

Variables prdnies
Appeles aussi implicit objects Variables dj tudies
request, response, out, session

Il existe 4 autres variables


applica:on, cong, ServletContext, page

26

La variable ServletContext
Reprsente le contexte de la Servlet
ServletContext obtenu par appel getServletCong().getContext()

Rappel
Les Servlets et JSP peuvent stocker des donnes constantes dans lobjet ServletContext Rcuprer et posi:onner les alributs se fait grce getAlribute et setAlribute Le contexte ServletContext est partag par toutes les Servlets du serveur

La variable Applica:on est u:lise pour stocker des valeurs spciques lapplica:on Web

27

La variable cong
Correspond ServletCong de la page obtenue par la mthode init Rappel
Con:ent des valeurs dini:alisa:on spciques la Servlet

28

La variable pageContext
pageContext encapsule des proprits spciques du serveur
Exemple: performance de JspWriters

29

La variable page
Synonyme de this Cele variable nest pas vraiment u:le dans les pages JSP Elle tait conue quand le language de scrip:ng pouvait tre autre chose que Java
30

Les direc:ves des JSP


But
Une direc:ve JSP dnit la structure de la classe de la Servlet cre par:r de la page JSP

Syntaxe
<%@ direc:ve alribute="value" %>

A par:r dune seule direc:ve, il est possible de posi:onner plusieurs valeurs


<%@ direc:ve alribute1="value1" ... alributeN="valueN" %>
31

Les dirents types de direc:ves


3 types
page permet de raliser des opra:on de style
import classes personaliser la superclass de la classe

include, permet dinclure un chier dans une servlet au moment de sa gnra:on par:r de la JSP taglib, indique une librairie de tags que la page peut inclure

32

Les alributs de page


import : ensemble de classes/paquetages importer

Ex: <%@ page import="java.u:l.*,java.io.*" %>


contentType : posi:onne le MIME-Type du document rsultant (text/html par dfaut)

Ex: <%@ page contentType="text/plain" %>


Note : Au lieu du:liser lalribut contentType, il est possible dcrire
<% response.setContentType("text/plain"); %>
33

Autres alributs de page


isThreadSafe=true|false
false indique que la Servlet doit implanter linterface SingleThreadModel

session=true|false
false indique que la session ne doit pas tre crite Sauve les donnes de la session en mmoire Toutes les pages rela:ves doivent faire la mme chose

buer=sizekb|none
spcie la taille du buer de out de JspWriter
34

Autres alributs de page


autoush=true|false
Flush le buer quand il est plein ou lve une excep:on

extends=package.class
Fait que la Servlet cre une sous-classe de la classe donne

info=message
Un message retourner par la mthode getServletInfo

35

Autres alributs de page


errorPage=url
Dnit une JSP qui gre les excep:ons non traites par la JSP courante

isErrorPage=true|false
Permet la page JSP dtre une page derreurs

36

<HTML> <HEAD> <TITLE>Reading From Database</TITLE></HEAD> <BODY> <%@ page import="java.sql.*" %> <%@ page errorPage="Error.jsp" %> <% Class.forName("oracle.jdbc.driver.OracleDriver"); Connection con = DriverManager.getConnection("jdbc:oracle:thin:" + "snoopy/snoopy@sol4:1521:stud"); Statement stmt = con.createStatement(); ResultSet rs = stmt.executeQuery("Select * from a"); ResultSetMetaData md = rs.getMetaData(); int col = md.getColumnCount(); %>
37

<TABLE border="2"> <% while (rs.next()) { %> <TR> <% for (int i = 1 ; i <= col ; i++) { %> <TD><%= rs.getString(i) %></TD> <% } %> </TR> <% } %> </TABLE> </BODY> </HTML>
38

<HTML> <HEAD> <TITLE>Reading From Database</TITLE></HEAD> <BODY> <%@ page isErrorPage="true" %> Oops. There was an error when you accessed the database. <br> Here is the stack trace: <br> <br> <pre> <% exception.printStackTrace(new java.io.PrintWriter(out)); %> </pre> </BODY> </HTML>
39

Accs ReadingDatabase quant il nya pas de table "a" Accessing ReadingDatabase when there is a table "a"

40

La direc:ve include
But
Permet dinclure des chiers au moment o les pages JSP sont traduites en Servlets

Syntaxe
<%@ include le="rela:ve url" %>

41

<HTML> <HEAD> <TITLE>Reading From Database</TITLE></HEAD> <BODY> Here is an interesting page.<br><br> Bla, Bla, Bla, Bla. <%@ include file="AccessCount.jsp" %> </BODY> </HTML> <hr> AccessCount.jsp Page Created for Distributed system Course. Email us <a href="mailto:takoua_abdellatif@essths.rnu.tn">here</a>. <br> <%! private int accessCount = 0; %> Accesses to page since server reboot: <%= accessCount++ %>
42

BlaBla.jsp

43

criture des JSP en XML


Il est possible de remplacer les tags JSP par des tags XML reprsentant :
Les expressions Les Scriptlets Les dclara:ons Les direc:ves

44

<%= Java Expression %>

<jsp:expression> Java Expression </jsp:expression> <jsp:scriptlet> Code Java </jsp:scriptlet> <jsp:declaration> Java Declaration </jsp:declaration> <jsp:directive.type Attribute = value/>
45

<%Code%>

<%!declaration%>

<%@directive%>

Les Ac:ons
Les ac:ons JSP u:lisent la syntaxe XML pour contrler le comportement du Servlet engine Exemple dac:ons
Inser:on dynamique de chiers Ru:lisa:on de composants JavaBeans Transfert de lu:lisateur une autre page Gnera:on du HTML pour le plugin Java

46

Les Ac:ons fournies


jsp:include inclut un chier quand la page est appele jsp:useBean, jsp:setProperty, jsp:getProperty manipule les JavaBeans jsp:forward Transfre le client en une autre page jsp:plugin Gnre du code spcique qui construit des tags OBJECT ou EMBED pour le plugin java

47

LAc:on jsp:include
Insre des chiers quand la page est appelle Syntaxe
<jsp:include page="rela:ve URL" ush="true" />

48

LAc:on jsp:forward
Transfre vers une autre page
<jsp:forward page="rela&ve URL"/>
La page peut tre sta:que ou gnre dyamiquement Exemples:
<jsp:forward page="/u:ls/errorReporter.jsp" /> <jsp:forward page="<%= someJavaExpression %>" />

49

Les commentaires
<%-- comment --%>
Commentaire JSP est ignor par le traducteur JSP-to-scriptlet

<!-- comment -->


Commentaire HTML est copi dans le chier HTML gnr Tous les lments de scrip:ng, direc:ves, ou ac:ons entre commentaires ne sont pas tenus en compte

/* comment */ or // comment
Commentaire Java, inclus dans le code Java

50

Les conven:ons des quotes


<\% - u:lis dans le texte (HTML sta:que) quand on veut acher <% %\> - u:lis dans les lpents de scrip:ng et dans les alributs quand on veut %> \ \ - pour u:liser les quotes dans les alributs \\ pour avoir un \ dans une alribut

51

Init et Destroy
Dans les pages JSP, comme dans les servlets classiques, il est possible de vouloir u:liser Init et destroy Il nest pas lgal du:liser les dclara:ons de JSP pour surcharger init et destroy car ces mthodes sont dj implantes par la Servlet cre Il faut u:liser jspInit et jspDestroy
La Servler gnre appelle ces mthodes Les versions standards de jspInit et jspDestroy sont vides (Le dveloppeur peut les remplir)

52

U:lisa:on des beans par:r de JSP


Dclara9on
<jsp:usebean id="name" (rfrence l'instance du composant) class="paquetage.class" (nom qualifi de la classe) scope="page|request|session|application" (porte) /> <jsp:getProperty name="name" property="property" />

Lecture

Modica9on
Ini9alise tous les aAributs de lobjet name avec les paramtres HTTP du mme nom (en 2 lignes !) <jsp:setProperty name="name" property="property" value="value" /> <jsp:setProperty name="name" property="*" />

53

Exemple
Dans une page JSP
<html> ... <jsp:usebean id="test" class= CoursJEE.SimpleBean" /> <jsp:setProperty name="test" property="message" value="Hello !!" /> <h1>Le message est : <i> <jsp:getProperty name="test" property="message" /> </i></h1> </html>

Code source
package CoursJEE; public class SimpleBean { private String message = " Bonjour"; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } }
54

Vous aimerez peut-être aussi