Académique Documents
Professionnel Documents
Culture Documents
Cours 3
JSP
Les servlets facilitent le traitement avec java
des requtes et rponses HTTP, mais
ils ne sont pas appropris lcriture de code HTML
out.println("<html><head><title>"+title+"</title>");
compil en
MyJSP_jsp.java
charg et initialis
en tant que
MyJSP_jsp.class
obj:MyJSP_jsp
webapps
webapps
AREL
AREL
<html>
...
...
...
</html>
Clock.jsp
Request
#5
Request
#6
JSP page
translated into
servlet
Yes
No
No
No
Yes
No
Servlet
compiled
Yes
No
No
No
Yes
No
Yes
No
Yes
No
Yes
No
init (or
equivalent)
called
Yes
No
Yes
No
Yes
No
doGet (or
equivalent)
called
Yes
Yes
Yes
Yes
Yes
Yes
Servlet
instantiated and
loaded into
server's
memory
Page modified
Request
#3
Server restarted
Request
#2
Request
#1
Correspondance JSP/Servlet
JSP dorigine
<h1>Time on server</h1>
<p><%= new java.util.Date() %></p>
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
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)
Syntaxe de base
Texte HTML
<h1>Blah</h1>
Pass au client. Rellement traduit en servlet par le code
out.print("<h1>Blah</h1>");
Commentaires HTML
<!-- Commentaire -->
Pareil que les autres lments HTML: passs au client
Commentaires JSP
<%-- Commentaires --%>
Ne sont pas envoys au client
Echappement <%
Pour obtenir <% dans la sortie, utiliser <\%
10
Scriptlets
Format : <% code %>
Insr tel quel dans la mthode _jspService du servlet
Dclarations
Format : <%! code %>
Pour dclarer une variable ou bien une fonction / procdure.
Include / Import /
Format : <%@ directive %>
Ex :
<%@ include file="unAutreFichier" %>
<%@ page import="java.util.*" %>
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>11
Expressions JSP:
<%= valeur %>
12
Expressions JSP
Format
<%= Expression Java %>
Rsultat
Expression value, convertie en String, et place dans la page
HTML la place quelle occupe dans la JSP
Lexpression est place dans _jspService en paramtre du
out.print()
Exemples
Correspondance JSP/Servlet
JSP dorigine
<h1>Un nombre alatoire</h1>
<%= Math.random() %>
14
15
Variables prdfinies
request
Instance de HttpServletRequest (1e argument de service/doGet)
response
Instance de HttpServletResponse (2e argument de service/doGet)
out
Instance de JspWriter (une version bufferise de Writer) utilise pour
envoyer des donns sur la sortie vers le client
session
application
Instance de ServletContext (pour partager des donnes) telle que
obtenue via getServletContext()
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+
"<html>\n"+
"<head><title>"+title+"</title></head>\n"+
"<body bgcolor=\"#FDF5E6\">\n"+
"<h1 align=\"CENTER\">"+ title + "</h1>\n"+
"<ul>\n"+
"<li><b>param1</b>:"
+ request.getParameter("param1")+"</li>\n"+
"<li><b>param2</b>:"
+ request.getParameter("param2")+"</li>\n"+
"<li><b>param3</b>:"
+ request.getParameter("param3")+"</li>\n"+
"</ul>\n"+
"</body></html>");
}
}
17
18
Servlets vs JSP:
Lire 3 paramtres (JSP)
<!DOCTYPE >
<html>
<head>
<title>Reading Three Request Parameters</title>
<link rel = STYLESHEET
href = "JSP-Styles.css"
type = "text/css">
</head>
<body>
<h1>Reading Three Request Parameters</h1>
<ul>
<li><b>param1</b>:
<%= request.getParameter("param1") %> </li>
<li><b>param2</b>:
<%= request.getParameter("param2") %> </li>
<li><b>param3</b>:
<%= request.getParameter("param3") %> </li>
</ul>
</body></html>
19
20
Scriptlets JSP:
<% Code %>
21
Scriptlets JSP
Format
<% Code Java %>
Rsultat
Code insr tel quel dans _jspService()
Exemple
<%
String queryData = request.getQueryString();
out.println("Attached GET data :" + queryData);
%>
<% response.setContentType("text/plain"); %>
Syntaxe XML
<jsp:scriptlet>Code Java</jsp:scriptlet>
22
Correspondance JSP/Servlet
JSP dorigine
<h2>foo</h2>
<%= bar() %>
<% baz(); %>
23
24
25
26
Exemple
<% if
Vous
<% }
Vous
<%}
(Math.random()
< 0.5)
avez <b>gagn</b> !
else { %>
avez <b>perdu</b>!
%>
{ %>
Dclarations JSP:
<%! Code %>
28
Dclarations JSP
Format
<%! Java Code %>
Rsultat
Insres telle quelle dans la dfinition de la classe du servlet, en
dehors de toute mthode existante
Exemples
<%! private int someField = 5; %>
<%! private void someMethod(...) {...} %>
Remarque de conception
Les attributs sont clairement utiles. Pour les mthodes, il est la
plupart du temps prfrable de les dfinir dans une classe Java
spare
Syntaxe XML
<jsp:declaration> Code Java </jsp:declaration>
29
Correspondance JSP/Servlet
JSP dorigine
<h1>Some Heading</h1>
<%!
private String randomHeading(){
return("<h2>"+ Math.random()+ "</h2>");
}
%>
<%= randomHeading() %>
Correspondance JSP/Servlet
Code du servlet rsultant de la traduction
public class MyJSP_jsp implements HttpJspPage{
private String randomHeading(){
return("<h2>"+ Math.random()+ "</h2>");
}
public void _jspService(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException{
response.setContentType("text/html");
HttpSession session = request.getSession();
JspWriter out = response.getWriter();
out.println("<h1>Some Heading</h1>");
out.println(randomHeading());
...
} ...
}
31
32
33
34
36
Utilisation
Quand on communique avec un client qui attend du
vrai XML
Ajax
Web services
Custom clients
39
41
42
43