javaEE 2
javaEE 2
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)
3
Cookies (2/2)
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
– 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
5
Session : exemple
public class HttpSessionServlet extends HttpServlet {
if (count == null)
count = new Integer(1);
else
count = new Integer(count.intValue() + 1);
session.setAttribute("Count", count);
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
}
}
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
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.*;
16
JSP : exemple 1 (2/3)
Obtenir le même résultat en utilisant une page JSP
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
19
Les Balises JSP
20
Directives JSP
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.*" %>
– ...
22
La directive include
23
JSP : exemple 2
24
Balise des commentaires
Utilisée pour :
– déclarer un attribut de classe
– spécifier et implémenter des méthodes
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(…)
27
Balise d’expression
Évaluation d’une expression en renvoyant sa valeur
de type String en utilisant la balise <%= message %>
<% } %>
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"};
30
JSP : Cycle de vie
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 %>
32
JSP : exemple 5
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
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
<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 ?
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
2. Créer pour chaque formulaire une servlet et une page JSP pour
l’affichage
40