1. 概述

在这个教程中,我们将了解如何在Spring MVC中将根URL映射到一个页面。

首先,我们将观察Spring MVC的默认行为,然后讨论在这种行为被抑制的情况。最后,我们将学习自定义映射的方法。

2. 项目设置

我们可以使用Spring Initializr生成项目,并添加Spring Web Starter依赖。

手动添加依赖时,需要在pom.xml文件中添加以下内容:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2.1. 创建索引页

src/main/resources/templates文件夹下创建一个页面。我们将其命名为index.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index Page</title>
</head>
<body>
    <h1>Hello World!</h1>
</body>
</html>

2.2. 默认行为

运行应用并查看Spring MVC的默认行为。

当应用启动后,导航到根URL:*http://localhost:8080/*:

索引页加载正常,显示"hello world"

如我们所见,无需映射就能显示索引页。

3. 改变默认行为

让我们看看默认行为被抑制的情况。

3.1. @EnableWebMvc

RootMappingApplication类上添加@EnableWebMvc注解:

@SpringBootApplication
@EnableWebMvc
public class RootMappingApplication {
    public static void main(String[] args) {
        SpringApplication.run(RootMappingApplication.class, args);
    }
}

运行应用并导航到根URL:*http://localhost:8080/*。这次,我们看到一个错误:

显示404未找到错误的错误页面

这是因为@EnableWebMvc注解禁用了Spring Boot自动配置的web应用。为了解决这个问题,我们需要提供自己的自定义映射。接下来,我们将探讨不同的实现方式。

4. 自定义映射

让我们看看提供自定义映射的不同方法。

4.1. 使用控制器

提供路径和文件映射的一种方式是通过控制器。

首先,创建一个控制器类:

@Controller
public class RootController {
    @GetMapping("/")
    public String index() {
        return "index";
    }
}

这个控制器类有一个映射到"/"路径的方法。该方法简单地返回字符串"index"。在解析返回值时,Spring MVC会在src/main/resources/templates文件夹中查找同名的模板。

如果运行应用并导航到根URL:*http://localhost:8080/*,我们会看到索引页。

这是一种简单的自定义映射方式。当只有一个页面需要映射时,这种方法很好用。但如果需要映射多个页面,这种方式可能会变得繁琐。

4.2. 使用WebMvcConfigurer

另一种提供路径和文件映射的方式是使用WebMvcConfigurer接口。

首先,创建一个配置类:

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addViewControllers(ViewControllerRegistry registry) {
        registry.addViewController("/").setViewName("index");
    }
}

这个配置类实现了WebMvcConfigurer接口。它重写了addViewControllers()方法,添加了一个视图控制器,该控制器映射到"/"路径并返回"index"视图。

再次运行应用并导航到根URL:*http://localhost:8080/*,我们会看到索引页。

需要注意的是,如果控制器和配置类都为同一路径提供了映射,那么控制器会优先执行。

5. 总结

在这篇文章中,我们了解了如何在Spring MVC中将根URL映射到一个页面。我们讨论了Spring MVC的默认行为以及如何通过自定义配置来覆盖它。

我们还介绍了两种提供自定义映射的方法——通过控制器和使用WebMvcConfigurer接口。

如文中所述的所有代码示例,您可以在GitHub上找到。