Dans ce TP, nous allons traiter un formulaire un peu plus sophistiqué et voir comment utiliser un servlet pour renvoyer du contenu binaire comme une image plutôt qu’une page web.
register.html
reproduisant
le formulaire ci-dessous (modulo la mise en page CSS) :
<label>
,
le choix du sexe à des <input>
de type radio, le choix
de l’inscription à des <input>
de type checkbox et le choix
de la ville à un élément <select>
.
Ce formulaire devra renvoyer ses données en POST vers l’URL relative
add_customer
.addCustomer
répondant à l’URL
add_customer
. Ce servlet devra renvoyer une page résumant
les données entrées et ressemblant à ceci :
getParameterValues()
plutôt que getParameter()
.
statistics.html
avec le contenu suivant
et créez un lien vers cette page depuis la page d’accueil :
<h1>Statistiques sur les villes de résidence</h1>
Répartition des villes de résidence des adhérents de la bibliothèque :
<img src="stat_img?GRE=3&SMH=4&GIE=1&OTH=2"
alt="Grenoble : 3, Saint-Martin d’Hères : 4, Gières : 1, Autres : 2"/>
<p>Retour vers <a href="index.html">l’accueil</a></p>
Le but de cette page est d’afficher les données dans un camembert comme ceci :
<img>
, qui renvoie sur l’URL
stat_img
en précisant certaines valeurs de paramètres.
Tant que cette URL ne répond pas, vous pouvez constater que le navigateur affiche
le texte alternatif (attribut alt
).
StatImg
qui répondra à l’URL
stat_img
.
Comme ce servlet devra générer une image et non du texte, on utilisera :
response.setContentType("image/png");
De plus, le flux de sortie
ne devra pas être récupéré avec response.getWriter()
mais avec response.getOutputStream()
.
pom.xml
:
<dependency>
<groupId>org.jfree</groupId>
<artifactId>jfreechart</artifactId>
<version>1.0.19</version>
<type>jar</type>
</dependency>
puis téléchargez-la (« Download declared dependencies »).
import org.jfree.chart.*;
import org.jfree.data.general.DefaultPieDataset;
[...]
DefaultPieDataset dataset = new DefaultPieDataset();
String title = "le titre";
dataset.setValue("douze", 12);
dataset.setValue("huit", 8);
JFreeChart chart = ChartFactory.createPieChart(title, dataset);
/* Envoi de la réponse */
response.setContentType("image/png");
try (OutputStream out = response.getOutputStream()) {
ChartUtilities.writeChartAsPNG(out, chart, 500, 300);
}