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




API

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.



API

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.java




Exercice 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



API

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.



API

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.html

Une 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.

API

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 seconds
Choose a different refresh rate :
This page has been refreshed 2 times in this session.

API

javax.servlet.http.HttpServletRequest

javax.servlet.http.HttpServletResponse

javax.servlet.http.HttpSession


Modifier maintenant la servlet précédente pour que le temps maximum d'une session soit de 7 secondes. Tester le résultat en entrant des valeurs supérieures pour la fréquence de rafraîchissement.

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.



API

javax.servlet.http.HttpServletRequest

javax.servlet.http.HttpServletResponse

javax.servlet.http.Cookie


Faites maintenant en sorte que la durée de vie du cookie soit de 1 minute. Tester le résultat en fermant la page plus d'une minute.

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:




Enter your email address:






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 :


API

javax.servlet.http.HttpServletRequest


Étudier ensuite l'API suivante pour construire la page réponse ou éventuellement renvoyer une page d'erreur à l'aide de la méthode sendError :

API

javax.servlet.http.HttpServletResponse


Afficher des données fictives pour verifier le bon comportement de votre servlet.



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"

API

javax.servlet.http.HttpServlet

javax.servlet.GenericServlet

javax.servlet.ServletConfig


Une fois le fichier "mailingList.txt" récupéré vous pouvez par exemple utiliser le code suivant pour récupérer la liste des adresses enregistrées :

      ObjectInputStream in = new ObjectInputStream(new FileInputStream(filename));
      addresses = (ArrayList<String>in.readObject();
      in.close();

Symétriquement, le code suivant vous permettra de sauvegarder les données dans le fichier :


    ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream(filename));
    out.writeObject(addresses);
    out.close();

ou, plus simple, utiliser les API contenues dans java.nio.file !

Une solution possible :