STS Spring MVC: comment inclure un fichier JS dans un JSP

J'ai installé SpringSource Tool Suite 2.8.0. J'essaie d'inclure un fichier JS dans un JSP, en utilisant le modèle Spring MVC comme point de départ. Mon JSP ressemble à ceci:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <html> <head> <title>Home</title> <script type="text/javascript" src="/a.js"></script> </head> <body> Hello world! </body> </html> 

A.js est sous src \ main \ resources et ressemble à ceci:

 window.alert("A"); 

Le résultat est que "Bonjour tout le monde!" Est imprimé sans l'alerte 🙁

J'ai essayé de mettre le fichier JS dans différents endroits, en modifiant le src pour être avec / sans "/", et même en ajoutant un servlet-mapping dans web.xml pour utiliser la servlet "par défaut" pour "* .js". Rien ne semble fonctionner.

Qu'est-ce que je fais mal?

    Le fichier js est-il inclus dans votre fichier .war? J'ai habituellement mis js et css dans src / main / webapp. Quelque chose comme src / main / webapp / js et src / main / webapp / css.

    Deuxièmement, vous pouvez le référencer de manière appropriée à l'aide de c: url qui prendra soin de mettre le contexte de l'application sur ce sujet.

     <script type="text/javascript" src="<c:url value="/a.js" />" /> 

    Vous pouvez utiliser les outils de développement de firebug ou de chrome pour voir si vous obtenez un 404 pour a.js et voir quel chemin il demande réellement.

    Je conseille de placer ces fichiers js sous le dossier webapp . (Je les place généralement sous webapp / resources / js )

    Et pour rendre ce chemin accessible, j'utilise la balise mvc: resources :

    Cette balise permet aux demandes de ressources statiques suivant un modèle d'URL particulier d'être desservies par un ResourceHttpRequestHandler à partir d'une liste de sites de ressources. Cela fournit un moyen pratique de fournir des ressources statiques à partir d'autres sites que la racine de l'application Web, y compris les emplacements sur le classpath. La propriété de la période de cache peut être utilisée pour définir des en-têtes d'expiration futurs (1 an est la recommandation d'outils d'optimisation tels que Page Speed ​​et YSlow) afin qu'ils soient plus efficacement utilisés par le client. Le gestionnaire évalue également correctement l'en-tête de dernière modification (si présent) afin qu'un code d'état 304 soit renvoyé selon le cas, en évitant les frais généraux inutiles pour les ressources déjà mises en cache par le client. Par exemple, pour répondre aux demandes de ressources avec un modèle d'URL de / resources / ** à partir d'un répertoire de ressources publiques dans la racine de l'application Web, la balise serait utilisée comme suit:

     <mvc:resources mapping="/resources/**" location="/public-resources/"/> 

    Source: Spring Reference