statistics.html
en statistics.jsp
.
Félicitations, vous venez de créer votre première page JSP !<%@ page contentType="text/html; charset=UTF-8" %>
Attention : il vaut mieux faire cette
modification avec un éditeur de texte lambda car Netbeans veut
être trop malin et modifie automatiquement le contenu de la page
quand on ajoute la directive.
index.html
pour pointer sur le nouveau nom de la page statistiques.work
). Le
code du servlet peut également être vu directement depuis
netbeans depuis l’item view servlet du menu contextuel (clic
droit) sur le fichier statistics.jsp
de l’onglet
projet. Attention : cette entrée n’est disponible que si le projet a
été exécuté au moins une fois afin que le servlet soit généré.
<%!...%>
, ajoutez au servlet
généré par la page deux méthodes, donneesFormulaire
et
descriptionTextuelle
, prenant 4 entiers en paramètres et construisant
respectivement la chaîne "GRE=3&SMH=4&GIE=1&OTH=2"
et la chaîne
"Grenoble : 3, Saint-Martin d’Hères : 4, Gières : 1, Autres : 2"
(en remplaçant les valeurs par les paramètres).
<%...%>
, ajoutez 4 variables locales
représentant des entiers, gre, smh, gie, oth
, et donnez-leur des valeurs
arbitraires pour le moment.
<img>
en appelant les méthodes
que vous avez définies avec ces variables locales. On utilisera les balises <%=...%>
.
On souhaite maintenant interroger la base de données pour récupérer le nombre réel d’habitants résidant dans chaque ville. Pour cela, récupérez et adaptez le cas échéant le fichier VillesDAO.java (DAO = Database Access Object).
L’accès aux ressources tomcat est possible depuis les servlets mais pas depuis les autres classes, c’est pourquoi
VillesDAO ne contient pas l’annotation @Resource
. Ajoutez à votre JSP un attribut privé contenant
la ressource JDBC correspondant au pool de connexions à la base de données. Vous devrez ajouter les directives
import
appropriées (mais netbeans peut aussi les ajouter automatiquement) :
<%@ page import="javax.sql.DataSource" %>
<%@ page import="javax.annotation.Resource" %>
Il ne vous reste plus qu’à créer une instance de VillesDAO
et à l’utiliser
pour initialiser les variables gre, smh, gie, oth
.
Vous avez peut-être pu constater que toute exception non rattrapée déclenche une erreur 500. Ceci est pratique pour débugguer mais pas très présentable pour un utilisateur final.
throw new Error("Erreur inévitable");
erreur.jsp
. Cette page est identifiée comme page d’erreur grâce à la directive en tête de page :
<%@page isErrorPage="true" %>
Les informations sur l’erreur qui s’est produite sont accessibles
à cette page via pageContext.getErrorData()
, un objet de classe
ErrorData.
Pour afficher le message, on pourra donc écrire :
<%= pageContext.getErrorData().getThrowable().getMessage() %>
Ou en utilisant l’expression language : ${pageContext.errorData.throwable.message}
La page statistics.jsp
doit également désigner la page
erreur.jsp
comme la page à invoquer en présence
d’une exception. Ceci est réalisé en ajoutant en tête de
statistics.jsp
:
<%@ page errorPage="erreur.jsp" %>
Remarque : le détail des informations sur l’erreur (stacktrace etc.) sera dans tous les cas indiqué dans le log de tomcat. Généralement le but de la page d’erreur n’est pas de donner des détails techniques mais d’avoir quelque chose de présentable pour l’utilisateur final.
La page d’erreur que nous avons créée ne devrait être appelée qu’en cas d’erreur.
Cependant actuellement il est possible pour l’utilisateur de se rendre sur l’URL relative
erreur.jsp
et d’accéder directement à cette page interne. Vérifiez-le.
Pour éviter cela, on peut utiliser le dossier standard WEB-INF
dont le contenu
n’est jamais accessible par URL. Créez ce dossier s’il n’existe pas (il doit se trouver
dans src/main/webapp
au même niveau que META-INF
) et déplacez-y
le fichier erreur.jsp
. N’oubliez pas de modifier statistics.jsp
pour indiquer maintenant errorPage="WEB-INF/erreur.jsp"
. Nettoyez, recompilez,
redéployez et constatez que la page est toujours appelée en cas d’erreur mais n’est plus
accessible directement.