10个SpringMVC的核心组件详解

简介: Spring MVC 核心组件包括 DispatcherServlet(前端控制器)、Controller(处理请求)、HandlerMapping(映射请求到方法)、HandlerAdapter(调用不同处理器)、ViewResolver(解析视图)、ModelAndView(传递数据到视图)、数据绑定、异常处理器、消息转换器和主题解析器。这些组件协同工作,支持基于 MVC 的 Web 应用开发,使请求处理、业务逻辑和视图渲染得以有序进行。了解并掌握这些组件有助于深入理解 Spring MVC 的工作原理。【5月更文挑战第2天】

Spring MVC 的核心组件是构成整个框架的基础,它们协同工作以支持基于 MVC 架构的 Web 应用程序开发。以下是V哥工作中整理的每个组件的详细介绍,包括示例代码和解释:

1. DispatcherServlet:

  • 作用:作为前端控制器,它负责接收所有的 HTTP 请求,并将请求转发到相应的处理器。
  • 示例代码:
      <!-- 在 Spring MVC 的配置文件中定义 DispatcherServlet -->
      <servlet>
          <servlet-name>dispatcher</servlet-name>
          <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
          <init-param>
              <param-name>contextConfigLocation</param-name>
              <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
          </init-param>
          <load-on-startup>1</load-on-startup>
      </servlet>
    
  • 解释:上述配置定义了 DispatcherServlet,并指定了它的初始化参数,即 Spring 配置文件的位置。

2. Controller:

  • 作用:处理用户的请求,调用业务逻辑,并返回模型数据和视图。
  • 示例代码:

      @Controller
      @RequestMapping("/user")
      public class UserController {
         
    
          @RequestMapping(value = "/list", method = RequestMethod.GET)
          public String list(Model model) {
         
              // 获取用户列表并添加到模型
              List<User> users = userService.listUsers();
              model.addAttribute("users", users);
              return "userList";
          }
      }
    
  • 解释:UserController 是一个 Spring MVC 控制器,它使用 @RequestMapping 注解来映射 HTTP 请求到对应的方法。

3. HandlerMapping:

  • 作用:将 HTTP 请求映射到 Controller 的具体处理方法。
  • 示例代码:
      // 通常不需要手动编写,Spring MVC 会自动配置合适的 HandlerMapping。
    
  • 解释:Spring MVC 提供了多种 HandlerMapping 实现,如 BeanNameUrlHandlerMapping 和 RequestMappingHandlerMapping。

4. HandlerAdapter:

  • 作用:允许 DispatcherServlet 调用不同的处理器(Controller)。
  • 示例代码:
      // 通常不需要手动编写,Spring MVC 会自动配置合适的 HandlerAdapter。
    
  • 解释:Spring MVC 提供了 HttpRequestHandlerAdapter 和 SimpleControllerHandlerAdapter 等实现。

5. ViewResolver:

  • 作用:解析视图,将模型数据渲染到视图模板中。
  • 示例代码:
      // 使用 Thymeleaf 作为视图解析器的配置
      @Bean
      public ViewResolver viewResolver() {
         
          ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
          viewResolver.setTemplateEngine(templateEngine());
          viewResolver.setCharacterEncoding("UTF-8");
          return viewResolver;
      }
    
  • 解释:上述代码配置了 Thymeleaf 作为视图解析器,它将解析 .html 模板文件。

6. ModelAndView:

  • 作用:包含模型数据和视图信息,用于从 Controller 传递数据到视图。
  • 示例代码:
      public ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
         
          ModelAndView modelAndView = new ModelAndView("userList");
          modelAndView.addObject("users", userService.listUsers());
          return modelAndView;
      }
    
  • 解释:ModelAndView 对象用于将模型数据和视图名称传递给视图解析器。

7. 数据绑定:

  • 作用:自动将请求参数绑定到 Java 对象上。
  • 示例代码:
      @RequestMapping(value = "/save", method = RequestMethod.POST)
      public String save(@ModelAttribute("user") User user) {
         
          // 保存用户信息
          userService.saveUser(user);
          return "redirect:/user/list";
      }
    
  • 解释:@ModelAttribute 注解用于将表单数据绑定到 User 对象上。

8. 异常处理器(Exception Handler):

  • 作用:处理应用程序中的异常。
  • 示例代码:

      @ControllerAdvice
      public class GlobalExceptionHandler {
         
    
          @ExceptionHandler(Exception.class)
          public String handleException(Exception e) {
         
              // 处理异常并返回错误页面
              return "error";
          }
      }
    
  • 解释:@ControllerAdvice 注解的类可以全局处理异常,@ExceptionHandler 注解的方法可以捕获特定类型的异常。

9. 消息转换器(Message Converter):

  • 作用:将请求体或响应体转换为 Java 对象或从 Java 对象转换为请求体或响应体。
  • 示例代码:
      @Configuration
      public class WebConfig implements WebMvcConfigurer {
         
          @Override
          public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
         
              converters.add(new StringHttpMessageConverter(Charset.forName("UTF-8")));
          }
      }
    
  • 解释:上述配置添加了一个字符串消息转换器,用于处理字符串类型的 HTTP 请求和响应。

