0% ont trouvé ce document utile (0 vote)
21 vues68 pages

Chap1 Programmation JSP

Transféré par

Wangue
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)
21 vues68 pages

Chap1 Programmation JSP

Transféré par

Wangue
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/ 68

Programmation en

JSP et PHP

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !1


Langage de développement d’une application web
● Script côté client
– le code qui s'exécute dans un navigateur web et détermine les
clients (visiteurs) verront quand ils arrivent sur votre site web.
● Script côté serveur
– Le code qui s'exécute sur un serveur web et qui alimente la
mécanique derrière les coulisses du fonctionnement d'une
application web.
● Technologies des Bases de Données
– Contribuant à rendre une application web dynamique

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !2 2


Plusieurs langages de programmation
● Script côté client
– HTML – Flash
– CSS – JQuery
– JavaScript – Microsoft Silverlight

• Script côté serveur

– ASP.NET – PHP

– C – Python
– Java – Ruby

2/9/16
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !3
Configuration typique d'une application web

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !4


Langage HTML (HyperText Mark-Up Language)

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !5


Langage HTML (HyperText Mark-Up Language)
● Langage de description, de “marquage”
– Composé des balises doubles (ouvrant et fermant) ou simples

– Les balises ne sont pas sensibles à la casse

– Formaliser l'écriture d'un document avec des balises de formatage

– Lecture de documents sur Internet à partir de machines différentes, grâce au


protocole HTTP
● Balises doubles :
– <TITLE>Cours de développement <Web</TITLE>
– <H1 ALIGN=JUSTIFY>Texte justifié</H1>
– <HEAD>...</HEAD>
• Balise simple
– <BR/> ou encore
– <IMG scr= “images/Logo_Uni.png” alt=“Logo Uni Ndere”/>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 6


Langage HTML
<html>
<head>
<title>Durée du cours</title>
<metadata keywords=”cours, université, Ngaounderé”>
</head>
<body>
Saisir un cours, son enseignant et sa durée:
<img src="logo_uni.png" alt="Logo de l'Université de
Ngaoundéré"/>
<h2>Saisir un cours, son enseignant et sa durée: </h2>
<form action="formulaire.php" method=“post">
Cours: <input type=text size=20 name="cours"><br/>
Enseignant:<input type=text size=20 name="enseignant">
<br/>
Durée: <select name="duree">
<option value="2">2 heures</option >
<option value ="3">3 heures</option >
<option value ="4">4 heures</option >
</select >
<input type=submit value="Envoyer">
</form>
</body></html>
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !7
Les formulaires
● Formulaires réelle interface entre l’utilisateur et le web

● Transmission des données sous la forme :

nom1=val1&nom2=val2&…

● Méthodes POST et GET livrent les données au serveur ou script

– GET place les variables et leurs valeurs le dans l’URL

– POST les place dans le corps du protocole http

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !8


Les formulaires
● Le champ INPUT dont l’attribut TYPE prend l’une des valeurs

– TEXT pour les chaînes de caractères

– HIDDEN pour les champs cachés

– CHECKBOX pour un choix multiple

– RADIO pour un choix exclusif

– SUBMIT pour déclencher l’action

– FILE pour transmettre un fichier

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !9


Les formulaires
● Exemples
<input type="radio" name="drink" value="water">Eau<br>
<input type="radio" name="drink" value="beer">Bière<br>
<input type="radio" name="drink" value="wine"
checked>Vin<br>

• Le champ TEXTAREA pour le texte de plusieurs lignes :


<textarea name=’champ’ cols=’30’ rows=’4’>
Entrez votre texte de plusieurs ligne.
Entrez votre texte de plusieurs ligne.
</textarea>

• SELECT pour champs déroulant


<select name=’club’>
<option value =’1’>Coton Sport </option >
< option value =’2’>Canon</option >
< option value =’3’>Tiko United </option >
< option value=’4’>Ngaoundéré Université </option >
</select>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !10 16


Cascading Style Sheet (CSS)
● Feuilles de style en cascade
– Sert à la décrire la présentation des documents HTML et XML

– Séparation des styles de présentation de la structure du document

– Standards définissant CSS sont publiés W3C


● Structure de base
sélecteur { Le sélecteur: baslise HTML: body ; p ; img, etc.,
propriété: valeur; l'identifiant (id) ou la classe (class)
} La propriété: font ; background ; margin ; etc.

