领先一步
VMware 提供培训和认证,以加速您的发展。
了解更多最近我们发布了一些关于 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.html
和 hello.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 应用程序同样容易。