JSP (JavaServer Pages) est une technologie Java permettant de créer des pages web dynamiques en mélangeant du code HTML et du code Java.
- JSP est plus adapté pour gérer l’affichage et la mise en page, car il permet d’écrire directement du HTML avec des éléments dynamiques en Java.
- Dans une application bien structurée, on utilise les Servlets pour gérer la logique métier et la navigation, et les JSP pour afficher les résultats (pattern MVC).
<<body>
<h1>Welcome to My JSP Page</h1>
<p>This is a simple JSP example.</p>
<%
// Java code block
Date currentDate = new Date();
%>
<p>Current date and time: <%= currentDate %></p>
<h2>A simple loop:</h2>
<ul>
<% for(int i = 1; i <= 5; i++) { %>
<li>Item <%= i %></li>
<% } %>
</ul>
<!-- Bouton qui envoie une requête GET vers la servlet -->
<form action="MyServlet" method="GET">
<button type="submit">Go to Servlet</button>
</form>
</body>
</html>Servlet et JSP code
Les deux code suivants sont identiques :
- le premier écrit avec JSP
- le second avec une servlet
<!-- hello.jsp -->
<html>
<head><title>Exemple JSP</title></head>
<body>
<h1>Bienvenue sur ma page JSP</h1>
<p>Date actuelle : <%= new java.util.Date() %></p>
</body>
</html>@WebServlet("/hello")
public class HelloServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html><head><title>Exemple Servlet</title></head><body>");
out.println("<h1>Bienvenue sur ma page Servlet</h1>");
out.println("<p>Date actuelle : " + new java.util.Date() + "</p>");
out.println("</body></html>");
}
}MVC en combinant JSP et Servlet
En introduction, nous disions que dans une application bien structurée, on utilise les Servlets pour gérer la logique métier et la navigation, et les JSP pour afficher les résultats (pattern MVC).
- Modèle (Model) : Classe
UseretUserDAOpour gérer les données. - Contrôleur (Controller) : Servlet
UserServletqui gère la logique métier et envoie les données à la JSP. - Vue (View) : JSP
users.jspqui affiche la liste des utilisateurs.
Modèle
public class User {
private String name;
private String email;
// getter + setter
}
public class UserDAO {
public static List<User> getUsers() {
List<User> users = new ArrayList<>();
users.add(new User("Alice", "alice@example.com"));
users.add(new User("Bob", "bob@example.com"));
users.add(new User("Charlie", "charlie@example.com"));
return users;
}
}Controller
@WebServlet("/users")
public class UserServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// Récupérer la liste des utilisateurs depuis le modèle (UserDAO)
List<User> userList = UserDAO.getUsers();
// Ajouter la liste en tant qu'attribut de la requête
request.setAttribute("users", userList);
// Rediriger vers la JSP pour afficher les résultats
request.getRequestDispatcher("users.jsp").forward(request, response);
}
}Vue
<!-- users.jsp -->
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.util.List" %>
<%@ page import="User" %>
<html>
<head>
<title>Liste des Utilisateurs</title>
</head>
<body>
<h1>Liste des Utilisateurs</h1>
<table border="1">
<tr>
<th>Nom</th>
<th>Email</th>
</tr>
<%
List<User> users = (List<User>) request.getAttribute("users");
for (User user : users) {
%>
<tr>
<td><%= user.getName() %></td>
<td><%= user.getEmail() %></td>
</tr>
<%
}
%>
</table>
</body>
</html>Diagramme de séquence
sequenceDiagram participant Utilisateur participant Navigateur participant ServletContainer participant UserServlet participant UserDAO participant JSP Utilisateur->>Navigateur: Entrer l'URL "/users" Navigateur->>ServletContainer: Envoi requête HTTP GET "/users" ServletContainer->>UserServlet: Appel doGet(request, response) UserServlet->>UserDAO: getUsers() UserDAO-->>UserServlet: Retourne la liste des utilisateurs UserServlet->>ServletContainer: request.setAttribute("users", userList) UserServlet->>ServletContainer: Forward vers users.jsp ServletContainer->>JSP: Générer la page HTML JSP->>JSP: Boucle sur la liste des utilisateurs et génère le tableau JSP-->>Navigateur: Envoi de la page HTML générée Navigateur-->>Utilisateur: Affichage de la liste des utilisateurs