2016-11-23 1 views
0

Я разрабатываю webapp используя Spring 4.3.4 + Spring MVC + Thymeleaf 3.0.2. Кстати, я еще не интегрировал Spring Security, поэтому нет никакой политики безопасности.Spring MVC 4 + Thymeleaf: static resources 404 error

Проблема проста: статические ресурсы не загружаются в браузере (ошибка 404).

Это моя структура папок проекта, что является стандартной структурой Maven (я положил статические ресурсы на /SRC/основные/ресурсы/статические, но я также пытался /SRC/главная/веб-приложение/ или /SRC/главная/веб-приложение/WEB-INF/):

enter image description here
И это, к примеру, как я связываю CSS на своих страницах (поверьте мне, файл /src/main/resources/static/assets/css/style.css действительно существует):

<link th:href="@{/assets/css/style.css}" type="text/css" /> 

Насколько я знаю, что не должен нуждаться в ResourceHandler для обработки содержимого на /ЦСИ/Главная/resourcess/статические/активы/, которые уже должны быть доступны на /активы/, но он не работает, так что в моей конфигурации Spring Java Я также сделал также несколько попыток, как:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    registry.addResourceHandler("classpath:/static/assets/**").addResourceLocations("/assets/"); 
    registry.addResourceHandler("classpath:/static/pages/**").addResourceLocations("/pages/"); 
} 

В любом случае файлы CSS и JS недоступны.

Мой диспетчеру сервлета отображается в корень /:

<servlet-mapping> 
    <servlet-name>myappDispatcherServlet</servlet-name> 
    <url-pattern>/</url-pattern> 
</servlet-mapping> 

Если я осмотреть HTML в браузере, я могу видеть, что выше тег становится:

<link href="/myapp/assets/css/style.css" rel="stylesheet" type="text/css"> 

, который выглядит очень правильно для меня, правильно?

Итак, почему я получаю ошибку 404, если я пытаюсь получить доступ к css? Я забываю что-то важное?

Спасибо,
Лука

ответ

1

Чтобы решить эту проблему, мне нужно, чтобы изменить структуру папок, перемещение статических ресурсов в /webapp/ папка.Я уверен, что есть способ, чтобы оставить CSS и JS в /ресурсы/ папки, но я не заставить его работать, так что это моя новая структура папок:

enter image description here

Тогда я поставил отображение обработчика ресурсов:

@Override 
public void addResourceHandlers(ResourceHandlerRegistry registry) { 
    super.addResourceHandlers(registry); 
    registry.addResourceHandler("/assets/**").addResourceLocations("/assets/"); 
} 

и это ссылка тег, используемый в шаблоне HTML (который работает как для динамической и статической нагрузки на странице):

<link th:href="@{/assets/css/style.css}" href="../../assets/css/style.css" rel="stylesheet" type="text/css" /> 
0

отображения обработчиков удалить ресурс,

затем изменить

<link th:href="@{/assets/css/style.css}" href="../static/assets/css/style.css" type="text/css" /> 
+0

Я уже пробовал с и без сопоставлений обработчиков ресурсов, и результат тот же. Кроме того, ваш тег похож на мой, за исключением добавления атрибута _href_, который будет игнорироваться движком thymeleaf во время рендеринга представления (это может повлиять только при открытии шаблона .html статически). – Dolfiz