Spring Boot和Spring MVC都是基于Spring框架的技术,它们在处理视图解析方面有一些相似之处,但也有不同的特点和简化的步骤。
### Spring MVC中的视图解析
在Spring MVC中,视图解析通常是通过配置一个或多个`ViewResolver`来完成的。`ViewResolver`的目的是将控制器返回的逻辑视图名称解析为实际的视图页面。例如,你可以使用`InternalResourceViewResolver`来解析JSP页面。
**例子:**
1. **添加依赖** - 在`pom.xml`中添加Spring MVC和相关视图技术的依赖,如JSP。
```xml
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.10</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
```
2. **配置视图解析器** - 在Spring配置文件中配置`InternalResourceViewResolver`。
```xml
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/views/"/>
<property name="suffix" value=".jsp"/>
</bean>
```
3. **创建控制器** - 创建一个控制器并返回逻辑视图名称。
```java
@Controller
public class MyController {
@RequestMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello, World!");
return "greeting";
}
}
```
4. **创建视图页面** - 在`/WEB-INF/views/`目录下创建`greeting.jsp`页面。
```jsp
<html>
<body>
<h1>${message}</h1>
</body>
</html>
```
### Spring Boot中的视图解析
Spring Boot提供了更多的开箱即用的特性,包括对视图技术的自动配置。例如,如果你的项目中包含了Thymeleaf或FreeMarker模板,Spring Boot会自动配置相应的视图解析器。
**例子:**
1. **添加依赖** - 在`pom.xml`中添加Spring Boot和Thymeleaf的依赖。
```xml
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf-spring5</artifactId>
</dependency>
```
2. **创建控制器** - 创建一个控制器并返回逻辑视图名称。
```java
@Controller
public class MyController {
@GetMapping("/greeting")
public String greeting(Model model) {
model.addAttribute("message", "Hello, World!");
return "greeting";
}
}
```
3. **创建视图页面** - 在`src/main/resources/templates`目录下创建`greeting.html`页面。
```html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<body>
<h1 th:text="${message}"></h1>
</body>
</html>
```
### 区别
- **配置简化** - Spring Boot通过自动配置大大简化了视图解析的配置。在Spring Boot中,你通常不需要显式配置`ViewResolver`或`ViewFactoryBean`,因为Spring Boot会根据你的项目依赖自动配置。
- **默认视图技术** - Spring Boot有一套默认的视图技术,如Thymeleaf、FreeMarker、Mustache等。而Spring MVC需要你显式地配置和选择视图技术。
- **启动类** - Spring Boot使用`@SpringBootApplication`注解的启动类来启动应用,而Spring MVC通常需要一个XML配置文件或`@Configuration`注解的类来启动。
- **内嵌服务器** - Spring Boot内置了Tomcat、Jetty或Undertow作为默认的Servlet容器,无需额外配置。而在Spring MVC中,你可能需要单独添加并配置Servlet容器。
总的来说,Spring Boot在视图解析方面提供了更多的便利性和开箱即用的特性,减少了开发者的配置负担。而Spring MVC则提供了更多的灵活性和控制力,但相应地需要更多的配置工作。