Разрешить движку шаблонов Apache FreeMarker загружать шаблоны из папки Resources - PullRequest
6 голосов
/ 09 июля 2019

Я создал Spring Boot Application, используя Spring Initilizr. Затем я включил Apache's Freemarker шаблонизатор для загрузки шаблонов из моего проекта. Движок по умолчанию загружает шаблоны из папки src/main/resources/templates/.

Я пытаюсь загрузить простой index.ftl файл в качестве шаблона, когда пользователь заходит на веб-страницу http://localhost:8080. Но мне нужно загрузить шаблоны из папки src/main/webapp/. Всякий раз, когда я пытаюсь загрузить шаблоны из папки resources, механизм шаблонов не может найти шаблоны.

Я прошел различные уроки и вопросы переполнения стека. Никто не отвечает на мой вопрос, и я застрял с 404 ERROR, потому что движок не может найти файлы.

Структура файла:

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

После долгих поисков я наткнулся на сообщение, в котором предлагалось изменить местоположение, где механизм шаблонов ищет файлы. Он предложил добавить следующие строки в application.properties:

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

Кажется, это не работает вообще.

Я пытаюсь разрешить простую страницу индекса, когда захожу на страницу http://localhost:8080. Я написал следующий код для сопоставления HTTP-запроса в ViewController.java:

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

Понятия не имею, правильно ли я все понял или пропустил какую-то конфигурацию.

Ответы [ 2 ]

1 голос
/ 12 июля 2019

Из документов Spring:

Не используйте каталог src / main / webapp, если ваше приложение упаковано в jar-файл.Хотя этот каталог является общепринятым стандартом, он работает только с упаковкой военных файлов и игнорируется большинством инструментов сборки при создании войны.

src/main/webapp связан с веб-архивом и будетупакован плагином maven war, когда вы генерируете войну.

Если вам требуется отдельное место для хранения шаблонов ftl, и вы все равно хотите упаковать его как jar, вы можете выполнить следующие шаги.

Добавьтезапись ресурса в файле сборки в pom, чтобы плагин ресурса мог скопировать этот каталог в classpath.

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

Измените путь загрузчика для чтения из ROOT classpath.

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

Если это только для шаблонов ftl, я бы изменил каталог на src/main/ftls, чтобы избежать путаницы и обновлениято же самое в ресурсах.

ОБНОВЛЕНИЕ

Я действительно хотел создать пакет развертывания WAR

Вы должны использоватьПлагин войны, чтобы построить войну.Добавьте плагин и измените упаковку для войны в пом.

Подробнее о традиционном развертывании: https://docs.spring.io/spring-boot/docs/current/reference/html/howto-traditional-deployment.html#howto-create-a-deployable-war-file

0 голосов
/ 12 июля 2019

EDIT

Во встроенном tomcat вы можете определить статический путь к ресурсам в application-properties

 spring.mvc.static-path-pattern=

Если вы внедряете в tomcat, в tomcat вы можете определить внутри server.xml статический контекст , который может содержать файлы freemarker, как

 <Context docBase="/home/stuff" path="/static" />

Элемент <Context> добавлен внутрь элемента <Host>. Контекст имеет два атрибута: docBase - это каталог на диске, содержащий ваши статические файлы, а path - это URL-адрес, по которому вы хотите предоставить файлы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...