【问题标题】:Spring Boot not loading static resourcesSpring Boot不加载静态资源
【发布时间】:2016-12-10 18:30:21
【问题描述】:

关于 spring boot 没有加载静态资源并且已经阅读了所有(几乎)我仍然无法解决这个问题。在这个阶段,我选择不使用 spring boot,但我仍然想知道问题出在哪里。我正在使用 Eclipse、Java 8 和 Maven。

我有一个如下所示的应用程序类:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(Application.class);
    }

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }
}

我创建了一个 css 文件 - src/main/resources/static/style.css 并从一个jsp引用了这个:

<link href="<c:url value='style.css'/>" rel="stylesheet">

页面加载但不是 css。这是错误 - 405 Method Not Allowed

我认为认为是正确的,但不确定。感谢所有帮助。

根据下面的一些 cmets,这就是现在的样子。

我的jsp文件在src/main/resources/application.properties中配置如下:

spring.mvc.view.prefix:/WEB-INF/views/
spring.mvc.view.suffix:.jsp

我的jsp很简单,位于/WEB-INF/views/home.jsp

<!DOCTYPE html>
<%@ page pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <link href="public/style.css" rel="stylesheet" type="text/css"/>
</head>
<body>
    <p>Hello world!</p>
</body>
</html>

我也尝试过像这样链接我的 css 文件:

<link href="style.css" rel="stylesheet" type="text/css"/>

我的css文件,位于webapp/public/style.css,也很简单

p {
    color: red;
}

我的 jsp 加载但不是 css。 我使用各种方法运行我的应用程序,包括:

从命令行 - java -jar contacts.jar

在 Eclipse 中 - mvn spring-boot:run 和 mvn tomcat7:run-war 同样在 Eclipse 中,通过右键单击 Application.class 文件并选择 运行方式 -> Java 应用程序。

我正在使用 Spring Boot 版本 1.4.0.RELEASE

【问题讨论】:

  • 您的静态文件在哪里? src/main/resources ?
  • 向我们展示您的jsp 文件是如何配置的?并且确定没有其他静态文件配置?
  • 你的 style.css 是单引号的。也许你应该试试双引号。
  • 我在上面添加了一些附加信息
  • 您找到解决方案了吗?我很惊讶这个简单的事情没有得到回答。我现在讨厌 Spring 和 Java 生态系统,因为它太臃肿了,甚至连简单的事情都很难做到。

标签: java spring spring-mvc spring-boot


【解决方案1】:

CSS 位置

将css等静态资源放在src/main/resources之外,用于属性文件等应用程序资源。

我总是把css文件放在src/main/webapp/assets/css文件夹下。

配置

我使用的是Java config而不是XML,下面的sn-p告诉你如何配置spring boot来识别和查找css。

@EnableWebMvc
@Configuration
public class WebConfig extends WebMvcConfigurerAdapter implements ApplicationContextAware{    

    // view resolver and other confugurations ommitted...

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

访问 css

&lt;link href="&lt;c:url value="/assets/css/style.css" /&gt;" rel="stylesheet"&gt;

【讨论】:

  • 在使用 Spring Boot 时,这些都不是必需的,尤其是 @EnableWebMvc,它将关闭 Boot 对 Spring MVC 的自动配置
  • @Minjun.Y 这个断言对于 Spring MVC 项目是正确的。不适用于 springboot。
  • @AndyWilkinson 感谢您的澄清。我并不完全理解这个主题上的 spring-boot 是如何工作的,只是试图提供一些对我有用的东西。现在我学会了。
  • @Georgesvanhoutte 同意。谢谢。
【解决方案2】:

假设您没有禁用 WebMvcAutoConfiguration

webapp 目录中创建 public 文件夹

在你JSP页面上

<link href="public/style.css" rel="stylesheet" type="text/css"/>

假设你 style.csspublic 文件夹中 即 webapp &gt; public &gt; styles.css

Here's a docs describing the how to use static content in much more detail.

【讨论】:

  • 你能添加你的文件夹结构吗
【解决方案3】:

默认情况下,Spring Boot 将从名为 src/main/resources/static(或 /public 或只是 /resources 的目录中提供静态内容> 或 /META-INF/resources) 。创建项目时,Spring Boot 会自动提供 src/main/resources 下的静态文件夹。因此,我将所有静态资源都存储在静态文件夹中。
在你的情况下,我会在这些文件夹中的每一个中放置一个 style.css 文件,并通过一个一个地删除它们来开始调试过程,直到......你知道。

Source:

【讨论】:

  • 那么你的类补丁不在你的IDE中。必须在您的 C 盘中的某个位置。找到一种将类路径导入 eclipse 的方法。
【解决方案4】:

尝试使用不是 GET 的 http 方法查找具有 RequestMapping 的控制器,即接受您的 style.css 请求。这可以是任何没有“值”的请求映射。

当我从码头搬到弹簧靴时,这发生在我身上。在旧的码头解决方案中,静态内容由不同的 servlet 提供。

【讨论】:

    【解决方案5】:

    我很难将我的静态资源连接到我的 jsp 页面,这就是我最终用来让它与 Spring boot 2.0 一起工作的方法。您可以看到我的属性以及映射到静态资源(如图像或纯 html)时 url 的样子。

    接下来,我们需要在 application.properties 中为我们的 JSP 文件定义模板前缀和后缀。因此添加:

    spring.mvc.view.prefix=/WEB-INF/jsp/
    spring.mvc.view.suffix=.jsp
    server.servlet.context-path=/pdx
    

    http://localhost:8080/pdx/images/thedocks.jpg 访问 src/main/resources/static/images/thedocks.jpg 中的静态资源

    http://localhost:8080/pdx/src/main/resources/static/index.html

    中加载 index.html

    http://localhost:8080/pdx/css/home.csssrc/main/resources/static/css/home.css中加载css类

    http://localhost:8080/pdx/h 使用 @Controller("/") 和 @GetRequest("/h") 注释加载我的家庭控制器。

    我的jsp页面像这样加载静态图片

    <img alt="the docks" src="/pdx/images/thedocks.jpg"/>
    

    【讨论】:

      【解决方案6】:

      在你的 application.properties 文件中添加:

      spring.mvc.static-path-pattern=/resources/**
      

      并确保所有静态文件都在 src/main/resources/static/{css,js,other files} 目录中。

      要获取 CSS 文件,请像这样使用 spring uri --->

      <spring:url var="css" value="/resources/css"/>
      

      然后像这样链接它

      <link href="${css}/bootstrap.min.css" rel="stylesheet">
      

      【讨论】:

        【解决方案7】:

        由于原始问题中提到了 Eclipse,因此我将链接到这个问题:Java class getResource() with eclipse

        从 Eclipse 运行 spring boot jar 时,有时正确的配置将不起作用。 这可以通过添加“main\resources”文件夹来手动运行配置类路径来解决(“运行配置”->“类路径选项卡”->“用户条目”)

        【讨论】:

          最近更新 更多