0% ont trouvé ce document utile (0 vote)
17 vues40 pages

javaEE 2

Le document traite des problèmes d'état dans le protocole HTTP et présente des solutions comme les cookies et les sessions pour maintenir l'état entre les requêtes. Il explique également comment utiliser JDBC pour se connecter à des bases de données et introduit Java Server Pages (JSP) pour intégrer du code Java dans des documents HTML. Enfin, il décrit les balises JSP et leur utilisation pour structurer le code et gérer les interactions avec les utilisateurs.

Transféré par

Sergi Gine Rius
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
17 vues40 pages

javaEE 2

Le document traite des problèmes d'état dans le protocole HTTP et présente des solutions comme les cookies et les sessions pour maintenir l'état entre les requêtes. Il explique également comment utiliser JDBC pour se connecter à des bases de données et introduit Java Server Pages (JSP) pour intégrer du code Java dans des documents HTML. Enfin, il décrit les balises JSP et leur utilisation pour structurer le code et gérer les interactions avec les utilisateurs.

Transféré par

Sergi Gine Rius
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
Vous êtes sur la page 1/ 40

Patrick Albers – Oriana Licchelli

Servlet : Problème d’état

Problème
Le protocole HTTP est un protocole sans état, il est
donc impossible de garder des informations
d’une requête à l’autre
Solutions
1. Champs de formulaire cachés
2. Réécriture d’URL
3. Cookies
4. Session

2
Cookies (1/2)

Cookie = information stockée dans le client par une application


web, qui sera renvoyée chaque fois que le client accède à
l’application

 L’API Servlet fournit la classe javax.servlet.http.Cookie pour


travailler avec les Cookies
– Cookie(String name, String value) construe un cookie
– String getValue() retourne la valeur du cookie
– setValue(String new_value) donne une nouvelle valeur au cookie

 Chaque cookie doit être ajouté à la réponse avec la méthode


addCookie(Cookie mon_cook) de l’objet HttpServletResponse

3
Cookies (2/2)

// Création d’un cookie, qui est ajouté au client


Cookie cookie = new Cookie(“N_acces", "12");
response.addCookie(cookie);

// Récupérer les cookies


Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (int i = 0; i < cookies.length; i++) {
String name = cookies[i].getName();
String value = cookies[i].getValue();
}
}
Il n’existe pas dans l’API Servlet de méthode permettant
de récupérer la valeur d’un cookie par son nom !

4
Session
 La session est utilisée pour mémoriser les actions d'un utilisateur
sur plusieurs requêtes HTTP sur une période donnée

 Elle est géré par la classe javax.servlet.http.HttpSession, avec les


méthodes de :
– création liées à la requête :
• HttpSession getSession() retourne la session associée à l’utilisateur

– gestion d’association :
• Enumeration getAttributNames() retourne les noms de tous les attributs
• Object getAttribut(String name) retourne l’objet associé au nom
• setAttribut(String na, Object va) modifie na par la valeur va
• removeAttribut(String na) supprime l’attribut associé à na
– Destruction (HttpSession) :
• logout() termine la session

 HttpSession est un mécanisme qui permet de stocker des objets et non


de simples chaînes de caractères comme les cookies.

5
Session : exemple
public class HttpSessionServlet extends HttpServlet {

protected void service(HttpServletRequest req, HttpServletResponse res)


throws ServletException, IOException {

PrintWriter out = res.getWriter();


HttpSession session = req.getSession();

Integer count = (Integer) session.getAttribute(“Count");

if (count == null)
count = new Integer(1);
else
count = new Integer(count.intValue() + 1);

session.setAttribute("Count", count);

out.println("Vous avez visité cette page " + count + " fois.");


}}

6
Collaboration de Servlets : include
Client SESSION

Nom
(request,
Oui response) Servlet A
Non Class 1


Envoyer include(request, response) Class 2



(HTML)

Servlet B



7
Collaboration de Servlets : forward
Client SESSION

Nom
(request,
Oui response) Servlet A
Non —

Envoyer —
forward(request, response)
Class 1

Class 2
Servlet B




(HTML)

8
Servlet : exemple
Servlet Emetteur qui permet de distribuer un renvoi au servlet Recepteur

public class Emetteur extends HttpServlet {


protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
RequestDispatcher dispat = req.getRequestDispatcher("/Recepteur");
dispat.forward(req,res);
// Pas de code après
}
}

public class Recepteur extends HttpServlet {


protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
PrintWriter out = res.getWriter();
out.println(“page html à envoyer au client”);

}
}

9
Se connecter aux bases de données
JDBC : technologie basée sur Java qui permet d'accéder à une base
de donnée de façon indépendante du Système de Gestion des
Bases de données (SGBD)
 API de JDBC fournie des méthodes pour accéder virtuellement à
