【问题标题】:Spring Boot Static ResourcesSpring Boot 静态资源
【发布时间】:2016-10-01 14:12:09
【问题描述】:

我正在尝试使用 Mvc 和 AngularJs 创建一个 Spring Boot。我修改了我的应用程序的 View Resolver,以便我可以将我的应用程序指向我的静态 html 文件的“WEB-INF/pages/”文件夹。现在在 html 文件中,我使用 webjars 依赖项声明了 AngularJs 库的源代码

<script src="webjars/angularjs/1.5.5/angular.min.js"></script>

我知道为了完成这项工作,我必须在应用程序的 ResourceHandlerRegistry 上声明 webjars libray 的类路径,所以在我的配置文件中我只添加了这行代码

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

添加此行后,我的代码以某种方式工作,但让我好奇的是我的 html 文件中的这一行

<script src="resources/js/angular/app.js"></script>

我注意到在 Spring MVC 应用程序上,为了让 Spring 检测 webapp 资源文件夹下的 Javascript 文件,我们必须像这样在 ResourceHandlerRegistry 上声明该文件夹

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

但我没有在 Spring Boot 的 ResourceHandlerRegistry 上声明我的 webapp 的资源文件夹,但应用程序仍然可以看到我的 app.js 文件,并且我的 AngularJs 代码仍然有效。这是我的应用程序的文件结构

src |--main |--java |--resources |--webapp |--resources |--js |--angular |--app.js |--WEB-INF |--index.html

【问题讨论】:

    标签: javascript java spring spring-mvc spring-boot


    【解决方案1】:

    这就是 Spring Boot Web 的静态工作原理。默认情况下,你应该把你的 js,image,css 放在 resources/static 中。如果您使用的是 thymeleaf,请将模板放入资源中。示例如下。

    这就是你的调用方式,注意 ../.. 实际上转到 /resources :

    <!DOCTYPE HTML>
    <html xmlns:th="http://www.thymeleaf.org">
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
        <link rel="stylesheet" th:href="@{/css/bootstrap.min.css}"
        href="../../css/bootstrap.min.css" />
        <link rel="stylesheet" th:href="@{/css/signin.css}"
        href="../../css/signin.css" />
    </head>
    

    OP 给出文件结构后的更新: 位于 webapp/resources 的资源是 spring mvc 的默认静态文件夹(不是 spring boot - 请参阅 this blog )。

    spring boot 的静态文件夹位于(参考Spring IO Blog):

    • /META_INF/resources
    • /静态
    • /资源
    • /公共

    【讨论】:

    • 我编辑了我的问题以进行澄清,我没有在我的应用程序中使用 thymleaf 并创建了一个 webapp 文件夹。我指的资源文件夹是webapp文件夹下的那个,而不是src/main/resources下的资源文件夹
    • 哼哼......这很奇怪。 Spring boot 已知的默认静态文件夹为 /META-INF/resources/、/resources、/static 和 /public ... 参考spring.io/blog/2013/12/19/…
    • 我找到了答案,webapp/resources 是 spring mvc 默认静态文件夹,而不是 spring boot 的。参考:mkyong.com/spring-mvc/…
    • @anathema 你的问题解决了吗?如果是,请接受答案。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 2017-11-02
    相关资源
    最近更新 更多