Académique Documents
Professionnel Documents
Culture Documents
Par : M. Abbou
I-Objectif du TP
L’objectif de ce TP est de vous montrer comment implémenter le modèle MVC II avec Java, JSP et
les Servlets pour une architecture 3-tier.
Définir le contrôleur ;
Définir les vues ;
Définir le modèle. Ce dernier est composé de la couche métier et la couche DAO ;
Implémenter la couche DAO en utilisant une liste statique ;
Implémenter la couche DAO en utilisant l’API JDBC ;
Traiter les requêtes émanant des utilisateurs ;
Le contrôleur décide du choix de la vue à afficher ;
Le contrôleur fournit le modèle à la vue pour qu’il soit présenté par cette dernière ;
La couche présentation est indépendante de la couche métier ;
Tester les vues indépendamment du Modèle et du Contrôleur.
II- Introduction
L’application web que nous allons développer va permettre de gérer un groupe de personnes avec
quatre opérations :
Dans la version 1, la couche [dao] n’utilisera pas de base de données. Les personnes du
groupe seront stockées dans un simple objet [ArrayList] géré en interne par la couche [dao].
Cela permettra de tester l’application sans contrainte de base de données.
package service;
import java.text.SimpleDateFormat;
import java.util.Date;
public Personne() {
// TODO Auto-generated constructor stub
}
5. Couche dao
a. Dans ce package ma.emsi.formation.mvc.dao, créer les 5 classes suivantes :
b. IDao.java :
Le code de l’interface IDao.java est le suivant :
package dao;
import java.util.Collection;
import service.Personne;
Collection getAll();
package dao;
/**
*
*/
private static final long serialVersionUID =
2545452232963083750L;
private int code;
d. Utils.java
Le code de la classe Utils.java est le suivant :
package dao;
import java.util.ArrayList;
import service.Personne;
private Utils() {
}
e. DaoImplList.java
Le code de cette classe est le suivant :
package dao;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import service.Personne;
// n° de la prochaine personne
private int id = -1;
f. DaoImplJDBC.java
package dao;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
import service.Personne;
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
return personnes;
}
while (rs.next()) {
personne = new Personne(rs.getInt("id"),
rs.getString("prenom"),
rs.getString("nom"), rs
.getDate("dateNaissance"), rs
.getBoolean("marie"),
rs.getInt("nbreEnfants"));
personnes.add(personne);
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
return personne;
}
if (personne.getId() == -1) {
String findMaxIDrequest = "select max(id) as id from
personne";
ResultSet rs1 = stmt.executeQuery(findMaxIDrequest);
int maxId = 0;
while (rs1.next()) {
maxId = rs1.getInt("id");
}
rs1.close();
personne.setId(++maxId);
stmt.executeUpdate(insertRequest);
stmt.close();
} else {
conn.close();
getAll();
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
}
} catch (SQLException e) {
System.out.println("SQLException: " + e.getMessage());
System.out.println("SQLState: " + e.getSQLState());
System.out.println("VendorError: " + e.getErrorCode());
}
}
}
b. IService.java
package service;
import java.util.Collection;
import service.Personne;
Collection getAll();
package service;
import java.util.Collection;
import dao.DaoImplJDBC;
import dao.DaoImplList;
import dao.IDao;
7. La couche Web
La couche [web ou bien présentation] va offrir des écrans à l’utilisateur pour lui
permettre de gérer le groupe de personnes :
- Liste des personnes du groupe ;
- Ajout d’une personne au groupe ;
- Modification d’une personne du groupe ;
- Suppression d’une personne du groupe.
a. Controleur.java
package presentation;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import service.IService;
import service.Personne;
import service.ServiceImpl;
// GET
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// on vérifie comment s'est passée l'initialisation de la servlet
if (erreursInitialisation.size() != 0) {
// on passe la main à la page d'erreurs
request.setAttribute("erreurs", erreursInitialisation);
getServletContext().getRequestDispatcher(urlErreurs).forward(
request, response);
// fin
return;
}
thePersonne.setPrenom(request.getParameter("prenom").trim());
thePersonne.setNom(request.getParameter("nom").trim());
try {
thePersonne.setNbEnfants(Integer.parseInt(request.getParameter(
"nbEnfants").trim()));
} catch (Exception e) {
thePersonne.setNbEnfants(0);
}
// post
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
// on passe la main au GET
doGet(request, response);
}
index.jsp :
edit.jsp
<%@ page language="java" pageEncoding="ISO-8859-1"
contentType="text/html;charset=ISO-8859-1"%>
<%
String erreurEdit = (String) request.getAttribute("erreurEdit");
Personne thePersonne = (Personne) request.getAttribute("thePersonne");
%>
<%@page import="service.Personne"%>
<%@page import="java.text.SimpleDateFormat"%><html>
<head>
<title>MVC - Personnes</title>
</head>
<body>
<h2>Ajout/Modification d'une personne</h2>
<%
if (erreurEdit != null && erreurEdit != "") {
out.println("<h3>Echec de la mise à jour :</h3>");
out.print("L'erreur suivante s'est produite :");
out.println(erreurEdit);
out.println("<hr>");
}
%>
<tr>
<td>Prénom</td>
<td><input type="text" value="<%=thePersonne.getPrenom()%>"
name="prenom" size="20"></td>
<td>
<%
String erreurPrenom = (String) request.getAttribute("erreurPrenom");
if (erreurPrenom == null || erreurPrenom == "")
erreurPrenom = "";
out.print(erreurPrenom);
%>
</td>
</tr>
<tr>
<td>Nom</td>
<td><input type="text" value="<%=thePersonne.getNom()%>"
out.print(erreurNom);
%>
</td>
</tr>
<tr>
<td>Date de naissance (AAAA-MM-JJ)</td>
<td><input type="text"
value="<%if (thePersonne.getDateNaissance() == null)
out.print("");
else
out.print(new SimpleDateFormat("yyyy-MM-dd").format(thePersonne
.getDateNaissance()));%>"
name="dateNaissance"></td>
<td>
<%
String erreurDateNaissance = (String) request
.getAttribute("erreurDateNaissance");
if (erreurDateNaissance == null || erreurDateNaissance == "")
erreurDateNaissance = "";
out.print(erreurDateNaissance);
%>
</td>
</tr>
<tr>
<td>Marié</td>
<td>
<%
String marie = String.valueOf(thePersonne.getMarie());
if (marie == "true") {
out.println("<input type=\"radio\" name=\"marie\"
value=\"true\" checked>Oui");
out.println("<input type=\"radio\" name=\"marie\"
value=\"false\">Non");
} else {
out.println("<input type=\"radio\" name=\"marie\"
value=\"true\">Oui");
out.println("<input type=\"radio\" name=\"marie\" value=\"false\"
checked>Non");
}
%>
</td>
</tr>
<tr>
<td>Nombre d'enfants</td>
<td><input type="text" value="<%=thePersonne.getNbEnfants()%>"
name="nbEnfants"></td>
<td><%=thePersonne.getNbEnfants()%></td>
</tr>
</table>
<br>
<input type="hidden" value="<%=thePersonne.getId()%>" name="id" /> <input
type="submit" value="Valider" /> <a href="/mvc2/do/list"
/>Annuler</a></form>
list.jsp
<%@ page language="java" pageEncoding="ISO-8859-1"
contentType="text/html;charset=ISO-8859-1"%>
<%
ArrayList erreurs = (ArrayList) request.getAttribute("erreurs");
Collection personnes = (Collection) request
.getAttribute("personnes");
%>
<%@page import="java.util.ArrayList"%>
<%@page import="service.*"%>
<%@page import="java.util.Collection"%>
<%@page import="java.util.Iterator"%>
<%@page import="java.text.SimpleDateFormat"%><html>
<head>
<title>MVC - Personnes</title>
</head>
<body>
<%
if (erreurs != null) {
out
.println("<h3>Les erreurs suivantes se sont
produites :</h3>");
out.println("<ul>");
exception.jsp :
<%
response.setStatus(200);
%>
<html>
<head>
<title>MVC - Personnes</title>
</head>
<body>
<h2>MVC - personnes</h2>
L'exception suivante s'est produite :
<%= exception.getMessage()%>
<br><br>
<a href="/do/list">Retour à la liste</a>
</body>
</html>
erreurs.jsp :
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<%
ArrayList erreurs = (ArrayList) request.getAttribute("erreurs");
%>
<%@page import="java.util.ArrayList"%>
<html>
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>mvc2</display-name>
<!-- ServletPersonne -->
<servlet>
<servlet-name>mvc2</servlet-name>
<servlet-class>
presentation.Controleur
</servlet-class>
<init-param>
<param-name>urlEdit</param-name>
<param-value>/WEB-INF/vues/edit.jsp</param-value>
</init-param>
<init-param>
<param-name>urlErreurs</param-name>
<param-value>/WEB-INF/vues/erreurs.jsp</param-value>
</init-param>
<init-param>
<param-name>urlList</param-name>
<param-value>/WEB-INF/vues/list.jsp</param-value>
</init-param>
</servlet>
<!-- Mapping ServletPersonne-->
<servlet-mapping>
<servlet-name>mvc2</servlet-name>
<url-pattern>/do/*</url-pattern>
</servlet-mapping>
<!-- fichiers d'accueil -->
<welcome-file-list>
<welcome-file>/WEB-INF/vues/index.jsp</welcome-file>
</welcome-file-list>
<!-- Page d'erreur inattendue -->
<error-page>
<exception-type>java.lang.Exception</exception-type>
<location>/WEB-INF/vues/exception.jsp</location>
</error-page>
</web-app>
Pour ajouter une nouvelle personne, cliquer sur le lien Ajouter. La page suivante sera
affichée :
Entrer le nom, le prénom, la date de naissance et cocher le flag marié et entrer le nombre
d’enfants :
Pour modifier une personne, cliquer sur le lien « Modifier », le formulaire de modification
sera affichée. Entrer par la suite les modifications et cliquer sur le bouton valider :
Ensuite, dans la classe ServiceImpl , remplacer le code de la méthode init() par le code
suivant :