une source de donnée organisée en tableau. Elle permet de :
– faire des requêtes sur une base de données en utilisant des
déclarations SQL
– connecter un programme Java avec un SGBD qui a un driver
pour JDBC
 En changent le SGBD, il est seulement nécessaire de changer le
driver pour le nouveau SGBD

JDBC API

Driver pour Oracle Driver pour SQL Server Driver pour MySQL

10
JDBC : API Java

package java.sql
 classes et interfaces pour utiliser JDBC :
– DriverManager qui fournie les services basiques pour
manipuler les drivers JDBC
– Connection est une interface utilisée pour ouvrir une
session avec une base de données spécifique
– Statement est une interface qui est utilisé pour exécuter et
recevoir les résultats d'une requête SQL
– ResultSet est une interface qui implémente un tableau de
données qui généralement stocke les résultats d'une
requête

11
JDBC : utilisation
1. méthode registerDriver(Driver driver) de la classe DriverManager pour charger le
driver de un SGBD spécifique
Exemple:
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
2. méthode getConnection(String url) de la classe DriverManager pour établir une
connexion avec la base de donnée
Exemple:
Connection connect = DriverManager.getConnection("jdbc:mysql://localhost/NomBdd?
user=nomUsert&password=motDePasse");
3. méthode createStatement() de l'interface Connection pour créer un « Statement »
qui permettre de lancer les instructions SQLs sur la base de données
Exemple:
Statement stmt = connect.createStatement();
4. méthode exécute(String sql) de l'Interface Statement pour exécuter des
instructions SQL
Exemple:
stmt.execute(sql_select);
5. interface ResultSet pour accéder au résultat de l'exécution d'une requête
Exemple:
ResultSet rset = stmt.getResultSet();

12
JDBC : exemple

13
Exercice 2
1) Dans l’application « biblio », copiez/déposez le fichier jar de
JDBC dans le répertoire WEB-INF/lib
2) Modifiez l’application « biblio » afin d’afficher les informations
de la table « biblio » dans la réponse du servlet.

14
Java Server Page

 JSP est l’acronyme de Java Server Pages

 Une JSP est un fichier texte ( .jsp ) contenant un


modèle de document statique et des balises
spécifiques pour inclure du code Java et exécuter
une partie de la logique applicative. Le contenu
statique correspond à du code HTML.

 Lorsqu’une JSP est appelée pour la première fois :


– Le serveur la traduit en servlet
– En tant que servlet, elle est instanciée
– Puis exécutée

15
JSP : exemple 1 (1/3)
Le but de cet exemple est d’afficher un message et la date

package bonDate;
import java.io.*; import javax.servlet.*; import javax.servlet.http.*;

public class BonjourServlet extends HttpServlet {


protected void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

PrintWriter out = res.getWriter();


out.println("<html><head><title>Exemple</title> </head> ");
out.println("<body>Bonjour tout le monde nous sommes le ");
out.println(new java.util.Date().toString());
out.println(" et tout va bien.");
out.println(" </body></html>");
}
}

16
JSP : exemple 1 (2/3)
 Obtenir le même résultat en utilisant une page JSP

<%@ page language="java" contentType="text/html" %>


<html>
<head>
<title>Bonjour tout le monde</title>
</head>
<body>
<h1>Bonjour tout le monde</h1>
Nous sommes le <%= new java.util.Date().toString() %>
et tout va bien.
</body>
</html>

17
JSP : exemple 1 (3/3)
 Le fichier JSP est traduit, automatiquement par le serveur Web, en
servlet qui hérite de javax.servlet.jsp.HttpJspPage, et qui implémente la
méthode _jspService(…), équivalente à service(…).
public final class bonjourJsp_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 {
HttpSession session = null;
try {
_jspx_out = out;
out.write("<html>\r\n"); out.write("\t<head>\r\n");
out.write("\t\t<title>Bonjour tout le monde </title>\r\n");
out.write("\t</head>\r\n");out.write("\t<body>\r\n");
out.write("\t\t<h1>Bonjour tout le monde</h1>\r\n");
out.write("\t\tNous sommes le ");
out.print( new java.util.Date().toString() );
out.write(" et tout va bien.\r\n"); out.write("\t</body>\r\n");out.write("</html>");
} catch (Throwable t) {
if (!(t instanceof SkipPageException)){
out = _jspx_out;
if (_jspx_page_context != null)
_jspx_page_context.handlePageException(t); }
} finally {
if (_jspxFactory != null)
_jspxFactory.releasePageContext(_jspx_page_context); }
}

18
JSP : exemple 1 avec Eclipse

 Créer une nouvelle application web avec


cette JSP

19
Les Balises JSP

Les Balises JSP permettent de différencier le code


