Java 使用Spring和Thymeleaf的静态资源

Java 使用Spring和Thymeleaf的静态资源,java,spring,spring-mvc,thymeleaf,Java,Spring,Spring Mvc,Thymeleaf,我正在尝试使用以下代码访问HTML上的静态资源: <link th:href="@{css/main.css}" rel="stylesheet" type="text/css" /> mvc配置的Spring上的设置: .... @EnableWebMvc public class WebMvcConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware { private Appli

我正在尝试使用以下代码访问HTML上的静态资源:

<link th:href="@{css/main.css}" rel="stylesheet" type="text/css" />
mvc配置的Spring上的设置:

....
@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();
    }
我正在使用Spring4和Thymeleaf3Beta。我使用的每个css js图像文件都需要在路径上写“static”。如果不写入完整路径,这种编码方式就无法使用。为什么?

registry.addResourceHandler("/static/**").addResourceLocations("/static/");
                             ^^^^^^^^                           ^^^^^^^
                             ----------- These two are different ------       
因为您告诉SpringMVC使用类路径中的
/static
文件夹中的
/static/
路径前缀为每个请求提供服务。因此,当您向
static/css/main.css
发出请求时,它将与您的资源处理程序路径匹配,并将成功地提供服务

我知道当你设置resources文件夹时,你不需要设置 每次调用静态文件时的静态文件夹

我猜你把
/static/**
路径前缀与
/static
文件夹名称混淆了<
{static/css/main.css}
中的code>static引用了您在中定义的
/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

我需要做什么才能在HTML上不设置“static”文件夹。只需设置“css”文件夹,然后应用程序就知道“静态”文件夹在哪里,找到这些文件夹?我只是在想我所说的方法是正确的。我想把资源放在webapps文件夹中。使用带有“静态”目录的路径设置文件也是正确的吗?
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");