2016-02-21 2 views
4

Я пытаюсь получить доступ к моим статическим ресурсам на моем HTML, используя следующий код:Статические ресурсы с использованием Spring и Thymeleaf

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

Но только работает, когда я ставлю @{static/css/main.css}. Я знаю, что когда вы устанавливаете папку ресурсов, вам не нужно устанавливать статическую папку каждый раз при вызове статического файла.

Моя структура папок:

/webapp 
=== /static 
==========/css 
==========/js 
=== /WEB-INF 
==========/views 

Установка на весну Mvc конфиги:

.... 
@EnableWebMvc 
public class WebMvcConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { 

    private ApplicationContext applicationContext; 

    @Bean 
    public ViewResolver viewResolver() { 
     ThymeleafViewResolver resolver = new ThymeleafViewResolver(); 
     resolver.setTemplateEngine(templateEngine()); 
     resolver.setCharacterEncoding("UTF-8"); 
     return resolver; 
    } 

    private TemplateEngine templateEngine() { 
     SpringTemplateEngine engine = new SpringTemplateEngine(); 
     engine.setTemplateResolver(templateResolver()); 
     return engine; 
    } 

    private ITemplateResolver templateResolver() { 
     SpringResourceTemplateResolver resolver = new SpringResourceTemplateResolver(); 
     resolver.setApplicationContext(applicationContext); 
     resolver.setPrefix("/WEB-INF/views/"); 
     resolver.setSuffix(".html"); 
     resolver.setCacheable(false); // On production , turn TRUE 
     resolver.setTemplateMode(TemplateMode.HTML); 
     return resolver; 
    } 

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

    @Override 
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) { 
     configurer.enable(); 
    } 

Я использую Spring 4 и Thymeleaf 3 бета. Каждый файл css-js-image, который я использую, мне нужно написать «static» на пути. Этот код, который закодирован, не работает, чтобы не писать полный путь. Зачем?

ответ

2
registry.addResourceHandler("/static/**").addResourceLocations("/static/"); 
          ^^^^^^^^       ^^^^^^^ 
          ----------- These two are different ------  

Потому что вы говорите, Spring MVC, чтобы служить каждый запрос с префиксом /static/ пути из /static папки в вашем пути к классам. Поэтому, когда вы запускаете запрос на static/css/main.css, он будет сопоставляться с вашим пути обработчика ресурсов и будет успешно выполнен.

Я знаю, что когда вы устанавливаете папку ресурсов, вам не нужно устанавливать статическую папку каждый раз при вызове статического файла.

Я думаю, ты путаешь префикс /static/** путь с /static именем папки. static в @{static/css/main.css} ссылается на /static/** пути приставкой вы определили в:

registry.addResourceHandler("/static/**")... 

не имя папки в:

...addResourceLocations("/static/") 

Например, если вы определили свой обработчик ресурсов, как следующее:

registry.addResourceHandler("/content/**").addResourceLocations("/static/"); 

Затем вы должны отправить свой запрос, скажем, content/css/main.css.

Update: Если вы настаиваете, чтобы использовать css/main.css в качестве пути, вы должны определить свой обработчик ресурсов, как это:

registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); 

А также поместить папку /static/ в src/main/resources.

+0

Что мне нужно сделать, чтобы не установить «статическую» папку на мой HTML. Просто установите папку «css», а затем приложение знает, где находится «статическая» папка, находя эти папки? –

+0

См. Обновление ... –

+0

Я просто думал, что путь, которым я грустил, был правильным. Я хочу поместить ресурсы в папку webapps. Его также правильно установить файлы, используя путь с «статическим» каталогом? –

Смежные вопросы