1 : Proposez le contenu du fichier web.xml pour effectuer le mapping pour nos différentes fonctionnalités.
Le fichier web.xml peut être configuré comme suit :
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>OffresEmploiApp</display-name>
<!-- Mapping pour la création d'un utilisateur -->
<servlet>
<servlet-name>CreationUtilisateur</servlet-name>
<servlet-class>com.example.servlets.CreationUtilisateur</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreationUtilisateur</servlet-name>
<url-pattern>/creerUtilisateur</url-pattern>
</servlet-mapping>
<!-- Mapping pour l'affichage du profil utilisateur -->
<servlet>
<servlet-name>AfficherUtilisateur</servlet-name>
<servlet-class>com.example.servlets.AfficherUtilisateur</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>AfficherUtilisateur</servlet-name>
<url-pattern>/afficherUtilisateur</url-pattern>
</servlet-mapping>
<!-- Mapping pour la création d'une offre d'emploi -->
<servlet>
<servlet-name>CreerOffre</servlet-name>
<servlet-class>com.example.servlets.CreerOffre</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CreerOffre</servlet-name>
<url-pattern>/creerOffre</url-pattern>
</servlet-mapping>
<!-- Mapping pour la gestion des candidatures -->
<servlet>
<servlet-name>Application</servlet-name>
<servlet-class>com.example.servlets.Application</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Application</servlet-name>
<url-pattern>/application</url-pattern>
</servlet-mapping>
<!-- Autres configurations et paramètres -->
...
</web-app>
2 : Créer les deux beans Utilisateur et OffreEmploi.
Voici le code des deux classes bean :
public class Utilisateur {
private int id;
private String nom;
private String email;
private String pays;
// Constructeur, getters et setters
// Constructeur par défaut
public Utilisateur() {
}
// Constructeur avec tous les attributs
public Utilisateur(int id, String nom, String email, String pays) {
this.id = id;
this.nom = nom;
this.email = email;
this.pays = pays;
}
// Getters et setters pour tous les attributs
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPays() {
return pays;
}
public void setPays(String pays) {
this.pays = pays;
}
}
public class OffreEmploi {
private int id;
private String titre;
private String description;
private Date dateLimite;
// Constructeur, getters et setters
// Constructeur par défaut
public OffreEmploi() {
}
// Constructeur avec tous les attributs
public OffreEmploi(int id, String titre, String description, Date dateLimite) {
this.id = id;
this.titre = titre;
this.description = description;
this.dateLimite = dateLimite;
}
// Getters et setters pour tous les attributs
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getTitre() {
return titre;
}
public void setTitre(String titre) {
this.titre = titre;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Date getDateLimite() {
return dateLimite;
}
public void setDateLimite(Date dateLimite) {
this.dateLimite = dateLimite;
}
}
3 : Réaliser la fonctionnalité de création d'une nouvelle offre d'emploi.
3.1 Donner le code de creerEmploie.jsp :
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Création d'une offre d'emploi</title>
</head>
<body>
<h1>Création d'une offre d'emploi</h1>
<form action="creerOffre" method="post">
<label for="titre">Titre:</label>
<input type="text" name="titre" id="titre" required><br>
<label for="description">Description:</label>
<textarea name="description" id="description" required></textarea><br>
<label for="dateLimite">Date limite:</label>
<input type="date" name="dateLimite" id="dateLimite" required><br>
<input type="submit" value="Créer">
</form>
</body>
</html>
3.2 Produire le code du contrôleur CreerOffre qui affiche en sa creerEmploie.jsp et en doPost enregistre l'offre dans un bean afficheEmploi.jsp :
@WebServlet("/creerOffre")
public class CreerOffreServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.getRequestDispatcher("creerEmploie.jsp").forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Récupérer les données du formulaire
String titre = request.getParameter("titre");
String description = request.getParameter("description");
String dateLimiteStr = request.getParameter("dateLimite");
// Convertir la date limite en objet Date
SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
Date dateLimite = null;
try {
dateLimite = dateFormat.parse(dateLimiteStr);
} catch (ParseException e) {
e.printStackTrace();
}
// Créer l'objet OffreEmploi
OffreEmploi offreEmploi = new OffreEmploi();
offreEmploi.setTitre(titre);
offreEmploi.setDescription(description);
offreEmploi.setDateLimite(dateLimite);
// Enregistrer l'offreEmploi dans une variable de la requête
request.setAttribute("offreEmploi", offreEmploi);
// Rediriger vers la page afficheEmploi.jsp
request.getRequestDispatcher("afficheEmploi.jsp").forward(request, response);
}
}
4 : Proposer un code pour le contrôleur Application pour gérer les candidatures des utilisateurs aux offres d'emplois.
@WebServlet("/application")
public class ApplicationServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Récupérer les données du formulaire de candidature
String nom = request.getParameter("nom");
String email = request.getParameter("email");
String message = request.getParameter("message");
// Traiter les données de candidature (par exemple, enregistrer dans une base de données)
// Afficher un message de confirmation
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Candidature enregistrée avec succès</h1>");
out.println("<p>Nom: " + nom + "</p>");
out.println("<p>Email: " + email + "</p>");
out.println("<p>Message: " + message + "</p>");
out.close();
}
}
5 : Créer un code pour la vue postule.jsp en se servant de la figure 1. Donner son code source et mettre à jour les annotations ou le fichier web.xml.
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Postuler à une offre d'emploi</title>
</head>
<body>
<h1>Postuler à une offre d'emploi</h1>
<form action="application" method="post">
<label for="nom">Nom:</label>
<input type="text" name="nom" id="nom" required><br>
<label for="email">Email:</label>
<input type="email" name="email" id="email" required><br>
<label for="message">Message:</label>
<textarea name="message" id="message" required></textarea><br>
<input type="submit" value="Postuler">
</form>
</body>
</html>
Dans le fichier web.xml, ajoutez les configurations suivantes :
xml
<!-- Mapping pour la vue postule.jsp -->
<servlet>
<servlet-name>Postule</servlet-name>
<jsp-file>/postule.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>Postule</servlet-name>
<url-pattern>/postule</url-pattern>
</servlet-mapping>
Question 6: Pour étendre les fonctionnalités de notre mini-application, proposez l'intégration de la couche d'accès aux données que vous utiliserez dans le contrôleur Application pour enregistrer une candidature.
Pour intégrer la couche d'accès aux données, vous pouvez utiliser une bibliothèque comme JDBC pour interagir avec une base de données relationnelle. Voici un exemple de code pour enregistrer une candidature en utilisant JDBC et une base de données MySQL :
@WebServlet("/application")
public class ApplicationServlet extends HttpServlet {
private static final String DB_URL = "jdbc:mysql://localhost:3306/database_in3";
private static final String DB_USER = "joelyk";
private static final String DB_PASSWORD = "Genius";
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Récupérer les données du formulaire de candidature
String nom = request.getParameter("nom");
String email = request.getParameter("email");
String message = request.getParameter("message");
// Enregistrer la candidature dans la base de données
Connection conn = null;
PreparedStatement stmt = null;
try {
// Établir la connexion à la base de données
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// Préparer la requête d'insertion
String sql = "INSERT INTO candidatures (nom, email, message) VALUES (?, ?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setString(1, nom);
stmt.setString(2, email);
stmt.setString(3, message);
// Exécuter la requête d'insertion
stmt.executeUpdate();
// Afficher un message de confirmation
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<h1>Candidature enregistrée avec succès</h1>");
out.println("<p>Nom: " + nom + "</p>");
out.println("<p>Email: " + email + "</p>");
out.println("<p>Message: " + message + "</p>");
out.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
// Fermer les ressources
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}