Qu’est-ce que Tomcat ?

C’est un serveur d’applications (ou plus précisément un “conteneur de servlets”).

  • Son job : Exécuter des applications web écrites en Java.

  • Sa spécialité : Il gère les technologies Java Servlet et JavaServer Pages (JSP).

  • Le petit plus : Il est gratuit, open-source et c’est le standard utilisé par des millions de développeurs.

Les points clés à retenir :

  • Serveur Web : Il écoute sur un port spécifique (généralement le 8080) pour intercepter les demandes des utilisateurs.

  • Environnement d’exécution : Il fournit l’infrastructure nécessaire pour faire tourner des servlets Java et des pages JSP.

  • Format de fichier : Pour déployer une application sur Tomcat, on utilise généralement un fichier .war (Web Application Archive), généré au préalable par un outil comme Gradle.

Comment ça marche ? (Le flux simple)

  1. Le Client : Tu tapes une adresse dans ton navigateur.

  2. Tomcat : Il reçoit la requête, cherche l’application Java correspondante.

  3. Le Code : Le code Java fait ses calculs (va chercher des infos en base de données, etc.).

  4. Le Résultat : Tomcat renvoie une page HTML toute propre à ton navigateur.

Initialisation d’un serveur Tomcat 10+ (API Jakarta Servlet)

⚠️ Cet exemple utilise l’API Jakarta Servlet (jakarta.servlet.*) et nécessite Tomcat 10 ou supérieur ainsi que les dépendances tomcat-embed-core et tomcat-embed-jasper (Jakarta EE).

import java.io.File;
import org.apache.catalina.Context;
import org.apache.catalina.LifecycleException;
import org.apache.catalina.startup.Tomcat;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
 
public class Main {
 
    public static void main(String[] args) throws LifecycleException {
        // 1. Création de l'instance Tomcat
        Tomcat tomcat = new Tomcat();
        
        // 2. Configuration du port
        tomcat.setPort(8080);
        // Nécessaire pour activer le connecteur en Tomcat 10+ (API Jakarta Servlet)
        tomcat.getConnector();
 
        // 3. Définition du répertoire de base (temp)
        String baseDir = new File(".").getAbsolutePath();
        Context ctx = tomcat.addContext("", baseDir);
 
        // 4. Ajout d'une Servlet personnalisée pour tester
        String servletName = "HelloServlet";
        Tomcat.addServlet(ctx, servletName, new HttpServlet() {
            @Override
            protected void doGet(HttpServletRequest req, HttpServletResponse resp) 
                    throws IOException {
                resp.setContentType("text/html");
                resp.getWriter().println("<h1>Tomcat Embedded en Java pur !</h1>");
            }
        });
        
        // Mappage de la servlet sur toutes les URL ("/*") pour un exemple de type catch-all
        ctx.addServletMappingDecoded("/*", servletName);
 
        // 5. Démarrage du serveur
        System.out.println("Démarrage de Tomcat sur le port 8080...");
        tomcat.start();
        
        // Maintient le serveur en vie
        tomcat.getServer().await();
    }
}

Points clés à retenir :

  • tomcat.setPort(8080) : Définit le port d’écoute.

  • tomcat.addContext : Crée un contexte d’application. Même pour une application simple, Tomcat a besoin d’un contexte (souvent la racine /).

  • tomcat.getConnector() : Dans les versions récentes, si tu n’appelles pas explicitement cette méthode, le connecteur HTTP ne s’initialise pas par défaut.

  • tomcat.getServer().await() : Empêche le programme Java de s’arrêter immédiatement après le start().