Spring Boot应用程序不提供静态内容

Joh*_*rge 8 java configuration spring spring-mvc spring-boot

我正在使用Spring Boot,并且尝试在部署时使我的静态资源(CSS,JS,Fonts)可用.您可以从https://github.com/joecracko/StaticResourceError查看或克隆源代码.

现在我的CSS,JS和Font文件对我部署的网站不可见.

这是我的项目目录结构:

这是我的项目目录结构

这是已编译JAR的根目录:我向您保证文件存在于各自的文件夹中.

在此输入图像描述

这是我看到的网络错误:

在此输入图像描述

以下是我的Chrome工具提供的资源.请注意,bar.css在此处显示为空.您可以查看我的源代码,看它是不是空的.

在此输入图像描述

这是我的homepage.html

<html xmlns:th="http://www.thymeleaf.org">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
<title>Insert title here</title>

<!-- Main Styles -->
<link rel="stylesheet" href="/css/bar.css" />
<script src="/js/foo.js"></script>

</head>
<body>
    <div>Welcome to Foo!</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

这是我的Web App Initializer(FooWebAppInitializer.java)

public class FooWebAppInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext container) {

        AnnotationConfigWebApplicationContext rootContext = new AnnotationConfigWebApplicationContext();
        rootContext.register(ServletConfig.class);

        // Manage the lifecycle of the root application context
        container.addListener(new ContextLoaderListener(rootContext));

        //Spring Security
        container.addFilter("springSecurityFilterChain", new DelegatingFilterProxy("springSecurityFilterChain"))
            .addMappingForUrlPatterns(null, false, "/*");

        // Register and map the dispatcher servlet
        ServletRegistration.Dynamic dispatcher = container.addServlet("dispatcherServlet", new DispatcherServlet(rootContext));
        dispatcher.setLoadOnStartup(1);
        dispatcher.addMapping("/*");
        dispatcher.addMapping("*.css");
        dispatcher.addMapping("*.eot");
        dispatcher.addMapping("*.svg");
        dispatcher.addMapping("*.ttf");
        dispatcher.addMapping("*.woff");
        dispatcher.addMapping("*.map");
        dispatcher.addMapping("*.js");
        dispatcher.addMapping("*.ico");
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的Servlet配置(ServletConfig.java)

@Configuration
@EnableWebMvc
@ComponentScan({"com.foo"})
public class ServletConfig extends WebMvcAutoConfiguration{

    @Bean
    MultipartResolver multipartResolver() {
        return new StandardServletMultipartResolver();
    }

    @Bean
    public ResourceBundleMessageSource messageSource() {
        ResourceBundleMessageSource source = new ResourceBundleMessageSource();
        source.setBasename("messages");
        return source;
    }
}
Run Code Online (Sandbox Code Playgroud)

对于踢,My Spring Security Config(WebSecurityConfig.java)

@Configuration
@EnableWebMvcSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .anyRequest().permitAll();
    }

    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring().antMatchers("/resources/**"); // #3
    }
}
Run Code Online (Sandbox Code Playgroud)

And*_*rea 16

静态资源放在目录下:

/src/main/resources/static
Run Code Online (Sandbox Code Playgroud)

您也可以使用publicresources代替static文件夹名称.

说明:您的构建工具(Maven或Gradle)将复制/src/main/resources/应用程序类路径中的所有内容,并且如Spring Boot的文档中所述,类路径中名为/static(或/public/resources)的目录中的所有内容都将作为静态内容提供.


这个目录也可以,但不鼓励:

/src/main/webapp/
Run Code Online (Sandbox Code Playgroud)

如果您的应用程序将打包为jar,请不要使用src/main/webapp目录.虽然这个目录是一个通用标准,但它只适用于war包装,如果你生成一个jar,它将被大多数构建工具默默忽略.