10. 主题解析器(Theme Resolver):

  • 作用:解析用户的主题偏好,如不同的样式或布局。
  • 示例代码:
          // 通常不需要手动编写,Spring MVC 可以自动处理主题解析。
    
  • 解释:Spring MVC 可以根据用户请求中的信息(如 cookie、session)来解析和应用主题。

这些组件共同构成了 Spring MVC 的核心,它们使得开发人员能够以一种声明式和模块化的方式构建 Web 应用程序。通过这些组件,Spring MVC 能够处理 HTTP 请求,执行业务逻辑,并生成响应。

最后

学习 SpringMVC,理解核心组件是重要的环节,通过理解核心组件来了解 SpringMVC的整个运行过程,以达到知其然知其所以然的效果,当然,你还需要结合源码的学习来更加深入的学习这个框架。今天的文章就到这里,欢迎关注威哥爱编程,技术道路上我们一起结伴前行。

相关文章
|
4月前
|
JSON 前端开发 Java
Spring MVC 核心组件与请求处理机制详解
本文解析了 Spring MVC 的核心组件及请求流程,核心组件包括 DispatcherServlet(中央调度)、HandlerMapping(URL 匹配处理器)、HandlerAdapter(执行处理器)、Handler(业务方法)、ViewResolver(视图解析),其中仅 Handler 需开发者实现。 详细描述了请求执行的 7 步流程:请求到达 DispatcherServlet 后,经映射器、适配器找到并执行处理器,再通过视图解析器渲染视图(前后端分离下视图解析可省略)。 介绍了拦截器的使用(实现 HandlerInterceptor 接口 + 配置类)及与过滤器的区别
395 0
|
安全 Java 程序员
Spring框架的核心特性是什么?
【4月更文挑战第30天】Spring 的特性
1054 0
|
前端开发 Java 中间件
过滤器(Filter)和拦截器(Interceptor)有什么不同?
文章比较了过滤器(Filter)和拦截器(Interceptor)的不同,包括它们的实现方式、应用场景、执行顺序、依赖框架和访问范围,指出过滤器通常用于全局和非业务相关的操作,而拦截器用于Spring MVC中与业务逻辑相关的处理。
910 8
|
11月前
|
NoSQL Java Redis
Spring Boot 自动配置机制:从原理到自定义
Spring Boot 的自动配置机制通过 `spring.factories` 文件和 `@EnableAutoConfiguration` 注解,根据类路径中的依赖和条件注解自动配置所需的 Bean,大大简化了开发过程。本文深入探讨了自动配置的原理、条件化配置、自定义自动配置以及实际应用案例,帮助开发者更好地理解和利用这一强大特性。
1855 15
|
12月前
|
NoSQL 中间件 Java
字节面试:聊聊 CAP 定理?哪些中间件是AP? 哪些是CP? 说说 为什么?
45岁老架构师尼恩在其读者交流群中分享了关于CAP定理的重要面试题及其解析,包括CAP定理的基本概念、CAP三要素之间的关系,以及如何在分布式系统设计中权衡一致性和可用性。文章还详细分析了几种常见中间件(如Redis Cluster、Zookeeper、MongoDB、Cassandra、Eureka、Nacos)的CAP特性,并提供了高端面试技巧,帮助读者在面试中脱颖而出。尼恩还推荐了其团队编写的《尼恩Java面试宝典PDF》等资料,助力求职者准备面试,提升技术水平。
|
XML Java 数据格式
BeanFactory 和 ApplicationContext 的区别
【10月更文挑战第24天】在 Spring 框架中,`BeanFactory` 和 `ApplicationContext` 是两个核心的容器接口。`BeanFactory` 提供基本的 Bean 管理功能,支持延迟加载,适用于轻量级应用和资源受限环境。`ApplicationContext` 则在 `BeanFactory` 基础上扩展了丰富的企业级功能,如国际化、事件处理和资源管理,适用于企业级和 Web 应用开发。两者各有特点,需根据具体需求选择使用。
247 2
|
Java 开发者 Spring
Spring bean的生命周期详解!
本文详细解析Spring Bean的生命周期及其核心概念,并深入源码分析。Spring Bean是Spring框架的核心,由容器管理其生命周期。从实例化到销毁,共经历十个阶段,包括属性赋值、接口回调、初始化及销毁等。通过剖析`BeanFactory`、`ApplicationContext`等关键接口与类,帮助你深入了解Spring Bean的管理机制。希望本文能助你更好地掌握Spring Bean生命周期。
1020 1
|
12月前
|
前端开发 Java 开发者
Spring MVC中的控制器:@Controller注解全解析
在Spring MVC框架中,`@Controller`注解是构建Web应用程序控制层的核心。它不仅简化了控制器的定义,还提供了灵活的请求映射和处理机制。本文将深入探讨`@Controller`注解的用法、特点以及在实际开发中的应用。
855 0
|
存储 JSON NoSQL
解决Redis的键值前出现类似\xAC\xED\x00\x05t\x00*这样的字符序列
遇到Redis键值前出现Java序列化字符序列的问题,主要通过调整序列化策略来解决,首选 `StringRedisTemplate`或自定义序列化器来确保数据以预期的格式存储。合理的序列化策略不仅能提高数据的可读性和存储效率,还能避免潜在的安全隐患,是构建健壮Redis应用的基础之一。
1268 2
|
Java 编译器 程序员
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别