Проблема с расположением статических файлов Spark-Java

Я вызвал staticfiles.location("/public") из моего основного метода перед любым другим методом искры, и по какой-то причине только один из каталогов в каталоге статических файлов работает с сокращенным путем. Файл в моем каталоге шаблонов "public/templates" должен вызываться с помощью "/public/templates/foo.vtl", однако файлы в моем каталоге CSS "public/css" могут вызываться с помощью "/css/bar.css"

Одна вещь, которую я мог бы отметить, это то, что сокращенный путь к файлу css изначально был в моем файле .java, но теперь находится в одном из моих файлов шаблонов. Он по-прежнему работает из файла шаблона. Почему моя папка шаблонов не распознается в моей общей папке, а моя папка css распознается?

Я использую идею IntelliJ для этого проекта.

Вот мой код, хотя он почти идентичен коду руководства по макету на веб-сайте Spark. У меня была аналогичная проблема с Netbeans несколько недель назад, и переключение IDE, похоже, решило проблему. Возможно, это проблема с тем, что моя IDE не обновляет какой-либо файл ресурсов? Я в тупике! Это не большая проблема, но я предпочитаю знать, почему это не работает, чем оставаться в блаженном неведении.

    public static void main(String[] args) {
    staticFiles.location("/public");
    String layout = "public/templates/layout.vtl";
    //secure("public/keystore.jks", "password", null, null);

    get("/", (req, res) -> {
        HashMap model = new HashMap();
        model.put("template", "public/templates/main.vtl");
        return new ModelAndView(model, layout);
    }, new VelocityTemplateEngine());

    get("/page2", (req, res) -> {
        HashMap model = new HashMap();
        model.put("template", "public/templates/main2.vtl");
        return new ModelAndView(model, layout);
    }, new VelocityTemplateEngine());

Вот изображение моей структуры папок, на случай, если эта путаница текста выше не имеет особого смысла:

введите здесь описание изображения

Изменить: по запросу следующее содержимое моего целевого каталога.

введите здесь описание изображения


person TheFunk    schedule 16.09.2016    source источник
comment
Я бы порекомендовал вам перейти на искру 2.3 и попробовать еще раз. Пожалуйста, дайте мне обратную связь.   -  person Laercio Metzner    schedule 17.09.2016
comment
@Laercio Я понизил версию до spark 2.3 и изменил строку staticFiles.location() на staticFileLocation() в соответствии с документацией 2.3, однако я все еще получаю ту же ошибку 500 при попытке загрузить шаблон с сокращенным путем вместо полного пути из папка ресурсов.   -  person TheFunk    schedule 19.09.2016
comment
TheFunk, Не могли бы вы показать, что у вас есть в целевом каталоге?   -  person Andrew    schedule 21.09.2016
comment
@Andrew Сообщение обновлено :)   -  person TheFunk    schedule 21.09.2016
comment
TheFunk, вы должны использовать templates/main.vtl вместо public/templates/main.vtl (во всех случаях). Попробуйте и напишите, получилось ли.   -  person Andrew    schedule 21.09.2016


Ответы (1)


Вы должны использовать templates/ вместо public/templates/.

Потому что указанное вами расположение интерпретируется как public/public/templates и не существует в вашем целевом каталоге.

Когда вы создаете ModelAndView(model,templatePath), вы указываете неправильное значение из переменной макета (public/templates/layout.vtl). Вы должны установить путь для каждого шаблона. Как в примере ниже.

введите здесь описание изображения