● Exemple La valeur: les caractéristiques de la propriété


p{
font-size: 100%;
font-family: Helvetica, sans-serif;
color:#FF0000
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !11


Intégration du CSS dans un document HTML

….. Feuille de style interne


<title>Durée du cours</title>
<style type="text/css">
.myP { font-size: 16pt; font-family: Helvetica, sans-
serif; color:#FF0000 }
</style>
</head>
<body>
<p class=myP>Saisir un cours, son enseignant et sa durée</
p>
….. Feuille de style externe
…...
<title>Durée du cours</title>
<link rel= "stylesheet" href= "style.css"
type="text/css">
</head>
<body>
Saisir un cours, son enseignant et sa durée:
….

<p style="text-align:center; color:red”>


lorem ipsum
</p> Feuille de style inline
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !12
HTML5 et JavaScript
● 5é version de la technologie HMTL

Mais
– ensemble : HTML5, CSS3 et JavaScript
• Des nouveaux types
• search • number • time
• email • Range • datetime
• Url • date • datetime-local
• tel • month • color
• week

Ref : https://developer.mozilla.org/fr/docs/Web/Guide/HTML/HTML5

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !13


Tests et exemples

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !14 20


JavaScript et Utilité
• Rendre le site web réactif aux interactions des utilisateurs avec des
éléments d’un formulaire (input, text area, button, radio button,
checkbox, selection list) and hypertext links
• Distributer des petites collections de données et fournir une interface
confortable
• Contrôler la navigation dans les frames, les plug-ins
• Traiter les données avant de les envoyer au serveur
• Changer dynamiquement le contenu les styles en réponse aux
interactions des utilisateurs

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !15


JavaScript
• JavaScript en interne dans une source HTML

<html>
<head>
<title>Ma page</title>
<script type="text/javascript" charset="utf-8">
function sayHello() {
document.getElementById('foo').innerHTML = 'Hi there!';
}
</script>
</head>
<body>
<h1 id="foo" onclick ="sayHello()">Clique moi!</h1>
</body>
</html>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 16


JavaScript
• JavaScript en externe dans une source HTML

var foods = ['Mangue', 'Banane', 'Orange'];


for (var i=0; i<foods.length; i++) {
if (foods[i] == 'mangue') {
alert(foods[i] + ' mon fruit favori!');
} else {
alert(foods[i] + ' est ok.');
}
}

<html> ...
<script type="text/javascript"
src=“./mesFichiersJS/myfile.js”></
script>
myfile.js <body>
…..
</body>
</html>
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !17
Travaux pratiques individuels

Créer une seule page html contenant tous


types de champ HTML5, un fichier CSS3
pour le design et trois fonctions JavaScript

Guide:

–1ère fonction JS calcule la taxe à retenir sur un prix d’un article entré dans
un champs.

–2e fonction JS affiche la date du jour.


–3e fonction JS vérifie l’existence d’un élément dans un Array des nombres
entiers et renvoie une valeur booléenne true ou false selon le cas.

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 18


Introduction au langage PHP

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !19


PHP Scripts
● langage interprété indépendant de la plate-forme d’exécution
s’exécute sur le serveur
● les instructions sont intégrées au code source du document
HTML
● permet de générer des pages HTML
<html> <head>
</head>
<body>
<H1> Voici l’email de l’administrateur du serveur </H1>
<br>
< ?php
echo $ SERVER[‘SERVER_ADMIN’]
?> </body> </html>
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !20
PHP Scripts
● L’interpréteur du code PHP se trouve au serveur HTTP
● Le serveur lit les instructions PHP intégrés `a la page HTML
(entre < ?php ... ?>), les interprète et les remplace par le
résultat de leur exécution
● La page HTML générée par le serveur est envoyée au client
● Le navigateur au niveau client affiche la page HTML
● Un fichier PHP (.php) peut contenir
● du code HTML
● du code PHP
● du code JavaScript
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 21
Intégrer du PHP dans une page HTML
● La façon la plus simple :
<?php echo ”Salut” ; ?>

● Autre méthode :
<script language=”php”> echo ”Salut” ; </script>

● On peut trouver aussi


<? echo ”Salut” ; ?>

● mais pose un problème de compatibilité avec XML

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 22


Variables en PHP
● Affectation par valeur by value
$foo = "Bob"; $bar = $foo;

● Affectation par référence


$bar = &$foo;

● Des variables préaffectéés, server et env vars


● Exemples, eg. PHP_SELF, HTTP_GET_VARS,

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 23


Operateurs en PHP
● Arithmétique (+, -, *, /, %) et String (.)
● Affectation (=) et affectation combinée
$a = 3;
$a += 5; // sets $a to 8;
$b = "Hello ";
$b .= "There!"; // sets $b to "Hello There!";

● Bit (&, |, ^, ~, <<, >>)


● $a ^ $b (Xor: Bits that are set in $a or $b but
not both are set.)
● ~ $a (Not: Bits that are set in $a are not set,
and vice versa.)
● Comparaison (==, !=, <, >, <=, >=)
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 24
Operateurs en PHP
● Logique
$a and $b True si $a et $b sont vrais.
$a or $b True si $a ou $b est vrai.
$a xor $b True si $a ou $b est vrai, mais pas les
deux
! $a True si $a n’est pas vrai.
$a && $b True si $a et $b sont true.
$a || $b True si $a ou $b est vrai.

● Incrémenter / Décrémenter
++$a (Incrémente d’un et retourne $a)
$a++ (Retourne $a et incrémente $a d’un)
--$a (Décrémente $a d’un et retourne $a)
$a-- (Retourne $a et décrémente $a d’un)

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 25


Structures de contrôle
● Plusieurs possibilités
! if, else, elseif

! while, do-while
! for, foreach

! break, continue, switch


! require, include, require_once, include_once
(pour un inclure un fichier externe)

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 26


Switch et if
● Deux possibilités de faire la même chose

switch ($i) {
case 0:
echo "i equals 0";
break;
if ($i == 0) { case 1:
echo "i equals 0"; echo "i equals 1";
} elseif ($i == 1) { break;
echo "i equals 1"; case 2:
} elseif ($i == 2) { echo "i equals 2";
echo "i equals 2"; break;
} }
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 27
Traverser des Arrays

• Utiliser la boucle foreach pour traverser un champs

$colors = array('red', 'blue', 'green', 'yellow');

foreach ($colors as $color) {


echo “<p>Do you like $color?</p>\n”;
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 28


Fonctions intéressantes
• str_replace()
• trim(), ltrim(), rtrim()
• implode(), explode()
• addslashes(), stripslashes()
• htmlentities(), html_entity_decode(),
htmlspecialchars()
• striptags()

● Créer un champs
$sauce = "sauce1 sauce2 sauce3 sauce4 sauce5 sauce6";
$sauces = explode(" ", $sauce);

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 29


Connexion á une base de données
mysql_connect("localhost", "root", “password");

mysql_select_db(“ingaweb2016”); //sélectionner une BD

Une requête SQL


$result=mysql_query("SELECT * from userdetail WHERE name
LIKE (‘%test’)”);

//vérifier si nous avons obtenu quelque chose


if (mysql_num_rows($result) == 0) {
echo "Aucun résultat!";
exit;
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 30


Connexion á une base de données
while($row=mysql_fetch_assoc($result)) {
echo $row[‘…’];
echo $row[‘…’];
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 31


- Exemple de la fonction d'autocomplete -

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 32


Travaux pratiques individuels

Créer son propre profile avec ses


amis et préférences

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 33


eXtensible Markup Language (XML)
● Composants et syntaxe d'un document XML bien formé

– Déclaration de version du langage


– Toute balise ouverte doit être fermée

– Les enchâssements forment un arbre strict


– Les chevauchements sont interdits

– Les valeurs d'attribut sont entre guillemets


– Un document XML n’a qu’un seul élément racine.
● Document type Definition (DTD) valide le document XML
● Schéma XML pour valider le document XML

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 34


XML, son utilité
● Description des données
● Echange des données
● Echange de ressources entres deux systèmes hétérogènes
● Exemples d'usage
– LibreOffice, OpenOffice.org, Microsoft Word

– SQL, la plupart des SGBD proposent un export XML

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !35


XML, un exemple
● Entité livre et ses attributs

<?xml version="1.0" encoding="ISO-8859-1"?>


<livre>
<titre>Ingénierie des applications web</titre>
<auteur>Souley</auteur>
<auteur>Boulmo Richard</auteur>
<edition>Rabiatou</edition>
<chapitre titre="Introduction">
<texte>Texte pour le chapitre d'introduction
</texte>
<image file="logo_uni.png"/>
</chapitre>
<chapitre titre="References" type="bibliographie">
<texte>Texte pour le chapitre références
</texte>
</chapitre>
</livre>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !36


Document Type Definition (DTD)
• Validation de document XML decrivant l'entité livre

• Définition de Type de Document: Document Type Definiton (DTD)

– Décrire un document SGML ou XML

– Grammaire de classe de documents

– Décription de la position des termes les uns par rapport aux autres:
grammaire

– Généralisation d'un domaine particulier: classe

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !37


Document Type Definition (DTD)
• Un DTD pour valider le document XML décrivant livre

<!DOCTYPE livre
[
<!ELEMENT livre (titre, auteur+, edition?, chapitre+)>
<!ELEMENT titre (#PCDATA)>
<!ELEMENT auteur (#PCDATA)>
<!ELEMENT edition (#PCDATA)>
<!ELEMENT chapitre (texte+, image)>
<!ELEMENT texte (#PCDATA)>
<!ELEMENT image EMPTY>
]>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !38


Java, Java SE, Java EE

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 39


Java, Java SE, Java EE
●Java fait référence à Java Standard Edition (Java SE)
– Plate-forme standard.
– Diverses bibliothèques telles
• java.lang,
• java.io,
• java.math,
• java.util, etc.

• Java EE (Java Entreprise Edition)


– Extension de la plate-forme standard.

– Ajout des nombreuses bibliothèques pour le développement d'applications web


robustes et distribuées, déployées et exécutées sur un serveur d'applications

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 40


Servlet pour créer les pages Web en Java

• Technologie servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ServletExemple extends HttpServlet {

public void init() {


}
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {

res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD><TITLE> Titre </TITLE></HEAD>");
out.println("<BODY>");
out.println("Ma première servlet");
out.println("</BODY>");
out.println("</HTML>");
out.close();
}
}

Très pénible, trop difficile


2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 41
Servlet pour créer les pages Web en Java

● Servlet : Code Java contenant des morceaux de code HTML pour l'affichage

● public void init() {}


– Invoquée par conteneur de servlet

● public void doGet(HttpServletRequest req, HttpServletResponse res)


– Surcharge de la méthode service() de HttpServlet
– service() appelée à chaque requête

– HttpServletRequest rep objet requête provenant du client


– HttpServletResponse res objet réponse provenant du serveur

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 42


Simplification de Servlet en Java Server Pages (JSP)
● Caractéristiques
– langage dédié et simplifié avec accès aux objets Java

– Des mécanismes permettant l'extension du langage

– API de servlet abstraction de haut niveau

● Fonctionnalités des JSP


– Créer des sites ou page Web dynamiques

– Travailler avec les bases de données

– Améliorer la sécurité (code exécuté côte serveur)

– Réutiliser des composentes (javaBeans)

– Utiliser les balises personnalisées

– Faciliter la portabilité

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 43


Séparation de travail et compilation des JSP

Graphiste:
partie présentation des données
(code html)

Développeur:
partie logique, c.a.d le traitement et
l'accès aux données (code java)

● Compilateur (Server d'application) transformes les pages JSP en Servlet

JSP Servlets
html
code html + code java code java + code html

● Servlet est compilée et chargée en mémoire pour répondre aux requêtes

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 44


Cycle de vie d'une Servlet
● Cycle d'une page JSP
– Chargement et instanciation de classe
– Initialisation
– Traitement des requêtes clients
– Destruction des instances de classe Considérer le répertoire /
work de Tomcat

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 45


Java Server Pages (JSP)
●Un Scriptlet est utilisé pour placer du code dans la méthode
_jspService() de la Servlet.

• HTML statiques et dynamiques


● Fonctionnalités des JSP

– Créer des sites ou page Web dynamiques


– Travailler avec les bases de données

– Améliorer la sécurité (code exécuté côte serveur)


– Réutiliser des composentes (javaBeans)

– Utiliser les balises personnalisées


– Faciliter la portabilité

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 46


Modèle-Vue-Contrôleur (MVC)
● Patron de conception logicielle "Modèle-Vue-Contrôleur"
●(Model-View-Controller) a été créé en 1980 par A. Goldberg à Xerox
PARC pour le langage Smalltalk-80
● Modèle (modèle de données),
● Vue (présentation, interface utilisateur)
●Contrôleur (logique de contrôle, gestion des événements,
synchronisation)

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 47


JSP en Modèle-Vue-Contrôleur
● Model-View-Controller, MCV : Patron modèle-vue-contrôleur
– Modèle : des traitements et des données par les objets java et les
méthodes correspondantes

– Vue : Pages JSP constituées de HTML, JavaScript, CSS, XML, …

– Contrôleur : Servlet intercepte les requêtes des client, appelle les


traitements effectués par le modèle et ordonne l'affichage des données

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré 48


Les balises en JSP
● Balise de commentaires <%-- commentaires --%>
● Balise de Déclaration des variables et méthodes <%! %>

<%! String test = "Bonjour Ngaoundéré.";


public boolean prendreTrain() {
return true;
}
%>

• Balise de Scriptlet mélange de « script" et "servlet” <% %>


<form action="/fruit" method="post">
<%
for(int i = 1; i < 3; i++){
out.println("Nom " + i + ": <select name=\"number"+i+"\">");
for(int j = 1; j <= 10; j++){
out.println("<option value=\""+j+"\">"+ j + "</option>");
}
out.println("</select><br />");
}
%>
<br />
<input type="submit" value="Choisir" />
</form>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !49


Les balises en JSP
● Balise d'expression <%-- commentaires --%>
– Première variante
<% out.println("Dimanche jour du marché de Dang!"); %>

– Deuxième variante

<%= "Dimanche jour du marché de Dang!" %>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !50


Les directives en JSP
● Les directives permettent :
– d'importer un package;
– d'inclure d'autres pages JSP;
– d'inclure des bibliothèques de balises.

● Directive taglib
<%@ taglib uri="maTagLib.tld" prefix="tagExemple" %>

● Directive Page
<%@ page import="java.util.List, java.util.Date" %>

● Directive include
<%@ include file="uneAutreJSP.jsp" %>

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !51


La portée des objets
● page : objets accessibles que sur une page JSP.

● requête : objets accessibles durant le cheminement d'une requête dans


l'application.

●session : objets accessibles durant l'intégralité de la visite d'un client donné,


conformément à la durée définie.

●application : objets accessibles durant toute l'existence de l'application et par


tous les clients.

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !52


La porté des objets

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !53


Expression Language (EL)
● Épurer la syntaxe JSP
● Utilisation des expressions pour faire des test et manipuler des objets et

attributs
${ expression }

● Tests
– opérateurs arithmétiques : +, -, *, /, % ; et opérateurs logiques: &&, ||, ! ;
opérateurs relationnels : == ou eq, != ou ne, < ou lt, > ou gt, <= ou le, >= ou ge.

<!-- Logiques sur des booléens -->


${ true && true }
${ !true || false }

<!-- Calculs arithmétiques -->


${ 10 / 4 }
${ 10 mod 4 }
${ 10 % 4 }
${ 6 * 7 }
${ 63 - 8 }

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !54


Expression Language (EL) avec les Collections
●Une liste de fruits

<%
/* Création d'une liste de fruits et insertion de quatre fruits */
java.util.List<String> fruits = new java.util.ArrayList<String>();
fruits.add( "mangue" );
fruits.add( "avocat" );
fruits.add( "orange");
fruits.add( "ananas" );
request.setAttribute( "fruits" , fruits );
%>

<!-- Les quatre syntaxes suivantes: Le même résulat !>


${ fruits.get(1) }<br />
${ fruits[1] } <br />
${ fruits['1'] }<br />
${ fruits["1"] }<br />

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !55


Tests
EL_example.jsp, EL_fruit.jsp

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !56


JSP - Standard Tag Library (JSTL)
● JSTL
– bibliothèque, collection regroupant des balises implémentant des fonctionnalités
à des fins générales, communes aux applications web
– Par exemple :
• boucles
• tests conditionnels
• formatage des données
• manipulation de données XML

● Avantages
– Lisibilité du code produit
– Moins de code à écrire

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !57


JSP - Standard Tag Library (JSTL)
● Code avec une scriptlet Java
<%@ page import="java.util.List, java.util.ArrayList" %>
<%
List<Integer> list =
(ArrayList<Integer>)request.getAttribute("nombre");
for(int i = 0; i < list.size();i++){
out.println(list.get(i));
}
%>

● Code avec des tags JSTL basé sur un document XML


<c:forEach var="item" items="${nombre}" >
<c:out value="${item}" />
</c:forEach>

– Utilser balise directive taglib pour Inclure la bibliothèque (la JSTL)

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

– Inclure la bibliothèque jstl-1.2.jar dans la /WEB-INF/lib du projet (Eclipse)

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !58


Tests

JSTL_test.jsp, JSTL_villes.jsp,
processVilles.jsp

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !59


Connexion avec une base de données
● Serveur de base de données (MySQL)
● Une base de données, utilisateur, mot de passe

Application Java
{ ...
"SELECT ... FROM ... WHERE"
... }

SGBB

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !60


Processus d'utilisation d'une BD (MySQL) avec JSP
1. Connexion à MySQL

2. Sélection de la BD pour être utilisée


3. Création une chaîne de requête

4. Exécution la requête
5. Recherche des résultats et leur affichage

6. Répétition de l'étape 3 à 5 jusqu'à ce que toutes données désirées soient


trouvées.

7. Déconnexion de MySQL

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !61


Connexion avec une base de données

String driverName = "com.mysql.jdbc.Driver";


String url = "jdbc:mysql://localhost:3306/ingaweb2014";
String user = "root";
String dbpsw = "";

● Connection : La connexion
● PreparedStatement : Interface, instructions SQL pré-compilée

● ResultSet : Resultats des requêtes

Connection con = null;


PreparedStatement ps = null;
ResultSet rs = null;

Etablir une connexion


con = DriverManager.getConnection(url, user, dbpsw);

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !62


Exécution des requêtes
● executeQuery() : méthode dédiée à la lecture de données via une requête
de type SELECT ;

/* Une requête de lecture */


ResultSet resultat = statement.executeQuery("SELECT id, email,
mot_de_passe, nom FROM Utilisateur;" );

● Récupérer les données du résultat de la requête de lecture


while ( resultat.next() ) {
int idUtilisateur = resultat.getInt( "id" );
String emailUtilisateur = resultat.getString( "email" );
String motDePasseUtilisateur =
resultat.getString( "mot_de_passe" );
String nomUtilisateur = resultat.getString( "nom" );
/* Traiter ici les valeurs récupérées. */
}
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !63
Exécution des requêtes
● executeUpdate() : méthode réservée à l'exécution de requêtes modifiant
l'état de la base de données (écriture ou suppression)
– INSERT
– UPDATE
– DELETE, etc.

int statut = statement.executeUpdate( "INSERT INTO Utilisateur


(email, mot_de_passe, nom, date_inscription) VALUES ('[email protected]',
MD5('lavieestbelle78'), 'jean-marc', NOW());" );

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !64


JDBC : Libération des ressources
● Fermer la connexion
● Disposer les objets Statement ou prepareStatement, ResultSet

Connection connexion = null;


Statement statement = null;
ResultSet resultat = null;
try {
/*
* Ouverture de la connexion, initialisation d'un Statement,
initialisation d'un ResultSet, etc.
*/
} catch ( SQLException e ) {
/* Traiter les erreurs éventuelles ici. */
} finally {
if ( resultat != null ) {
try {
/* On commence par fermer le ResultSet */
resultat.close();
} catch ( SQLException ignore ) {
}
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !65


Libération des ressources


if ( statement != null ) {
try {
/* Puis on ferme le Statement */
statement.close();
} catch ( SQLException ignore ) {
}
}
if ( connexion != null ) {
try {
/* Et enfin on ferme la connexion */
connexion.close();
} catch ( SQLException ignore ) {
}
}
}

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !66


JDBC : Diagramme de connexion et type de données

loadDriver

getConnection

createStatement

execute(SQL) Accès aux types de données


Result handling Column type acces to type with java

yes

More Text, Char ,… getString("columnName")


results ?

no Int, Long,…. getInt("columnName“)


closeStatment

closeConnection date getDate("columnName");

2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !67


Récupération des paramètres HTTP et de session
● Récupération les données issues d'un formulaire ou d'URL
<input type="text" name="name" />
code html du formulaire

request.getParameter("name"); code jsp

● Stocker les données dans la session

session.setAttribute("name", username);
session.setAttribute("uservalidation", uservalidation);

● Récupérer les données

<p>Bienvenu, <%=session.getAttribute("name")%></p>

Servlets
2018/2019 Dr.-Ing. P. Dayang, Math & Info, Université de Ngaoundéré !68

Vous aimerez peut-être aussi