TP5 JSTL
TP5 JSTL
TP5 JSTL
T.P. 5
JSTL, MVC
Dans ce TP, l'utilisation des tags JSTL est obligatoire pour crire les JSPs, il est interdit d'utiliser
du code java dans les JSPs (c'est--dire, il ne faut pas utiliser des scriplets <%=...%> ou <%...%>).
Pour le mapping des tables de la base de donnes, vous pouvez utiliser EJB3 ou JDBC.
L'objectif de ce TP est de dvelopper une application Web permettant de grer des contacts (crer
un contact, rechercher un contact, modifier un contact, ...). Cette application doit tre conforme au
design pattern MVC (i.e, des JSPs pour les vues, une Servlet comme contrleur et des classes Java
(EJB3 ou JDBC) pour le modle). Pour cela, nous allons crer des JSPs responsables de l'affichage
d'un contact, de son dition,... Chacune de ces JSPs communiquera avec une Servlet qui aura le rle
de contrleur : ControllerServlet.java (voir le code de cette Servlet en annexe). Lide ici est que
toutes vos requtes doivent tre sous la forme: ControllerServlet?do_this=[action excuter], le
paramtre do_this est rcupr par la ControllerServlet pour connatre l'action effectuer (par
exemple, slectionner la JSP qui aura afficher la rponse).
- Partie Modle:
Vous devez commencer par crer la table Contact:
CREATE TABLE Contact (
ID_CONTACT generated always as identity primary key,
FIRSTNAME VARCHAR(255),
LASTNAME VARCHAR(255),
EMAIL VARCHAR(255),
PHONE VARCHAR(255),
ADDRESS VARCHAR(255)
)
Crez un projet TP5_Contacts. Ensuite, dans un package nomm model sous le rpertoire src,
implmentez la classe Contact (un EJB Entity ou un simple JavaBean mapper avec JDBC)
correspondant au mapping de la table Contact. Implmentez galement la classe
ContactFacade.java dans le package model.
- Partie Contrleur:
Dans un package nomm controller, crez une Servlet ControllerServlet.java. Ensuite, copiez le
code de cette Servlet fournit en annexe A. Ce code est incomplet, dans la suite du TP, vous aurez
le complter en fonction des besoins des JSPs dveloppes dans la partie Vues.
- Partie Vues:
Lutilisateur arrive sur une page daccueil accueil.jsp. Cette page affiche la liste des contacts dj
crs. En plus, la page accueil.jsp contient les actions suivantes (liens) :
- Crer un nouveau contact (redirection vers addContact.jsp)
- Supprimer un contact (redirection vers removeContact.jsp)
- Modifier un contact (redirection vers updateContact.jsp)
- Rechercher un contact (redirection vers searchContact.jsp)
La page addContact.jsp propose un formulaire qui contient des champs pour renseigner un contact.
Ses champs doivent correspondre aux attributs de la classe Contact.java. Le formulaire doit
galement avoir un bouton submit.
Une fois le formulaire envoy, il est trait par la servlet ControllerServlet. Par consquent, afin de
prciser ControllerServlet l'action effectuer, le formulaire de addContact.jsp doit contenir un
paramtre cach: <input type="hidden" name="do_this" value="create"/> (voir le code du formulaire ci-dessous).
Crez la page addContact.jsp dans TP5_Contacts/WebContent/, puis copiez et compltez le code
du formulaire suivant:
Ensuite, la Servlet ControllerServlet rcupre les informations du contact partir des donnes du
formulaire puis elle utilise le ContactFacade pour appeler la mthode addContact(long id, String
firstname, String lastname, String email, ). Cette mthode cre une instance de Contact, fixe
ses attributs puis le sauvegarde dans la base de donnes.
Mme principe pour removeContact.jsp. Cette page propose un formulaire avec un champ nomm
idContact et un bouton submit . Une fois cliqu, le formulaire fait appel la servlet
ControllerServlet qui rcupre lid du contact partir des donnes du formulaire puis elle appelle la
mthode deleteContact(long id) de ContactFacade. Cette mthode se charge deffacer le contact
portant cet id dans la base de donnes.
import java.io.IOException;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import model.ContactFacade;
public ControllerServlet() {
super();
}
} else if (do_this.equals("delete")) {
// recuperation de l'id du contact
String id = (String) request.getParameter("contact_id");
if (id == null) {
// redirection sur la page removeContact.jsp
response.sendRedirect("removeContact.jsp");
} else {
// id non nul, donc on supprime le contact identifi par id
contactFacade.deleteContact(id);
// on recharge la page d'accueil
response.sendRedirect("ControllerServlet");
}
} else if (do_this.equals("create")) {
// recuperation du nom contact
String lastName = (String) request.getParameter("lastName");
if (lastName == null) {
// redirection sur la page removeContact.jsp
response.sendRedirect("addContact.jsp");
} else {
// TODO le nom n'est pas nul, donc on ajoute le contact dans la base
contactFacade.createContact(...);
// on recharge la page d'accueil
response.sendRedirect("ControllerServlet");
}
} else if (do_this.equals("update")) {
// TODO ...
} else if (do_this.equals("search")) {
// TODO ...
}
// TODO ...
}
</tr>
<c:forEach var="contact" items="${requestScope.listContacts}">
<tr>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
<td>...</td>
</tr>
</c:forEach>
</table>
<a href="ControllerServlet?do_this=create" style="">Crer un nouveau contact</a>
<a href="ControllerServlet?do_this=delete" style="">Supprimer un Contact</a>
<a href="ControllerServlet?do_this=update" style="">Modifier un Contact</a>
<a href="ControllerServlet?do_this=search" style="">Rechercher un contact</a>
</body>
</html>