Spring MVC 架构详解

Spring MVC(Model-View-Controller)是 Spring 框架中用于构建 Web 应用程序的模块。它通过分离应用程序的不同方面(输入逻辑、业务逻辑和 UI 逻辑)来简化开发工作。本文将详细介绍 Spring MVC 架构及其基本组件,包括 DispatcherServlet、HandlerMapping、Controller 和 ViewResolver。

Spring MVC 架构

Spring MVC 架构基于经典的 Model-View-Controller 设计模式。它主要包括以下几个部分:

  • Model:用于封装应用程序的数据和业务逻辑。通常对应于服务层和持久化层。
  • View:用于呈现数据给用户。通常是 JSP、Thymeleaf 模板等。
  • Controller:用于处理用户请求,进行业务处理,并返回视图名称和模型数据。

Spring MVC 通过一系列的组件和接口实现这一架构,以便于开发者构建和管理 Web 应用程序。

Spring MVC 基本架构

Spring MVC 的基本架构由以下几个核心组件组成:

  1. DispatcherServlet
  2. HandlerMapping
  3. Controller
  4. ViewResolver

我们将逐一介绍这些组件的作用和配置方法。

DispatcherServlet

DispatcherServlet 是 Spring MVC 框架的前端控制器。它负责将用户请求分发到相应的处理器(即 Controller),并在请求处理完毕后将响应返回给用户。

配置 DispatcherServlet 非常简单,只需在 web.xml 文件中进行配置:

xml 复制代码
<servlet>
    <servlet-name>dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
    <servlet-name>dispatcher</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

在 Spring Boot 中,可以通过 @SpringBootApplication 注解自动配置 DispatcherServlet,无需手动配置 web.xml

HandlerMapping

HandlerMapping 是 Spring MVC 中用于将请求 URL 映射到具体处理器的接口。它决定了哪一个 Controller 负责处理某个特定的请求。

Spring 提供了多种 HandlerMapping 实现,常用的有:

  • BeanNameUrlHandlerMapping:通过 bean 的名称进行 URL 映射。
  • SimpleUrlHandlerMapping:通过显式配置的 URL 映射。

在现代 Spring MVC 开发中,通常使用 @RequestMapping 注解来进行 URL 映射,这种方式使用的是 RequestMappingHandlerMapping

java 复制代码
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HomeController {

    @RequestMapping("/home")
    public String home() {
        return "Welcome to Home Page!";
    }
}
Controller

Controller 是处理用户请求的核心组件。它接受请求,调用业务逻辑,并返回视图名称和模型数据。在 Spring MVC 中,Controller 通常用 @Controller@RestController 注解标注。

java 复制代码
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class UserController {

    @GetMapping("/user")
    public String getUser(Model model) {
        model.addAttribute("name", "John Doe");
        return "user";
    }
}

在这个例子中,getUser 方法处理 /user 请求,返回 user 视图,并将模型数据添加到视图中。

ViewResolver

ViewResolver 是用于将逻辑视图名称解析为具体视图实现的接口。它将控制器返回的视图名称转换为实际的视图对象,如 JSP、Thymeleaf 等。

Spring 提供了多种 ViewResolver 实现,常用的有:

  • InternalResourceViewResolver:将视图名称解析为 JSP 文件。
  • ThymeleafViewResolver:将视图名称解析为 Thymeleaf 模板。
java 复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
public class WebConfig {

    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        return resolver;
    }
}

在这个配置中,InternalResourceViewResolver 将视图名称解析为位于 /WEB-INF/views/ 目录下、以 .jsp 为后缀的 JSP 文件。

总结

Spring MVC 提供了一个灵活且强大的框架,用于构建 Web 应用程序。通过 DispatcherServlet、HandlerMapping、Controller 和 ViewResolver 等组件,开发者可以轻松地处理用户请求、执行业务逻辑,并返回适当的视图。

相关推荐
pangtao20258 小时前
【瑞萨RA × Zephyr评测】看门狗
java·后端·spring
任子菲阳9 小时前
学Javaweb第四天——springboot入门
java·spring·mybatis
Coder_Boy_10 小时前
基于SpringAI的智能平台基座开发-(十一)
人工智能·spring·langchain·langchain4j
爱吃山竹的大肚肚10 小时前
优化SQL:如何使用 EXPLAIN
java·数据库·spring boot·sql·spring
向上的车轮10 小时前
Apache Camel 与 Spring Integration的区别是什么?
java·spring·apache
URBBRGROUN46710 小时前
Spring AI Alibaba入门
java·人工智能·spring
码界奇点12 小时前
基于Spring Boot和Vue.js的视频点播管理系统设计与实现
java·vue.js·spring boot·后端·spring·毕业设计·源代码管理
爱吃山竹的大肚肚12 小时前
MySQL 支持的各类索引
java·数据库·sql·mysql·spring·spring cloud
高老庄小呆子12 小时前
SpringBoot3.5.4 引入Knife4j的官方start包
spring
廋到被风吹走12 小时前
【Spring】Spring Boot详细介绍
java·spring boot·spring