Autoriser le moteur de template FreeMarker Apache pour charger des modèles à partir du dossier des ressources extérieures

Shivam Naik:

J'ai créé une application Boot Spring avec Spring Initilizr. J'inclus puis Apache's Freemarkermoteur de modèle pour charger les modèles de mon projet. Le moteur en charge par défaut des modèles à partir de : src/main/resources/templates/dossier.

Je suis en train de charger d' un simple index.ftlfichier en tant que modèle lorsque l'utilisateur visite la page Web http://localhost:8080. Mais je dois charger les modèles de src/main/webapp/dossier. Chaque fois que je tente de charger les modèles de l' extérieur du resourcesdossier, le moteur de modèle ne parvient pas à trouver les modèles.

Je suis passé par différents tutoriels et des questions Stack Overflow. Aucune répondu à ma question et je suis coincé avec 404 ERRORparce que le moteur ne parvient pas à trouver les fichiers.

La structure du fichier est:

|-src
|---main
|-----java
|-------MainApplication.java
|-------controllers
|---------ViewController.java
|-----resources
|-------static
|-------templates
|-------application.properties
|-----webapp
|-------index.ftl

Après beaucoup de creuser, je suis tombé sur un poste où ils ont suggéré de modifier l'emplacement où le moteur modèle recherche les fichiers. Il a suggéré d'ajouter les lignes suivantes dans application.properties:

spring.freemarker.enabled=true
spring.freemarker.template-loader-path=classpath:src/main/webapp/

Cela ne semble pas fonctionner du tout.

Je suis en train de résoudre la page d'index simple quand je visite la page Web à l' adresse http: // localhost: 8080 . J'ai écrit le code suivant pour la cartographie de la requête HTTP ViewController.java:

@RequestMapping("/")
public ModelAndView home(Model model)
{
    return new ModelAndView("index");
}

Aucune idée si je suis tout à fait se tromper ou je l'ai raté une configuration.

user2683814:

Du printemps docs:

Ne pas utiliser le répertoire src / main / webapp si votre application est emballé comme un pot. Bien que ce répertoire est une norme commune, il fonctionne uniquement avec l'emballage de la guerre, et il est ignoré en silence par la plupart des outils de construction lors de la génération d'une guerre.

src/main/webapp est associée à des archives web et seront emballés par plug-in de guerre maven lors de la génération de la guerre.

En supposant que vous avez besoin d'un autre endroit pour garder les modèles FTL et vous souhaitez tout de même paquet que pot, vous pouvez suivre les étapes ci-dessous.

Ajoutez l'entrée de ressources dans la construction dans le fichier pom si plugin ressource peut copier ce répertoire à classpath.

<build>
    <resources>
      <resource>
         <directory>src/main/webapp</directory>
     </resource>
    <resources>
<build>

Modifiez le chemin du chargeur pour lire la RACINE de classpath.

spring.freemarker.template-loader-path=classpath:

Si son seul pour les modèles FTL je changerais le répertoire src/main/ftlspour éviter toute confusion et mettre à jour les mêmes dans les ressources.

MISE À JOUR

Je voulais en fait de construire un package de déploiement WAR

Vous devez utiliser le plugin guerre à la guerre de construction. Ajouter le plugin et changer l'emballage à la guerre en pom.

En savoir plus sur le déploiement traditionnel: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

Je suppose que tu aimes

Origine http://43.154.161.224:23101/article/api/json?id=226391&siteId=1
conseillé
Classement