Pages JSP

Transcription

Pages JSP
Licence professionnelle
« Management des organisations »
Option « Systèmes d’information et Réseaux »
Internet et applications dans l’entreprise (3)
Serveur Tomcat et pages JSP
O. Auzende
2010-2011
Servlets java et Java Server Pages........................................................................................................................... 3
Tests de servlets et de pages JSP ......................................................................................................................... 3
Utilisation de variables ........................................................................................................................................ 3
Insertion de fichier .............................................................................................................................................. 4
Elément spécifique à la programmation JSP ....................................................................................................... 4
L’objet request ................................................................................................................................................ 4
Connexion aux bases de données ........................................................................................................................ 5
Principe ........................................................................................................................................................... 5
Exemple : connexion à une base de données mySQL ..................................................................................... 5
Exercices ......................................................................................................................................................... 7
2
Internet et applications dans l’entreprise
O. Auzende
Servlets java et Java Server Pages
Un servlet est un petit morceau de code Java qui étend les fonctionnalités d'un serveur Web.
Sun a développé un serveur entièrement en Java, le Java Web Server, qui fonctionne à base de servlets et est
disponible pour les plates-formes Windows et Solaris. Par ailleurs, Tomcat (issu du projet open source jakarta)
implémente, sous différents systèmes d’exploitation, un serveur HTTP simple comportant un moteur de servlets.
Tomcat est souvent couplé avec Apache.
Les Java Server Pages d’extension .JSP sont construites par-dessus les servlets : le moteur Java transforme les
fichiers .JSP en servlets (étape de traduction) puis exécute le servlet résultant qui génère la page HTML (étape de
requête).
Tests de servlets et de pages JSP
Le serveur Tomcat, issu du projet jakarta-tomcat et libre de droits, est téléchargeable sur Internet. Il nécessite
un JDK et peut être utilisé seul ou être couplé à Apache, sous Window ou sous Unix.
L’icône TOMCAT5 figure sur le bureau. Effectuer un double-clic sur l’icône ouvre une fenêtre de dialogue. Un
clic sur le bouton Start lance le serveur.
Le dossier pages de la disquette doit être recopié dans le dossier C:\Program Files\Apache Software
Foundation\Tomcat5.5\webapps, à côté de ROOT (alors que c’est gnéralement dans ROOT). L’appel des
pages via le serveur se fait par http://localhost:8080/pages/ Attention : PORT 8080
L’arrêt de Tomcat se fait en appyant sur le bouton Stop.
Utilisation de variables
La page date.jsp fait appel au constructeur et aux méthodes de la classe Date de java.util :
Page date.jsp
<HTML>
<HEAD>
<TITLE>Utilisation de variables</TITLE>
</HEAD>
<BODY>
<%! java.util.Date maintenant = new java.util.Date(); %>
<P>Date du jour : nous sommes aujourd'hui le <%= maintenant.getDate() %>/
<%= maintenant.getMonth() +1 %>/<%= maintenant.getYear() +1900 %></P>
</BODY>
</HTML>
3
La page compteur.jsp définit une variable globale de type int, incrémentée et testée :
Page compteur.jsp
<%! int count =0; %>
<HTML>
<HEAD><TITLE>Un compteur</TITLE></HEAD>
<BODY>
<% count = count + 1; %>
<P>Cette page a été visitée <%= count %> fois.</P>
<%
if (count == 1) {
out.print("<p>Vous &ecirc;tes le premier visiteur !</p>");
}
%>
</BODY>
</HTML>
Insertion de fichier
Page fonctions.jsp
<%!
int somme(int[] tab) {
int s = 0 ;
for (int z = 0; z < tab.length ; z++)
s += tab[z] ;
return s ;
}
%>
Page sommetab.jsp
<HTML>
<HEAD><TITLE>Exemple d'inclusion</TITLE></HEAD>
<BODY>
<%@include file="fonctions.jsp"%>
<%java.util.Random r = new java.util.Random();%>
<p>Voici un tableau de 20 entiers rempli par des
nombres tir&eacute;s au sort entre 0 et 100 :
</p>
<%int t[] = new int[20] ;%>
<%for (int i = 0 ; i < 20 ; i++) {
t[i] = r.nextInt(100);
}
%>
<%for (int i = 0 ; i < 20 ; i++) {%>
<%=t[i]%> &nbsp;*&nbsp;
<%}%>
<p>On calcule sa somme en utilisant la fonction
d&eacute;finie dans le fichier inclus. </p>
<p>La somme vaut : <%=somme(t)%> </p>
</BODY>
<%!
int carre(int n) {
return n*n ;
}
%>
<%!
int cube(int n) {
return n*n*n ;
}
%>
</HTML>
Exercice
En réalisant la même inclusion que ci-dessus, écrire la page carretab.jsp qui réalise
l’affichage ci-contre.
Elément spécifique à la programmation JSP
L’objet request
L'objet request permet de récupérer les valeurs des champs des formulaires.
La syntaxe est : request.getParameter("nom de la variable"), que la méthode soit
GET ou POST.
La page formulaire.jsp propose un formulaire faisant appel à la page requete.jsp
pour générer la réponse.
4
Internet et applications dans l’entreprise
O. Auzende
Page formulaire.jsp
<html>
<head><title>Un formulaire</title></head>
<body>
<form method="get" action="requete.jsp">
<p>Exemple de formulaire</p>
<table>
<tr><td>Nom :</td><td><input type="text" name="nom"></td>
</tr><tr><td>Pr&eacute;nom :</td>
<td><input type="text" name="prenom"></td>
</tr><tr><td>Ordinateur : </td>
<td>
<input type="radio" name="supp" value="mac" checked>Mac
<input type="radio" name="supp" value="pc"> PC
</td>
</tr><tr>
<td>Syst&egrave;me d'exploitation : </td>
<td><select name="sys">
<option value="win">Windows
<option value="linux">Linux
<option value="macos">Mac-OS
</select></td></tr>
</table>
<p><input type="submit" value="Confirmer"></p>
</form>
</body>
</html>
Page requete.jsp
<html>
<body>
<p>Vous avez repondu : </p>
<table>
<tr><td>Nom : </td><td> <%=request.getParameter("nom")%></td></tr>
<tr><td>Pr&eacute;nom : </td>
<td> <%=request.getParameter("prenom")%> </td></tr>
<tr><td>Ordinateur : </td>
<td> <%=request.getParameter("supp")%> </td></tr>
<tr><td>Syst&egrave;me d'exploitation : </td>
<td> <%=request.getParameter("sys")%> </td></tr>
</table>
</body>
</html>
Connexion aux bases de données
Principe
Quatre classes java permettent de réaliser la connexion aux bases de données et de réaliser des requêtes :
o DriverManager permet de créer les connexions (objets de la classe Connection).
o Connection permet de créer un canal de communication vers une BD dont l’URL est connue. Un objet de
type Connection a pour attributs username et password, crée les Statements (requêtes SQL) et gère les
transactions.
o Statement permet de gérer les requêtes SQL simples, avec les méthodes executeQuery admettant une chaîne
SQL en paramètre et retournant un objet ResultSet, et executeUpdate() permettant la mise à jour et
renvoyant le nombre de rangées modifiées.
o Enfin, un objet de type ResultSet contient une rangée de données extraite de la base par une requête SQL.
La méthode next() permet d’accéder à la rangée suivante.
Exemple : connexion à une base de données mySQL
Lancer easyPHP sous Windows. Copier le fichier produits.dump fourni dans C:\program files\easyPHP18\mysql\bin.
Dans une fenêtre d’invite de commandes, se placer dans le dossier C:\program files\easyPHP1-8\mysql\bin
Y créer et remplir la base de données produits :
Création de la base :
mysqladmin –u root create produits
Remplissage de la base :
mysql –u root produits < produits.dump
5
Pour pouvoir interroger la base via une page JSP, il faut l’enregistrer comme sources de données ODBC :
Démarrer  Paramètres  Panneau de configuration  Outils d’administration  Sources de données
ODBC. A noter : il faut déclarer la base de données mySQL en Sources de données Système :
- Ajouter une nouvelle source de données
- choisir le driver MySQL ODBC 3.51 Driver et valider
Dans la nouvelle fenêtre (voir ci-contre), préciser :
- Data Source Name : produits
- Description : ne pas remplir
- Server : localhost
- User : root
- Password : aucun
- Database : produits
Pour l’exécution des pages interrogeant la base par http://localhost:8080/pages/….jsp, il faut que les deux
serveurs (easyPHP et Tomcat) soient actifs.
Fichier lectureproduits.jsp
<% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); %>
<% java.sql.Connection con =
java.sql.DriverManager.getConnection("jdbc:odbc:produits","","");%>
<% java.sql.Statement statement = con.createStatement(); %>
<% java.sql.ResultSet rs; %>
<HTML>
<HEAD>
<TITLE>Requete</TITLE>
</HEAD>
<BODY>
<H3>Lecture de la base de donn&eacute;es mySQL produits par une page JSP</h3>
<p><b>Lecture de la table Fournisseurs</b></p>
<table border=1>
<tr><td><b>Num&eacute;ro</b></td><td><b>Nom</b></td>
<td><b>Adresse</b></td></tr>
<% rs = statement.executeQuery("SELECT * FROM fournisseurs"); %>
<% while (rs.next()) { %>
<tr>
<td><%= rs.getString("num") %></td>
<td><%= rs.getString("nom") %></td>
<td><%= rs.getString("adresse") %></td>
</tr>
<% } %>
</table>
<p><b>Lecture de la table Produits</b></p>
<table border=1>
<tr><td><b>Num&eacute;ro</b></td><td><b>D&eacute;signation</b></td>
<td><b>Fournisseur</b></td></tr>
<% rs = statement.executeQuery("SELECT * FROM produits"); %>
<% while (rs.next()) { %>
<tr>
<td><%= rs.getString("num") %></td>
<td><%= rs.getString("nom") %></td>
<td><%= rs.getString("fournisseur") %></td>
</tr>
<% } %>
</table>
<p><b>Lecture de la table Prix</b></p>
<table border=1>
<tr><td><b>Num&eacute;ro du produit</b></td><td><b>Prix</b></td></tr>
<% rs = statement.executeQuery("SELECT * FROM prix"); %>
<% while (rs.next()) { %>
<tr>
<td><%= rs.getString("numproduit") %></td>
<td><%= rs.getString("prix") %></td>
</tr>
<% } %>
</table>
</BODY>
</HTML>
<% rs.close(); %>
<% statement.close(); %>
<% con.close(); %>
6
Internet et applications dans l’entreprise
O. Auzende
Exercices
1) Lecture de la basqe
Ecrire la page lectureproduits1.jsp faisant afficher, dans une table, les désignations des différents produits et
leurs prix. On utilisera les tables produits et prix de la base de données produits. Résultat attendu :
2) Insertion dans la base
Faire exécuter la page nouveauproduit.jsp suivante qui appelle la page insertproduit.jsp insérant effectivement
le nouveau produit à la fois dans les tables produits et prix.
Page nouveauproduit.jsp
<% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); %>
<% java.sql.Connection con =
java.sql.DriverManager.getConnection("jdbc:odbc:produits","","");%>
<% java.sql.Statement statement = con.createStatement(); %>
<% java.sql.ResultSet rs; %>
<HTML>
<HEAD><TITLE>Requete</TITLE></HEAD>
<BODY>
<H3>Demande d'insertion d'un nouveau produit</h3>
<form method="get" action="insertproduit.jsp">
<p>D&eacute;signation : <input type="text" name="designation" size="30"></p>
<p>Fournisseur : <select name="fourn">
<% rs = statement.executeQuery("SELECT * FROM fournisseurs"); %>
<% while (rs.next()) {
out.print ("<option value='"+ rs.getString("num")+"'>"+rs.getString("nom")+"</option>") ;
} %>
</select></p>
<p>Prix : <input type="text" name="px" size="6"></p>
<input type="submit" value="OK">
</form>
</BODY>
</HTML>
<% rs.close(); %>
<% statement.close(); %>
<% con.close(); %>
Page insertproduit.jsp
<% Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); %>
<% java.sql.Connection con=java.sql.DriverManager.getConnection("jdbc:odbc:produits","","");%>
<% java.sql.Statement statement=con.createStatement(); %>
<HTML>
<HEAD><TITLE>Requete</TITLE></HEAD>
<BODY>
<h2>Insertion d'un produit</h2>
<%String prod=request.getParameter("designation"); %>
<%int numf=new Integer(request.getParameter("fourn")).intValue() ; %>
<%int prix=new Integer(request.getParameter("px")).intValue() ; %>
7
<%String sql = "INSERT into produits(nom, fournisseur) VALUES('"+prod+"','"+numf+"')" ;
<% statement.executeUpdate(sql); %>
<p>Le produit est inséré dans la table produits.</p>
<%sql = "INSERT into prix(prix) VALUES('"+prix+"')" ;
<% statement.executeUpdate(sql); %>
<p>Le prix est inséré dans la table prix.</p>
%>
%>
</BODY>
</HTML>
<% statement.close(); %>
<% con.close(); %>
3) Suppression d'enregistrement de la base
Ecrire une page suppressionproduit.jsp qui affiche en liste de sélection les désignations des produits existants et
permet de demander la suppression d’un produit.
Ecrire la page supprimeproduit.jsp qui supprime le produit à la fois de la table produits et de la table prix.
8