使用 Spring Boot 提供静态 Web 内容

工程 | Roy Clarkson | 2013 年 12 月 19 日 | ...

最近我们发布了一些关于 Spring 入门指南的公告,包括指南目录已迁移到 Asciidoctor。我们还添加了几个新的客户端指南,说明了如何从各种客户端技术连接到 Spring 服务。

在这篇文章中,我想重点介绍 Spring Boot 的一个有趣功能;在许多客户端指南中,我们使用 Spring Boot 启动 Tomcat 实例并提供静态内容。在这些指南中,我们演示的是 JavaScript 客户端代码,而不是 Java 或 Groovy!如果您已经熟悉 Boot,那么您可能已经猜到了结果。 为了实现这一点,不需要任何配置,几乎不需要任何服务器代码。

使用 Spring Boot 命令行界面 和少量的 Groovy 代码,您可以指示 Spring Boot 启动 Tomcat。 考虑以下 app.groovy 文件

@Controller class JsApp { }

@Controller 注释的单个空类将触发 Boot 中的 AutoConfiguration,这将设置完整的 Spring MVC 堆栈并启用对 Tomcat 的支持。

您可以使用以下命令运行该应用程序

$ spring run app.groovy

虽然对于自 SpringOne 发布以来一直关注 Spring Boot 的人来说,这可能不是什么新鲜事,但您可能不知道一个细节。Spring Boot 将自动添加位于以下任何目录中的静态 Web 资源

  • /META-INF/resources/
  • /resources/
  • /static/
  • /public/

使用 jQuery 消费 RESTful Web 服务 指南中,我们在 /public/ 文件夹中包含了 index.htmlhello.js 文件。 这意味着 Spring Boot 不仅提供了一种构建 Java 或 Groovy 应用程序的简单方法,而且您还可以使用它轻松部署客户端 JavaScript 代码并在真实的 Web 服务器环境中进行测试!

您可以通过查看 源代码 来分析其工作原理的详细信息,对于 Spring Boot 中的 WebMvcAutoConfiguration,您将看到以下字符串数组的声明,其中包含 Classpath 资源的位置。

private static final String[] CLASSPATH_RESOURCE_LOCATIONS = {
		"classpath:/META-INF/resources/", "classpath:/resources/",
		"classpath:/static/", "classpath:/public/" };

在代码的更深处,您可以看到这些位置已添加到 Spring MVC ResourceHandlerRegistry

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

总结一下,当 Spring Boot 识别出带有 @Controller 注释的类时,将执行 Web AutoConfiguration。结果是,您可以将静态 Web 资源放置在这些位置中的任何一个位置,并且当您访问应用程序时,Tomcat 将提供这些静态资产。

Spring Boot 提供了许多令人兴奋的功能,可以帮助轻松创建可以“直接运行”的基于 Spring 的应用程序。 有趣的副产品是,使用 Spring Boot 构建和测试客户端 JavaScript 应用程序同样容易。

获取 Spring 新闻资讯

订阅 Spring 新闻资讯以保持联系

订阅

领先一步

VMware 提供培训和认证,以加速您的发展。

了解更多

获取支持

Tanzu Spring 在一个简单的订阅中提供对 OpenJDK™、Spring 和 Apache Tomcat® 的支持和二进制文件。

了解更多

即将到来的活动

查看 Spring 社区中的所有即将到来的活动。

查看全部