1.3.1 处理 web 请求

Spring 附带了一个强大的 web 框架,称为 Spring MVC。Spring MVC 的核心是控制器的概念,这是一个处理请求并使用某种信息进行响应的类。对于面向浏览器的应用程序,控制器的响应方式是可选地填充模型数据并将请求传递给视图,以生成返回给浏览器的 HTML。

你将在第 2 章学到很多关于 Spring MVC 的知识。但是现在,将编写一个简单的控制器类来处理根路径的请求(例如 /),并将这些请求转发到主页视图,而不填充任何模型数据。程序清单 1.4 显示了简单的控制器类。

程序清单 1.4 主页控制器
package tacos;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {
    @GetMapping("/")
    public String home() {
        return "home";
    }
}

可以看到,这个类是用 @Controller 注释的。@Controller 本身并没有做多少事情。它的主要目的是将该类识别为组件扫描的组件。由于 HomeController 是用 @Controller 注释的,因此 Spring 的组件扫描会自动发现它,并在 Spring 应用程序上下文中创建一个 HomeController 实例作为 bean。

实际上,其他一些注释(包括 @Component@Service@Repository)的用途与 @Controller 类似。你可以用任何其他的注解来有效地注释 HomeController,它仍然可以工作。但是,选择 @Controller 更能描述该组件在应用程序中的角色。

home() 方法与控制器方法一样简单。它使用 @GetMapping 进行注释,以指示如果接收到根路径 / 的 HTTP GET 请求,则此方法应该处理该请求。除了返回 homeString 值外,它什么也不做。

此值被解释为视图的逻辑名称。如何实现该视图取决于几个因素,但是因为 Thymeleaf 在类路径中,所以可以使用 Thymeleaf 定义该模板。

为什么是 Thymeleaf?

你可能想知道为什么选择 Thymeleaf 作为模板引擎。为什么不是 JSP?为什么不是 FreeMarker?为什么不是其他几个选项中的一个呢?

简单地说,我必须选择一些东西,我喜欢 Thymeleaf,相比其他选项更喜欢。尽管 JSP 看起来是一个不错的选择,但是在使用 JSP 进行 Spring 引导时仍然存在一些需要克服的挑战。我不想在第 1 章中掉进那个陷阱。不要紧,我们将在第 2 章中讨论其他模板选项,包括 JSP。

模板名称由逻辑视图名称派生而来,它的前缀是 /templates/,后缀是 .html。模板的结果路径是 /templates/home.html。因此,需要将模板放在项目的 /src/main/resources/templates/home.html 中。现在让我们创建该模板。

最后更新于