Permitir que el motor de plantillas FreeMarker de Apache para cargar plantillas de la carpeta de recursos externos

Shivam Naik:

He creado una aplicación de inicio de primavera utilizando Spring Initilizr. A continuación, he incluido Apache's Freemarkerun motor de plantillas para cargar las plantillas de mi proyecto. El motor de cargas por defecto plantillas a partir de: src/main/resources/templates/carpeta.

Estoy tratando de cargar un simple index.ftlarchivo como plantilla cuando el usuario visita la página web http://localhost:8080. Pero necesito para cargar las plantillas de src/main/webapp/carpeta. Cada vez que intento cargar las plantillas desde fuera del resourcescarpeta, el motor de plantillas no puede encontrar las plantillas.

He pasado por varios tutoriales y preguntas desbordamiento de pila. Ninguna responde a mi pregunta y estoy atascado con una 404 ERRORya que el motor no es capaz de encontrar los archivos.

La estructura del archivo es:

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

Después de un montón de excavación, me encontré con un post donde sugirieron cambiar la ubicación donde el motor de plantillas busca en los archivos. Se sugirió añadir siguientes líneas en application.properties:

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

Esto no parece funcionar en absoluto.

Estoy tratando de resolver la página índice simple cuando visita la página web en http: // localhost: 8080 . He escrito siguiente código para el mapeo de la petición HTTP en ViewController.java:

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

Ni idea de si estoy totalmente hacerlo mal o me he perdido algo de configuración.

user2683814:

A partir de documentos de la primavera:

No utilice el directorio / webapp src / main si su aplicación se empaqueta como un frasco. A pesar de que este directorio es un estándar común, sólo funciona con el empaquetado guerra, y se ignora silenciosamente por la mayoría de herramientas de construcción cuando se genera una guerra.

src/main/webapp se asocia con el archivo web y se empaquetarán por plugin de maven guerra cuando se genera la guerra.

Suponiendo que necesite un lugar separado para mantener las plantillas FTL y que todavía desea paquete como frasco que podría seguir los pasos siguientes.

Agregue la entrada de recursos en la construcción en el archivo de modo pom recurso de plugin puede copiar ese directorio a la ruta de clase.

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

Cambiar la ruta del cargador para leer desde la raíz de la ruta de clases.

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

Si su único para las plantillas FTL que cambiaría el directorio para src/main/ftlsevitar confusión y actualizar la misma en los recursos.

ACTUALIZAR

En realidad quería construir un paquete de implementación GUERRA

Usted tiene que utilizar el plugin una guerra a otra estructura. Añadir el plugin y cambiar el envase a la guerra en POM.

Más acerca del despliegue tradicional: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=226393&siteId=1
Recomendado
Clasificación