javascript - Spring Boot 静态资源

标签 javascript java spring spring-mvc spring-boot

我正在尝试使用 Mvc 和 AngularJs 创建 Spring Boot。我修改了应用程序的 View 解析器,以便我可以让应用程序在“WEB-INF/pages/”文件夹中查找静态 html 文件。现在,在 html 文件中,我使用 webjars 依赖项声明了 AngularJs 库的来源

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

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

@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 检测到 web 应用程序资源文件夹下的 Javascript 文件,我们必须在 ResourceHandlerRegistry 上声明该文件夹,就像这样

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

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

源代码 |--主要 |--java |--资源 |--网络应用 |--资源 |--js |-- Angular |--app.js |--WEB-INF |--index.html

最佳答案

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

enter image description here

这就是你的调用方式,请注意../..实际上转到/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/资源
  • /静态
  • /资源
  • /公共(public)

关于javascript - Spring Boot 静态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37581710/

相关文章:

java - 在 Spring MVC 中获取 HTTP 请求参数

java - 从 Spring 2.5.6 升级到 3.2.6 导致 Spring Transaction Management 不再适用于 JBoss 5.1.0 和 Hibernate 3.5.6

java - 我的@component 有什么问题吗?

spring - 在 Spring 中提供静态内容 - 为什么我们有 addResourceHandler 时还需要 addResourceLocations 方法?

javascript - 提交隐藏表单 HTML

javascript - 在javascript中将十六进制转换为二进制

javascript - jQuery 追加 html 元素

javascript - 将 div 置于事件选择框的顶部

java - 无法将 src/main/java 类导入到 maven-spring-web 项目中的 src/test/java jUnit 测试中。 IDE-Eclipse

java - 如果 fragment 事务未完成,应用程序就会崩溃