领先一步
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 中的 自动配置,这将设置完整的 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
,您将看到以下声明,其中包含一个用于类路径资源位置的字符串数组。
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 自动配置。结果是,您可以将静态 Web 资源放在这些位置中的任何一个,当您访问应用程序时,Tomcat 会提供这些静态资源。
Spring Boot 提供了许多令人兴奋的功能,可以帮助轻松创建基于 Spring 的应用程序,您可以“直接运行”。有趣的是,使用 Spring Boot 构建和测试客户端 JavaScript 应用程序也同样简单。