我正在尝试使用以下代码访问HTML上的静态资源:
<link th:href="@{css/main.css}" rel="stylesheet" type="text/css" />
但是当我放@{static/css/main.css}
时就行了。我知道当你设置资源文件夹时,每次调用静态文件时都不需要设置静态文件夹。
我的文件夹结构:
/webapp
=== /static
==========/css
==========/js
=== /WEB-INF
==========/views
在Spring上设置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 beta。我正在使用的每个css-js-image文件都需要在路径上写“静态”。如果没有写完整路径,这种编码方式无法使用。为什么呢?
答案 0 :(得分:3)
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
。
更新:如果您坚持使用css/main.css
作为路径,则应该像这样定义资源处理程序:
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
并将/static/
文件夹放在src/main/resources
。