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 等组件,开发者可以轻松地处理用户请求、执行业务逻辑,并返回适当的视图。

相关推荐
雨果talk1 小时前
【一文看懂Spring循环依赖】Spring循环依赖:从陷阱破局到架构涅槃
java·spring boot·后端·spring·架构
飞翔的佩奇2 小时前
Java项目:基于SSM框架实现的劳务外包管理系统【ssm+B/S架构+源码+数据库+毕业论文】
java·mysql·spring·毕业设计·ssm·毕业论文·劳务外包
广州山泉婚姻4 小时前
智慧零工平台后端开发进阶:Spring Boot 3结合MyBatis-Flex的技术实践与优化【无标题】
人工智能·爬虫·spring
阿里云云原生4 小时前
Spring AI Alibaba 1.0 GA 正式发布,Java 智能体开发进入新时代
spring
axinawang7 小时前
通过RedisCacheManager自定义缓存序列化(适用通过注解缓存数据)
前端·spring·bootstrap
forestsea10 小时前
Spring 路由匹配机制详解:时间复杂度从 O(n) 降至 O(log n)
java·后端·spring·路由匹配
小白的代码日记10 小时前
Spring MVC 入门案例:从代码到原理的深度剖析
java·spring·mvc
chanalbert10 小时前
Spring上下文模块设计
java·spring
组合缺一11 小时前
Java Solon v3.3.2 发布(可替换,美国博通公司的 Spring 方案)
java·spring·ai·solon·solon-flow
shangjg311 小时前
Eureka 服务注册与发现原理和使用
java·spring·spring cloud·eureka