Activité : Premier serveur HTTP - partie 1

Situation

Vous êtes employé par une entreprise de développement spécialisée dans le logiciel en Java sans expérience dans le développement web. La direction a néanmoins accepté un mandat pour la réalisation d’une application web et le travail est en cours. Vous venez d’être intégré à l’équipe de développement et vous devez maintenant vous familiariser avec le framework Javalin. On vous propose de réaliser un livre d’or, c.-à-d. une page où les visiteurs peuvent laisser un message.

Consigne

Lisez les instructions ci-après et réalisez les tâches demandées.

Objectifs

À la fin de ce travail, vous devez :

  1. Être capable d’expliquer le fonctionnement d’un serveur HTTP réalisé avec Javalin.
  2. Être capable d’ajouter un gestionnaire de ressource, de l’associer à un chemin.
  3. Être capable d’expliquer ce qu’est un langage de template.
  4. Être capable de réaliser d’ajouter un template et de l’utiliser dans un gestionnaire de ressource.
  5. Connaître la directive <#list> de FreeMarker.
  6. Être capable d’utiliser un formulaire HTML pour envoyer une requête avec des données.
  7. Être capable de choisir entre la méthode GET et la méthode POST.
  8. Être capable de mettre en oeuvre le pattern “Post-Redirect-Get”.

Résultat attendu

  • Un bref rapport qui décrit votre travail et votre démarche.
  • Le code source de votre application.

Ressources

Documents :

Logiciel :

  • VSCode
  • Chrome et Firefox
  • mariadb (mysql)

Mise en route

Installation de mariadb

Vous devez d’abord vous assurer que le SGBD mariadb est installé sur votre machine. Pour cela, lancez la commande suivante :

1
mysql --version

Si la commande ne fonctionne pas, ouvrez une fenêtre de terminal en tant qu’administrateur et installez mariadb avec l’une des commandes suivantes (choco pour windows et brew pour macOS) :

1
choco install mariadb
1
brew install mariadb

Télécharger le projet

Rendez-vous dans le répertoire de vos projets, lancez la commande ci-après et lorsque le système vous le demande, saisissez votre nom et votre mot de passe I-FR.

1
git clone https://gitlab.epai-ict.ch/m133/activities/firstserver.git

Déplacez-vous dans le répertoire firstserver et lancer la commande code . pour ouvrir le projet dans VSC (Visual Studio Code).

Créer une base de données

À la racine de votre projet (le répertoire où se trouve le fichier pom.xml), créez un répertoire data. Dans ce répertoire, créez un fichier de type SQL nommé «guestbook.sql» avec le code SQL suivant :

1
2
3
4
5
6
7
8
9
10
CREATE DATABASE guestbook DEFAULT CHARSET UTF8;
use guestbook;

CREATE TABLE message (
    messageID    INT UNSIGNED NOT NULL AUTO_INCREMENT,
    messageDate  TIMESTAMP DEFAULT NOW(),
    pseudo       VARCHAR(50),
    message      VARCHAR(512),
PRIMARY KEY (messageID)
);

Il reste maintenant à créer la base de données dans le serveur MySQL. Pour cela, ouvrez un terminal, rendez-vous dans le répertoire de votre projet et exécutez les commandes suivantes :

1
2
3
cd data
mysql -u root -p < guestbook.sql
Enter password :

Lorsque vous y êtes invité, tapez le mot de passe de l’utilisateur root (par défaut, il n’y a pas de mot de passe). La base de données est maintenant créée. Pour le vérifier, tapez les commandes suivantes :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
dev@vmdev: mysql -u root -p
Enter password :

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

mysql> use guestbook;
Database changed 

mysql>  show tables;
+---------------------+
| Tables_in_guestbook |
+---------------------+
| message             |
+---------------------+

Remarque : si vous voulez faire des changements dans le schéma d’une base de données sur le serveur qui se trouve sur votre machine de développement, ne faites pas de modifications incrémentales. Modifier le fichier guestbook.sql, supprimez la base de données avec la commande drop database Guestbook; puis recréez-la avec le nouveau schéma.

Vous pouvez ajouter des données dans votre base de données à l’aide d’instructions INSERT INTO comme dans l’exemple ci-après :

1
2
3
4
USE guestbook;

INSERT INTO message (pseudo, message)
VALUES ("albert", "Salutations d'albert !");

Utiliser une base de données SQL en Java

Pour utiliser mariadb, nous avons besoin d’un driver JDBC. Pour cela, ouvrez le fichier pom.xml et dans l’élément dependencies, ajoutez la dépendance suivante :

1
2
3
4
5
6
<!-- mariadb driver -->
<dependency>
    <groupId>org.mariadb.jdbc</groupId>
    <artifactId>mariadb-java-client</artifactId>
    <version>1.2.0</version>
</dependency>

L’extrait de code ci-dessous, vous montre comment lire les données d’une base de données de mariadb en utilisant JDBC.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
...

// Crée une connexion à la base de données 
// (root est username et epai123 est le mot de passe).
String mySqlUrl = "jdbc:mariadb://localhost/guestbook";
Connection connexion = DriverManager.getConnection(mySqlUrl, "root", "epai123");

try {
    // Définit la requête SQL
    String query = "SELECT * FROM message";

    // Crée une instruction sql et execute la requête.
    Statement statement = connection.createStatement();
    ResultSet rs = statement.executeQuery(query);

    // Parcourt l'ensemble de résultats (result set)
    while (rs.next()) {
        int messageId = rs.getInt("messageID");
        Date messageDate = rs.getDate("messageDate");
        String pseudo = rs.getString("pseudo");
        String message = rs.getString("message");

        // Fait quelque chose avec les valeurs
        System.out.format("%s, %s, %s, %s\n", messageId, messageDate.toString(), pseudo, message);
    }
} finally {
    connexion.close();
}

...

Tâches

Sur la base du code et des documents fournis :

  1. Commencez par étudier le projet “firstserver” que vous avez téléchargé et appliquez-vous à en comprendre le fonctionnement en effectuant éventuellement de petites modifications.
  2. Vous devez réaliser une gestionnaire de ressource pour l’affichage des messages, sans formulaire de saisie. La page ne doit contenir qu’une liste dont chaque entrée comprend la date, le pseudo de l’auteur et le message. Le contenu de la réponse doit être en HTML 5 encodé en UTF-8. Le chemin de l’URI de la ressource doit être “/guestbook”.
  3. Modifiez le gestionnaire de ressource pour réaliser un formulaire pour la saisie de nouveaux messages. Le formulaire doit avoir un champ pour le pseudo, un champ multiligne pour le message, un bouton d’envoi, et doit se trouver dans le haut de page au-dessus du premier message.
  4. Ajoutez un gestionnaire de requête pour le traitement des données du formulaire. Le gestionnaire doit traiter les requêtes avec la méthode POST sur la ressource /guestbook. Vous devez implémenter le pattern “Post-Redirect-Get”.