person Andrew    schedule 21.09.2016
comment
Это на самом деле полная противоположность моей проблемы, я думаю. Я пытаюсь установить местоположение своего статического файла, однако система не распознает /templates как допустимый путь. Вместо этого он ТОЛЬКО распознает /public/templates как действительный путь. Интересно, однако, что система распознает /css как допустимый путь, и как эта папка, так и папка шаблонов находятся в общедоступном. - person TheFunk; 21.09.2016
comment
TheFunk, не могли бы вы попробовать запустить свой проект в среде eclipse IDE. И если у вас есть этот код на github, пришлите мне ссылку, я попробую его на IDEA. - person Andrew; 22.09.2016
comment
Спасибо @Andrew, я ценю помощь. Я действительно в тупике здесь. Я бы не спрашивал, если бы сначала не попробовал хотя бы пару вещей. У меня была такая же проблема в Netbeans несколько недель назад, затем я переключился на IDEA, и проблема, похоже, была решена. Мой код доступен здесь - person TheFunk; 22.09.2016
comment
Спасибо, но я думаю, что мне нужно объяснить мою проблему немного лучше. Как вы знаете, приведенный выше код не должен работать. Путь должен указывать на /public/public/templates/whatever.vtl, как вы сказали. Проблема, с которой я сталкиваюсь, заключается в том, что приведенный выше код фактически работает, компилируется и делает именно то, что я хочу. Система игнорирует мою строку staticFileLocation(/public). Что заставило бы его сделать это? - person TheFunk; 26.09.2016
comment
TheFunk, Так у тебя проблема в том, что после запуска приложения во время разработки твои файлы не обновлялись? - person Andrew; 26.09.2016
comment
Я так думаю. В основном строка с надписью staticFileLocation игнорируется. Если я не укажу /public/templates каждый раз, код не запустится. - person TheFunk; 26.09.2016
comment
Если вы укажете staticFileLocation, это означает, что файлы, расположенные в этой папке, доступны для движков просмотра. - person Andrew; 26.09.2016
comment
Не могли бы вы указать, что вы ожидали при запуске кода? Потому что ваша проблема не ясна для меня. - person Andrew; 26.09.2016
comment
Да и папки. Моя папка css находится в общедоступной папке, и на нее ссылаются мои комбинированные шаблоны. Путь к этой папке соответствует местоположению статического файла. Однако папка шаблонов, также расположенная в общедоступной папке, не отвечает на местоположение статического файла. - person TheFunk; 26.09.2016
comment
Я могу ссылаться на CSS, как этот css/menubar.css, однако я могу ссылаться только на такие шаблоны, как этот public/templates/main.vtl - person TheFunk; 26.09.2016
comment
Когда вы указываете путь, вы имеете в виду IDE или путь в браузере? - person Andrew; 26.09.2016
comment
Система игнорирует мою строку staticFileLocation(/public) Вы имеете в виду, что когда вы меняете файлы, вы не видите изменений в браузере? - person Andrew; 26.09.2016
comment
Я воссоздал проект в другой среде IDE (Netbeans) и столкнулся с той же проблемой. - person TheFunk; 26.09.2016
comment
Не могли бы вы пошагово написать, что вы делаете и чего ожидаете в результате? - person Andrew; 26.09.2016
comment
Изменение местоположения статических файлов нарушает мою реализацию css. Из этого мы можем сделать вывод, что файлы, хранящиеся в папке шаблонов, реагируют на то, что установлено местоположение статических файлов. Однако изменение статических файлов не влияет на мой java-файл, в котором определены мои шаблоны (как показано на изображении выше). Неважно, какое местоположение моих статических файлов установлено, остальная часть этого Java-файла выше игнорирует предисловие /public или любой другой путь, к которому я могу установить. - person TheFunk; 26.09.2016
comment
Я должен добавить, что на файл css ссылается один из шаблонов с помощью css/menubar.css, поэтому я знаю, что изменение местоположения статических файлов влияет на пути, указанные в файлах, расположенных в подкаталоге шаблонов. - person TheFunk; 26.09.2016
comment
Итак, я думаю, реальный вопрос в том, почему изменение staticfilelocation не влияет на остальную часть моего java-файла? - person TheFunk; 26.09.2016
comment
Удивительно, я думаю, что я на что-то! Я думаю, что проблема может быть связана с загрузчиком ресурсов пути к классам скорости. У меня такое ощущение, что он ищет в моей папке src/main/java папку с моими шаблонами. - person TheFunk; 26.09.2016