Академический Документы
Профессиональный Документы
Культура Документы
comptes en banques
• Objectif
– Il s'agit à partir des classes Compte, Client developpées lors des TP précédents
de réaliser une application Web permettant de gérer les comptes d'un client donné.
La figure page suivante présente le fonctionnement envisagé pour l’interface cette
application.
Authentification ok
de l'utilisateur
Réalisation du
Page affichage des transfert
2
résultats du transfert
• Question 2 :
– Réaliser l'application web, dans l'environnement Netbeans 5.5 avec Tomcat
Authentification ok
de l'utilisateur
Réalisation du
Page affichage des transfert
2
résultats du transfert
ine is
ct
spon
id
a
xa
t_
as K m
en
ent
i
cl
corre
O
clie
se
un cli
t d _id
pas
nt_i ntier
mo lient
ep
id ne
un
à auc
dn
c
e
client_
'est
Retour à la page de login en
indiquant la cause de l'échec 1 Page liste des comptes
Page d'accueil
échec
Authentification ok
de l'utilisateur
POST
client_id="5000"
passwd="monMotDePasse"
échec
Authentification ok
de l'utilisateur
accueil.jsp listeComptes.jsp
LoginServlet.java
échec
Authentification ok
de l'utilisateur
accueil.jsp listeComptes.jsp
LoginServlet.java
NumberFormatException
échec
Authentification ok
de l'utilisateur
accueil.jsp listeComptes.jsp
LoginServlet.java
LoginServlet.java
Ecriture lourde.
<% String client_id = protected void doPost(HttpServletRequest request,
String cientID = request.getParameter("client_id"); HttpServletResponse response)
if (clientId != null)
out.println(clientID); ...
%>
${param.client_id}
String loginError = "Client ID n'est pas un nombre";
${param.client_id} EL request.setAttribute("erreurLogin",loginError);
getServletContext().getRequestDispatcher(
Simplifiée par utilisation de EL (Expression "/accueil.jsp").forward(request, response);
Language introduit avec JSP 2.0)
échec
Authentification ok
de l'utilisateur
accueil.jsp listeComptes.jsp
LoginServlet.java
ListeComptes.jsp
N° Id du compte
solde du compte
solde du compte
Fin pour
N° Id du compte
solde du compte
solde du compte
...
Iterator<Compte> iterator() {
…
} Pour utiliser boucle foreach,
} Client doit implémenter
interface Iterable
Philippe GENOUD © UJF Grenoble – 15/03/2007 12
Utilisation de EL (JSP 2.0) pour la page listeComptes.jsp
Import et useBean inutiles
Le conteneur JSP cherche automatiquement un attribut de nom client dans les différents scopes (page, request,
session …) ${client} <%= pageContext.findAttribute("client") %>
Page JSP contenant une expression EL erronée (par ex. faute de frappe)
${client.clientID
${client.clientID}}
clientID au lieu de clientId
Compilation
Exécution
Les librairies de Tag utilisées doivent être indiquées avec une directive @taglib
Pour chaque compte auquel le client a accès Tag foreach de la core librairie de JSTL
Fin pour
échec
Authentification ok
de l'utilisateur
<JSP
<JSP …>
…> <JSP
<JSP …>
…>
…
… …
…
LoginServlet
accueil.jsp listeComptes.jsp
Réalisation du TransfertServlet
Page affichage des transfert
2'
2
résultats du transfert
<JSP
<JSP …>
…>
…
…
bye.jsp
1 <JSP
<JSP …>
…>
…
…
2'
2 apresTransfert.jsp
Philippe GENOUD © UJF Grenoble – 15/03/2007 17
<JSP
<JSP …>
…>
…
…
Transfert effectué
Page affichage des Montant du transfert supérieur au maximum autorisé
résultats du transfert
<JSP
<JSP …>
…>
…
…
apresTransfert.jsp 18
Philippe GENOUD © UJF Grenoble – 15/03/2007
1
La page correspondant à
http://localhost:8090/BANQUE_IMA/transfert.jsp
2
est dans le cache du navigateur
Insérer le fragment de jsp suivant dans chacune des pages jsp de l'application
noCacheHeader.jspf
<%
response.setHeader("Expires", "Sat, 6 May 1995 12:00:00 GMT");
getServletContext().getRequestDispatcher(
"/Bye.jsp").forward(request, response);
<JSP
<JSP …>
…>
…
… session.invalidate();
}
Bye.jsp
HttpServletRequest
HttpSession
void invalidate() invalide cette session et retire (unbinds) tous les objets qui lui étaient associés.
ServeurTomcat
GET
GET BANQUE_IMA_0EL
BANQUE_IMA_0EL
session1
crée
request.getSession()
Accueil.jsp
POST
POST BANQUE_IMA_0EL/bimaLogin
BANQUE_IMA_0EL/bimaLogin
1 client_id
client_id == "5000"
"5000"
passwd crée client
passwd == "toto"
"toto"
LoginServlet
ajoute client
récupère client
ListeComptes.jsp
GET
GET BANQUE_IMA_0EL/bimaLogout
BANQUE_IMA_0EL/bimaLogout
LogoutServlet
Bye.jsp invalide
3
POST
POST BANQUE_IMA_0EL/bimaLogin
BANQUE_IMA_0EL/bimaLogin
client_id
client_id == "5000"
"5000"
4 crée session2
passwd
passwd == "toto"
"toto"
request.getSession()
ListeComptes.jsp
Philippe GENOUD © UJF Grenoble – 15/03/2007 22
LoginServlet.java
if (session.isNew()) {
getServletContext().getRequestDispatcher(
"/accueil.jsp").forward(request, response);
return;
}
ServeurTomcat
GET
GET BANQUE_IMA_0EL
BANQUE_IMA_0EL
session1
crée
request.getSession()
POST Accueil.jsp
POST BANQUE_IMA_0EL/bimaLogin
BANQUE_IMA_0EL/bimaLogin
1 client_id
client_id == "5000"
"5000"
passwd crée client
passwd == "toto"
"toto"
LoginServlet
ajoute client
récupère client
ListeComptes.jsp
2 GET
GET BANQUE_IMA_0EL/transfert.jsp
BANQUE_IMA_0EL/transfert.jsp
récupère client
transfertl.jsp
3 GET
GET BANQUE_IMA_0EL/bimaLogout
BANQUE_IMA_0EL/bimaLogout
LogoutServlet
4 Bye.jsp invalide
GET
GET BANQUE_IMA_0EL/transfert.jsp
BANQUE_IMA_0EL/transfert.jsp
session2
crée request.getSession()
HttpSession = request.getSession(false);
Introduits à partir de la version 2.3 de l'API des servlets les filtres permettent
d'intercepter les requêtes et réponses des servlets
• authentificiation
• redirection
• modification des entêtes
• cryptage des données
•…
request request
Servlet
response response
...
}
Philippe GENOUD © UJF Grenoble – 15/03/2007 26
Le déploiement des filtres s'effectue au travers du fichier web.xml
MaServlet
t
u es
request req MaServlet
se
p on
res
req
response ue
st
FiltreAiguilleur re s
pon
se UnPageJSP
if (condition) {
RequestDispatcher rd = request.getRequestDispatcher("/UnePageJSP.jsp");
rd.dispatch(request,respeonse);
}
else
chain.doFilter (request, response);
}
...
}
Par défaut le filtre n'est appliqué qu'aux requêtes issues directement du client mais pas aux
requêtes forwardées
<web-app
<web-app version="2.4"
version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns="http://java.sun.com/xml/ns/j2ee" ...>
...>
public class Servlet1 extends HttpServlet {
<!– Definition des filtres présents dans l'application Web -->
protected void doGet(HttpServletRequest request, HttpServletResponse response) <filter>
throws ServletException, IOException { <filter-name>Filtre1</filter-name>
System.out.println("Dans servlet 1"); <filter-class>filters.Filter1</filter-class>
request.getRequestDispatcher("/Servlet2").forward(request,response); </filter>
}
<filter>
… <filter-name>Filtre2</filter-name>
} <filter-class>filters.Filter2</filter-class>
</filter>
public class Servlet2 extends HttpServlet {
<!– association des filtres à des servlets ou des urls -->
protected void doGet(HttpServletRequest request, HttpServletResponse response) <filter-mapping>
throws ServletException, IOException { <filter-name>Filtre1</filter-name>
System.out.println("Dans servlet 2"); <url-pattern>/Servlet1</url-pattern>
response.setContentType("text/html;charset=UTF-8"); </filter-mapping>
PrintWriter out = response.getWriter();
out.println("<html>"); <filter-mapping>
out.println("<head>"); <filter-name>Filtre2</filter-name>
out.println("<title>Servlet Servlet2</title>"); <url-pattern>/Servlet2</url-pattern>
out.println("</head>"); </filter-mapping>
out.println("<body>");
out.println("<h1>Servlet Servlet2 at " + request.getContextPath () + "</h1>");
out.println("</body>"); <!-–
<!-– Définition
Définition des
des servlets
servlets -->
-->
out.println("</html>"); <servlet>
<servlet>
out.close(); <servlet-name>Servlet1</servlet-name>
<servlet-name>Servlet1</servlet-name>
} <servlet-class>servlet.Servlet1</servlet-class>
<servlet-class>servlet.Servlet1</servlet-class>
</servlet>
</servlet>
Dans Filtre1 filtrage de la requete http://localhost:8090/Test/Servlet1
… ……
Dans servlet 1
} <!–
<!– servlets
servlets mappings
mappings -->
-->
Dans servlet 2
...
...
Dans Filtre1 filtrage de réponse
</web-app>
</web-app>
request request
Servlet1
request
forward Servlet2
response
response response
Filtre1
<filter>
<filter-name>Filtre2</filter-name>
<filter-class>filters.Filter2</filter-class>
</filter>
Filtre appliqué :
- au requêtes issues du client <!– association des filtres à des servlets ou des urls -->
<filter-mapping>
- au requêtes issues d'un forward <filter-name>Filtre1</filter-name>
<url-pattern>/Servlet1</url-pattern>
<dispatcher>REQUEST</dispatcher> </filter-mapping>
<dispatcher>FORWARD</dispatcher> <filter-mapping>
<filter-name>Filtre2</filter-name>
<url-pattern>/Servlet2</url-pattern>
</filter-mapping>
<!-–
<!-– Définition
Définition des
des servlets
servlets -->
-->
<servlet>
<servlet>
Dans Filtre1 filtrage de la requete http://localhost:8090/Test/Servlet1 <servlet-name>Servlet1</servlet-name>
<servlet-name>Servlet1</servlet-name>
Dans servlet 1 <servlet-class>servlet.Servlet1</servlet-class>
<servlet-class>servlet.Servlet1</servlet-class>
Dans Filtre2 filtrage de la requete http://localhost:8090/Test/Servlet2 </servlet>
</servlet>
Dans servlet 2 ……
Dans Filtre2 filtrage de la réponse <!–
<!– servlets
servlets mappings
mappings -->
-->
Dans Filtre1 filtrage de réponse ...
...
</web-app>
</web-app>
request request
Servlet1
request
request
forward Servlet2
response
response
response response
Filtre1 Filtre2
Exercices :