HTML au code Java :
 Balise de directive <%@ … %>
 Éléments de scripts :
– Balise de commentaire :
• <%-- blabla --%>
– Balise de déclaration :
• <%! … %>
– Balise de Scriplet :
• <% …%>
– Balise d’expression :
• <%= … %>

20
Directives JSP

 Les directives contrôlent le comportement du


compilateur de pages JSP ; elles sont donc
évaluées avant la compilation
 Elles sont placées entre les symboles <%@ et %>
 Les directives sont :
– page définit les attributs spécifiques à une page
– include indique au compilateur d’inclure un autre fichier
<%@ include file="unAutreFichier" %>
– taglib indique une bibliothèque de balises à utiliser
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

21
La directive page
 La directive page définit les attributs spécifiques à une
page
– import - importe un paquetage Java. Cette directive correspond
à l’instruction import dans le Servlet
<%@ page import="java.util.*, java.sql.*" %>

– langage - définit le langage de script utilisé dans la page

– errorPage - indique la page à afficher si une exception se produit


pendant l’exécution de la JSP
<%@ page errorPage="toto.jsp" %>

– isErrorPage - vaut true si la page est une erreur et false pour


une page normale
<%@ page isErrorPage=true %>

– ...
22
La directive include

<%@ include file="unAutreFichier" %>

 Cette inclusion se fait au moment de la


conversion de la page

 Tout le contenu du fichier externe est inclus


comme s’il était saisi directement dans la
page JSP

23
JSP : exemple 2

<%@ page language="java" contentType="text/html" %>


<html>
<head><title>exemple2</title></head>
<body>
<jsp:include page= "tete.jsp" flush="true">
<jsp:param name="pageTitre" value="ExempleJsp"/>
<jsp:param name="pageSlogan" value=" " />
</jsp:include>
<%@ include file="/navigation.jsp" %>
<%@ include page="/corps.jsp" %>
<%@ include file="/piedpage.jsp" %>
</body>
</html>

24
Balise des commentaires

 Elément de script utilisé pour faire un commentaire


dans le code JSP entre les symboles <%-- et --%>
 Les commentaires JSP
– n’apparaissent pas dans le code HTML du client
– mais dans le servlet généré automatiquement pendant la
phase de transformation de la jsp

<%@ page language="java" contentType="text/html" %>


<html> <head> <title>Bonjour tout le monde</title> </head>
<body>
<!-- affichage d'un message classique -->
<h1>Bonjour tout le monde</h1>
Nous sommes le <%= new java.util.Date().toString() %> et tout va bien !
<%-- Utilisation de la classe Date --%>
</body>
</html>
25
Balise de déclaration
 Elle permet d’insérer du code dans la classe du Servlet à
extérieur de la méthode _jspService
– elles sont placées entre les symboles <%! et %>

 Utilisée pour :
– déclarer un attribut de classe
– spécifier et implémenter des méthodes

 Les attributs et les méthodes déclarées sont utilisables dans


toute la page
<%!
private int count = 0;
private int incrementCount() {
return count++;
}
%>

26
Balise de scriplet
 Un scriplet est un bloc de code Java qui est placé entre
les symboles <% et %>
– traduit dans la méthode _jspService(…)

 Tout code java a accès aux :


– attributs et méthodes définis par la balise déclaration <%! … %>
– objets implicites

<% for (int i = 0; i < 5 ; i++) { %>


HelloWorld <br>
<%
incrementCount();
}
%>

27
Balise d’expression
 Évaluation d’une expression en renvoyant sa valeur
de type String en utilisant la balise <%= message %>

– correspondant à un scriplet de la forme


< % out.println(message); %>

<% String[] noms={"mickey","donald"};


for (int i = 0 ; i < noms.length ; i++) {
%>
Le <%= i %> ème nom est <%= noms[i] %>

<% } %>

28
Objets implicites
 Les objets implicites sont présents dans la méthode
_jspService(…) du servlet généré
 Ils sont identifiés par des noms de variables
uniques :
– request : requête courante (HttpServletRequest)
– response : réponse courante
(HttpServletReponse)
– session : session courante (HttpSession)
– out : flot de sortie qui permet l’écriture sur la
réponse (idem response.getWriter())
– exception : disponible uniquement dans les pages
d'erreurs donnant des informations sur les erreurs

