Contactez-nous

Servir du contenu statique (CSS, JavaScript, images)

Apprenez comment Spring Boot gère et sert automatiquement le contenu statique comme les fichiers CSS, JavaScript et les images à partir d'emplacements prédéfinis.

Le rôle essentiel du contenu statique dans les applications web

Une application web moderne ne se résume pas à du HTML dynamique généré côté serveur. Pour offrir une expérience utilisateur riche et attrayante, elle dépend fortement de contenu statique :

  • Feuilles de style CSS : Pour définir l'apparence visuelle, la mise en page, les couleurs et les polices.
  • Fichiers JavaScript : Pour ajouter de l'interactivité côté client, effectuer des validations de formulaire, réaliser des appels AJAX, et manipuler le DOM.
  • Images : Logos, icônes, illustrations, photos de produits, etc.
  • Polices de caractères personnalisées, fichiers vidéo ou audio, etc.

Contrairement au contenu dynamique généré par les contrôleurs et les templates, ce contenu ne change pas (ou peu fréquemment) et doit être servi directement par le serveur web au navigateur du client. Heureusement, Spring Boot rend ce processus extrêmement simple grâce à son auto-configuration.

Les emplacements par défaut pour le contenu statique

Par défaut, Spring Boot est configuré pour rechercher et servir automatiquement le contenu statique à partir de plusieurs emplacements prédéfinis dans le classpath de votre application. Si une requête HTTP arrive et ne correspond à aucun mapping de contrôleur, Spring Boot vérifiera si elle correspond à une ressource statique dans l'un des répertoires suivants (dans cet ordre de priorité) :

  1. /META-INF/resources/ : Souvent utilisé par les bibliothèques tierces (comme les WebJars).
  2. /resources/ : Moins courant pour les ressources statiques d'application.
  3. /static/ : L'emplacement le plus couramment utilisé et recommandé pour vos fichiers CSS, JS, images, etc., au sein de votre projet.
  4. /public/ : Un autre emplacement standard possible.

Dans la structure d'un projet Maven ou Gradle typique, cela signifie que vous placerez le plus souvent vos ressources statiques dans le répertoire src/main/resources/static/. Vous pouvez bien sûr créer des sous-répertoires à l'intérieur de static/ pour organiser vos fichiers, par exemple :

  • src/main/resources/static/css/
  • src/main/resources/static/js/
  • src/main/resources/static/images/
  • src/main/resources/static/fonts/

La simple présence de fichiers dans ces répertoires suffit pour que Spring Boot les serve.

Comment référencer le contenu statique dans vos vues (Thymeleaf)

Une fois vos fichiers statiques placés au bon endroit, vous devez y faire référence dans vos templates HTML (par exemple, avec Thymeleaf) pour que le navigateur puisse les charger. Il est fortement recommandé d'utiliser les expressions d'URL de Thymeleaf (syntaxe @{...}) pour générer les liens corrects, car cela prend en compte le contexte de l'application si nécessaire.

Exemple :

Supposons la structure suivante :

src/
└── main/
    └── resources/
        ├── static/
        │   ├── css/
        │   │   └── style.css
        │   ├── js/
        │   │   └── main.js
        │   └── images/
        │       └── logo.png
        └── templates/
            └── home.html

Dans votre fichier home.html, vous feriez référence à ces ressources comme suit :




    
    Ma Page d'Accueil

    
    


    

Bienvenue !

Logo de l'entreprise

Contenu de la page...

Notez que les chemins dans @{...} commencent par / et sont relatifs à la racine des répertoires statiques (/static/, /public/, etc.). Spring Boot se chargera de mapper la requête pour /css/style.css au fichier src/main/resources/static/css/style.css.

Vous pouvez également accéder directement à ces fichiers via leur URL dans le navigateur, par exemple : http://localhost:8080/css/style.css ou http://localhost:8080/images/logo.png (en supposant que votre application tourne sur le port 8080).

Personnaliser les emplacements et le comportement

Bien que les emplacements par défaut soient souvent suffisants, vous pouvez les personnaliser si nécessaire via les propriétés de configuration dans application.properties ou application.yml.

La propriété clé est spring.web.resources.static-locations. Elle accepte une liste de chemins (préfixés par classpath: pour le classpath ou file: pour le système de fichiers) où Spring Boot doit rechercher les ressources statiques. Si vous définissez cette propriété, elle remplace les emplacements par défaut. Pour les ajouter aux emplacements par défaut, vous devez réinclure explicitement ces derniers.

Exemple (application.properties) :

# Remplace les emplacements par défaut pour servir depuis /my-static/
# spring.web.resources.static-locations=classpath:/my-static/

# Ajoute /my-static/ aux emplacements par défaut (recommandé si vous ajoutez)
spring.web.resources.static-locations=classpath:/META-INF/resources/,classpath:/resources/,classpath:/static/,classpath:/public/,classpath:/my-static/

D'autres propriétés permettent de contrôler la mise en cache des ressources statiques (spring.web.resources.cache.*) ou d'activer des stratégies de versioning des ressources (spring.web.resources.chain.*) pour une meilleure gestion du cache par les navigateurs. Par défaut, Spring Boot applique déjà une stratégie de cache raisonnable (basée sur le contenu ou la date de modification).

Conclusion : la simplicité du statique avec Spring Boot

Servir du contenu statique est une tâche fondamentale pour toute application web. Spring Boot simplifie grandement ce processus en adoptant une approche basée sur les conventions et l'auto-configuration. En plaçant simplement vos fichiers CSS, JavaScript, images et autres ressources dans des répertoires standard comme src/main/resources/static/, ils deviennent immédiatement accessibles à vos utilisateurs et peuvent être facilement référencés depuis vos templates. Cette simplicité, combinée aux options de personnalisation disponibles, fait de la gestion du contenu statique un aspect agréable du développement avec Spring Boot.