Les servlets Java
Premières servlets
Exercice 1:
Faites les exercices contenus dans le cours : diapositives 17 à 19
Exercice 2:
Dans cet exercice, nous allons créer une servlet qui affiche, dans la page réponse, les méta-informations contenues dans la requête sous forme d'un tableau, comme dans l'exemple qui suit:
Header | Value |
---|---|
host | localhost:8080 |
user-agent | Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:43.0) Gecko/20100101 Firefox/43.0 |
accept | text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 |
accept-language | en-US,en;q=0.5 |
accept-encoding | gzip, deflate |
dnt | 1 |
connection | keep-alive |
javax.servlet.http.HttpServletRequest |
Une solution possible :
Exercice 3:
Créez une servlet qui affiche la valeur de 3 paramètres (nom, prénom et email par exemple) contenus dans l'url de la requête ou bien "inconnu" si ils n'ont pas de valeur (e.g http://url?nom='test'). On affichera ensuite aussi à la suite, grâce à une méthode héritée, tous les paramètres entrés et leur valeur respective afin de vérifier le contenu de l'url.
javax.servlet.http.HttpServletRequest javax.servlet.ServletRequest |
Une solution possible :
Exercice 4:
Rajoutez la servlet suivante dans votre projet et tester la. Vous aurez besoin de mettre cette image au bon endroit dans votre projet pour que le résultat soit correct.
GreetingServlet.javaExercice 5:
Essayez de modifier l’url correspondant à la servlet, par exemple en /hello, en modifiant (1) l'annotation dans la servlet (v3.0) ou (2) le web application deployment descriptor (v. 2.x)
Exercice 6:
Essayez maintenant de créer un fichier war à l'aide d'Eclipse et de le déployer dans l'installation de tomcat réalisée dans le tp précédent: (1) soit en utilisant le manager app, (2) soit en plaçant le fichier war au bon endroit
Exercice 7:
En utilisant un objet javax.servlet.RequestDispatcher, faites en sorte que la partie de la page qui affiche le nom de l'utilisateur soit gérée dans une autre servlet. Tester successivement les deux méthodes permises par l'objet RequestDispatcher : include et forward
javax.servlet.http.HttpServletRequest javax.servlet.ServletContext javax.servlet.RequestDispatcher |
Une solution possible :
Exercice 8:
En utilisant javax.servlet.http.HttpServletResponse.sendRedirect(String), créez une nouvelle version de la servlet greeting et faites en sorte que l'utilisateur soit redirigé vers une servlet ayant une autre url (e.g. /admin) si le nom d'utilisateur est admin.
javax.servlet.http.HttpServletResponse |
Une solution possible :
Exercice 9:
Soit le fichier html ci dessous. Copier le code source pour créer un nouveau fichier html statique dans votre projet. Etudier le code html pour créer la Servlet capable de gérer la réponse.
perso_info.htmlUne solution possible :
Persistance des données
Exercice 10:
L'attribut Refresh, dans le header d'une réponse, permet de forcer le rafraîchissement d'une page par le navigateur. Créer une servlet qui se rafraîchit automatiquement toutes les 5 secondes et qui affiche le nombre de rafraîchissement effectués.
Pour cela vous utiliserez dans cet exercice l'objet qui permet de créer des sessions. Vous l'utiliserez pour stocker le nombre de rafraîchissements.javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.http.HttpSession |
Une solution possible :
Exercice 11:
Modifier la servlet précédente pour que l'utilsiateur puisse modifier, à l'aide d'un formulaire, la fréquence de rafraîchissement, comme dans l'exemple suivant:
This page is automatically refreshed every 10 secondsThis page has been refreshed 2 times in this session.
javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.http.HttpSession |
Une solution possible :
Exercice 12:
En partant de la Servlet greeting. À l'aide d'un cookie, faites en sorte que la page affiche directement hello avec le nom de l'utilisateur s'il a déjà visité la page.
Exercice 13:
Même exercice que 10 mais sans stockage côté serveur (sans session) : en utilisant des cookies.
javax.servlet.http.HttpServletRequest javax.servlet.http.HttpServletResponse javax.servlet.http.Cookie |
Une solution possible :
Une page pour la gestion d'une mailling liste
L'objectif de cette partie est de créer une servlet permettant la gestion persistante d'une mailing liste. Elle permettra via un formulaire de s'inscrire, de se désincrire et de voir la liste des abonnés.Exercice 14:
Dans un premier temps vous allez créer une nouvelle Servlet et redéfinir la méthode doGet de la Servlet de manière à ce que la page affiche la liste des membres (pour l'instant des valeurs fictives) et le formulaire d'inscription. Exemple :
Members:
- test@nowhere.com
Exercice 15:
Redéfinisser la méthode doPost afin de récupérer les informations entrées dans le formulaire et de traiter ces données en conséquence (inscription ou désinscription).
Étudier l'API suivante pour récupérer les données :
javax.servlet.http.HttpServletRequest |
javax.servlet.http.HttpServletResponse |
Exercice 16:
Redéfinisser la méthode init de manière à récupérer un paramètre fixé dans le fichier de configuration des servlets (web application deployment descriptor). Il faut pour cela ajouter un "init-param" à la servlet dans le fichier de configuration qui décriera le nom du fichier de sauvegarde. La version 3.x d'un module web n'implique pas nécessairement la génération du web.xml (web application deployment descriptor). Pour qu'il soit généré, il faut sélectionner sa création sur la dernière page de configuration d'un nouveau dynamic web project.
< init-param> < param-name>addressfile < /param-name> < param-value>mailingList.txt < /param-value> < /init-param>Une alternative est de mettre directement ces informations en enrichissant l'annotation de la servlet, par exemple de la manière suivante :
@WebServlet( name = "SessionTest", urlPatterns = {"/sessionTest"}, initParams = { @WebInitParam(name = "param1", value = "value1"), @WebInitParam(name = "param2", value = "value2")} )Ainsi il ne vous restera plus qu'à récupérer cette valeur dans la méthode init afin d'ouvrir le fichier et de récupérer les données stockées dedans : étudier pour cela les API suivante. Attention, par défaut le "working dir" est positionné sur votre "home"
javax.servlet.http.HttpServlet javax.servlet.GenericServlet javax.servlet.ServletConfig |
ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
|
Symétriquement, le code suivant vous permettra de sauvegarder les données dans le fichier :
ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));
|
ou, plus simple, utiliser les API contenues dans java.nio.file !