29
public final class example_jsp extends HttpJspBase {
JSP : exemple 3
String contenu[] = {"Pierre","Lucie","Olivier"};

public void _jspService(HttpServletRequest req, HttpServletResponse res)


throws IOException, ServletException {
out.write("\t<html><head><title>Bonjour</title>\r\n");
out.write("\t</head>\r\n"); out.write("\t<body>\r\n");
for (int i = 0; i <contenu.length; i++) {
out.write("\t\t\tLe ");
out.print( i+1 );
out.write(" ème nom est ");
out.print( contenu[i] );
out.write(" <p>\r\n");
out.write("\t\t");
<%@ page language="java"
} contentType="text/html" %>
<html> out.write("\t\t\r\n");
<head> out.write("\t</body>\r\n");
}
<title>Bonjour </title>
}
</head>
<body>
<%! String contenu[] = {"Pierre","Lucie","Olivier"}; %>
<% for (int i = 0; i <contenu.length; i++) { %>
Le <%= i+1 %> ème nom est <%= contenu[i] %> <p>
<% } %>
</body>
</html>

30
JSP : Cycle de vie

 Le cycle de vie d'une JSP est identique à un


Servlet :

– La méthode jspInit() est appelée après le chargement de


la page

– La méthode _jspService() est appelée à chaque requête

– La méthode jspDestroy() est appelée lors du


déchargement

31
Technique de gestion des erreurs
 Erreurs déclenchées par l'intermédiaire des exceptions et
transmises à une page d'erreur
– Chaque page JSP peut déclarer une seule page d'erreur, qui reçoit des
informations sur l’erreur par la méthode GET
– directive page dans la page où une erreur (exception) peut se produire
<%@ page errorPage="erreur.jsp" %>
– attribut isErrorPage à true dans la page d’erreur
<%@ page isErrorPage=true %>

 L'exception lancée, peut être manipulée par l'objet implicite


exception en utilisant les différentes méthodes :
– exception.getMessage(), exception.printStackTrace(), etc.

 Attention : la référence exception n'est utilisable que dans les


balises de Scriplet et Expression

32
JSP : exemple 5

<%@ page language="java" contentType="text/html" %>


<%@ page errorPage="errorpage.jsp" %>
<html> <head> <title>Page avec une erreur</title> </head>
<body bgcolor="white">
<% int var = 90; %>
Division par <% float var2 = var / 0; %> <%= var2 %>
</body>
</html>
<%@ page language="java" contentType="text/html" %>
<%@ page isErrorPage="true" %>
<html> <head> <title>Page gérant une erreur</title> </head>
<body bgcolor="white">
Une erreur est survenue :
<%= exception.getMessage() %>
</body>
</html>

33
Collaboration de JSP
Client SESSION

Nom JSP B

Servlet A Class 1 —
Oui

Non (request, —
response) —
Envoyer include(request, response)
JSP A

— —
forward(request, response) include(request, response)



Class 2

Servlet B




(HTML)

34
Partage du contrôle

Le partage du contrôle concerne l’utilisation


des tags action JSP include et forward

Balise d’inclusion
 La balise include permet d’inclure, au
moment de la requête, un fichier HTML ou
JSP ou Servlet
<jsp:include page="/NomJSP.jsp" />
<jsp:include page="/NomHTML.html" />
<jsp:include page="/NomServlet" />

35
Partage du contrôle
Balise de redirection

 forward redirige la requête vers une autre ressource


<jsp:forward page=" /NomJSP.jsp" />
– Il est possible de passer un ou plusieurs paramètres
vers la ressource appelée grâce à la balise
<jsp:param>

<jsp:forward page=“/fichier.jsp">
<jsp:param name="attr1" value="val1" />
</jsp:forward>

36
Partage du contrôle
 On peut faire la même chose avec un scriptlet...

<%
RequestDispatcher dispatch = request.getRequestDispatcher("/fichier.jsp");
request.setAttribute("attr1","val1");
dispatch.forward(request,response);
%>

37
Servlet ou JSP ?

 Les pages JSP sont plus faciles à écrire


car elles ressemblent à des documents
structurés et sont manipulables dans des
environnements d’édition Web classiques

 Les servlets sont la plupart du temps


utilisés pour :
– implémenter la logique de l'application
– implémenter des services

38
Exemple Jsp + Servlet avec Eclipse

Dans eclipse :
– Créer un nouveau projet pour créer un formulaire
sur Web
• index.html : formulaire à remplir avec les
informations sur l’utilisateur (nom, prénom, genre,
année de naissance)
• FormServlet.java : pour calculer l’âge
• VisualPers.jsp : pour visualiser un message
personnalisé avec aussi l’âge

39
Exercice 3 : la Bibliothèque
Déployer une application « GestionBiblio » qui permet la
gestion de la BDD « Bibliothèque »
1. Créer une page index.html contenant plusieurs formulaires
permettant de :
• trouver un livre à partir de son titre, tous les livres d’un même auteur

• emprunter/rendre un livre

• ajouter/supprimer un livre de la bibliothèque

2. Créer pour chaque formulaire une servlet et une page JSP pour
l’affichage

40

Vous aimerez peut-être aussi