在spring-boot项目中将静态文件(如CSS)放在何处?

时间:2014-11-27 12:24:48

标签: spring spring-boot

在我目前的spring-boot项目中,我的观点有这一行:

<link href="signin.css" rel="stylesheet"/>

引用静态css文件。当我运行项目并访问引用此文件的其中一个视图时,我得到404未找到错误或403未经授权的错误,这取决于我将文件放在项目中的位置。

我到目前为止尝试了这个:

src/main/resources/static/css (with this, I use css/signin.css instead of signin.css)

src/main/resources/templates/static/css (with this, I use css/signin.css instead of signin.css)

src/src/main/resources/templates/acesso (same folder of the html file)

存储此类文件的正确位置是什么?

11 个答案:

答案 0 :(得分:45)

src/main/resources/static下面的任何地方都适合静态内容,例如CSS,JavaScript和图片。静态目录由/提供。例如,src/main/resources/static/signin.css将从/signin.css投放,而src/main/resources/static/css/signin.css将从/css/signin.css投放。

src/main/resources/templates文件夹适用于视图模板,这些模板将由模板引擎(如Thymeleaf,Freemarker或Velocity等)转换为HTML。您不应将静态内容放在此目录中。

另外请确保您没有在应用程序中使用@EnableWebMvc,因为这将禁用Spring Boot的Spring MVC自动配置。

答案 1 :(得分:4)

停用@EnableWebMvc帮助我解决问题。

答案 2 :(得分:4)

您可以使用Thymeleaf http://www.thymeleaf.org/

实施例

SELECT EXISTS (
   SELECT 1 FROM
      (SELECT data_id,
              backend_status status,
              lag(backend_status) OVER w status_1,
              lag(backend_status, 2) OVER w status_2
         FROM alert_001
         WHERE when_captured > current_timestamp - INTERVAL '1 hour'
         WINDOW w AS (ORDER BY when_captured)
      ) last_three
   WHERE status <> 200
     AND status_1 <> 200
     AND status_2 <> 200
);

请记住在html标记中添加xmlns和xmlns:

检查您的application.properties:

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<head>
    <link rel="stylesheet" th:href="@{/css/signin.css}"/>
</head>
<body>
</body>
</html>

如果该密钥设置为false,则spring boot app将不会加载任何资源。

答案 3 :(得分:3)

除了将其置于src/main/resources/static下方而不使用@EnableWebMvc之外,您还需要授权访问jscss文件夹,特别是如果您有您在类路径中spring-boot-security。您将添加以下内容:

@Configuration
@EnableWebSecurity
public class MainSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home", "/js/**", "/css/**").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
}

然后在你的HTML中:

<link rel="stylesheet"  href="/css/bootstrap.min.css">
<script src="/js/bootstrap.min.js"></script>

答案 4 :(得分:2)

我将Thymeleaf http://www.thymeleaf.org/与Spring-Boot一起使用

这是目录的结构,例如@ {Andy Wilkinson响应

enter image description here

示例

<link rel="stylesheet" href="../static/css/w3.css" th:href="@{/css/w3.css}">

答案 5 :(得分:1)

我发现如果我将signin.css放在src / main / resources / META-INF / resources / static / css / signin.css下,那么我可以使用/css/signin.css访问它

不确定为什么。

答案 6 :(得分:1)

我使用Spring-Boot 2.0.2

我仍然在@EnableWebMvc中保留webConfig.java注释并覆盖addResourceHandlers()方法,以帮助浏览器通过http请求访问css和javascript文件。

这是webapp目录的结构

directory structure

<强> webConfig.java

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "example.com")
public class WebConfig implements WebMvcConfigurer {

    // =======================================
    // =             Bean Config             =
    // =======================================

    @Bean
    public InternalResourceViewResolver getInternalResourceViewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/jsp/");
        resolver.setSuffix(".jsp");

        return resolver;
    }


    // =======================================
    // =          Override Methods           =
    // =======================================

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/pdfs/**")
                .addResourceLocations("/WEB-INF/pdfs/");

        registry.addResourceHandler("/css/**")
                .addResourceLocations("/WEB-INF/css/");

        registry.addResourceHandler("/js/**")
                .addResourceLocations("/WEB-INF/js/");
    }
}

index.jsp head tag:

<head>
    <title>Title</title>

    <!-- Custom styles for this template -->
    <link href="css/cover.css" rel="stylesheet">
</head>
希望它可以帮到你。

答案 7 :(得分:0)

在我的情况下,引用css和js文件夹中的文件,如下所示:

for (Part part : req.raw().getParts()) {
  try (InputStream stream = part.getInputStream()) {
    String filename = part.getSubmittedFileName();
    // save the input stream to the filesystem, and the filename to a database
  }
}

我必须将文件夹放在webapp文件夹中。 我有以下文件夹结构:

MYAPP

<script src="js/bootstrap.min.js"></script>
<link href="css/bootstrap.min.css" rel="stylesheet">
<link href="css/carousel.css" rel="stylesheet">

我的意思是,如果我将css和js文件夹放在资源文件夹中(在main下),那就是:

-src
     -main
           -java
           -resources
                    -static
                    -templates
           -webapp
                  -resources
                  -WEB-INF

如果我将它们放在静态文件夹中(在资源下)它不起作用。

答案 8 :(得分:0)

当我使用时:

src/main/resources/static/css.

我的观点有这一行:

<link rel="stylesheet" href="/css/signin.css" />

答案 9 :(得分:0)

  • src / resource / static / css
  • src / resource / static / js
  • src / resource / static / images

如果使用Spring Boot并检查Spring安全性,请不要使用@EnableWebMvc。

答案 10 :(得分:0)

将所需文件放在 spring boot 中的静态文件夹中。然后就可以直接访问jsp里面需要的文件了。

希望它对我有用。