面试题:介绍下 Spring MVC 的核心组件?

Spring MVC 是一个基于 Java 的 Web 框架,用于构建灵活、可扩展的 Web 应用程序。它的核心组件协同工作,处理 HTTP 请求并生成响应。以下是 Spring MVC 的核心组件及其作用:


1. DispatcherServlet

DispatcherServlet 是 Spring MVC 的核心,负责请求的分发和处理。它是前端控制器(Front Controller)模式的实现,所有的请求都会先经过它,然后由它决定将请求分发给哪个控制器(Controller)处理。

  • 作用
    • 接收所有 HTTP 请求。
    • 将请求分发给合适的处理器(Controller)。
    • 调用视图解析器(ViewResolver)渲染视图。
    • 返回响应给客户端。

2. HandlerMapping

HandlerMapping 负责将请求映射到对应的处理器(Controller)。它根据请求的 URL 或其他条件(如请求头、参数等)找到合适的处理器。

  • 常见实现
    • RequestMappingHandlerMapping:基于 @RequestMapping 注解的映射。
    • BeanNameUrlHandlerMapping:根据 Bean 的名称映射 URL。
  • 作用
    • 确定哪个 Controller 或方法处理当前请求。

3. Controller

Controller 是处理请求的核心组件,负责具体的业务逻辑。它接收请求参数,调用服务层处理数据,并返回模型和视图。

  • 常见实现
    • 使用 @Controller 注解标记的类。
    • 使用 @RestController 注解标记的类(用于 RESTful 接口)。
  • 作用
    • 处理请求并返回响应。
    • 调用业务逻辑层。
    • 返回模型数据或视图名称。

4. ModelAndView

ModelAndView 是 Controller 返回的结果,包含模型数据(Model)和视图名称(View)。模型数据用于在视图中展示,视图名称用于解析具体的视图文件。

  • 作用
    • 封装模型数据和视图名称。
    • 传递给视图解析器(ViewResolver)进行渲染。

5. ViewResolver

ViewResolver 负责将 Controller 返回的逻辑视图名称解析为实际的视图对象(如 JSP、Thymeleaf、FreeMarker 等)。

  • 常见实现
    • InternalResourceViewResolver:用于解析 JSP 视图。
    • ThymeleafViewResolver:用于解析 Thymeleaf 模板。
    • FreeMarkerViewResolver:用于解析 FreeMarker 模板。
  • 作用
    • 将逻辑视图名称映射到实际视图文件。
    • 渲染视图并生成响应。

6. View

View 是最终呈现给用户的界面。它可以是 JSP、HTML、Thymeleaf 模板等。

  • 作用
    • 将模型数据渲染为 HTML 或其他格式。
    • 生成最终的响应内容。

7. HandlerAdapter

HandlerAdapter 负责调用具体的 Controller 方法。它解耦了 DispatcherServlet 和具体的 Controller 实现,使框架更灵活。

  • 常见实现
    • RequestMappingHandlerAdapter:用于处理带有 @RequestMapping 注解的方法。
  • 作用
    • 调用 Controller 方法。
    • 处理请求参数和返回值。

8. HandlerInterceptor

HandlerInterceptor 是拦截器,用于在请求处理的不同阶段执行特定操作(如日志记录、权限检查等)。

  • 作用
    • 在请求处理前、处理后和完成后执行逻辑。
    • 实现全局的预处理和后处理。

9. MultipartResolver

MultipartResolver 用于处理文件上传请求,将文件数据解析为 MultipartFile 对象。

  • 常见实现
    • CommonsMultipartResolver:基于 Apache Commons FileUpload。
    • StandardServletMultipartResolver:基于 Servlet 3.0 的文件上传。
  • 作用
    • 解析文件上传请求。
    • 提供文件数据给 Controller。

10. LocaleResolver

LocaleResolver 用于解析客户端的区域设置(Locale),支持国际化。

  • 常见实现
    • AcceptHeaderLocaleResolver:根据 HTTP 头的 Accept-Language 解析。
    • SessionLocaleResolver:根据 Session 中的设置解析。
  • 作用
    • 确定客户端的区域设置。
    • 支持多语言界面。

11. ThemeResolver

ThemeResolver 用于解析主题(Theme),支持动态切换界面风格。

  • 作用
    • 确定客户端的主题设置。
    • 支持多主题界面。

12. HandlerExceptionResolver

HandlerExceptionResolver 用于处理 Controller 抛出的异常,返回统一的错误响应。

  • 作用
    • 捕获并处理异常。
    • 返回自定义的错误页面或 JSON 数据。

Spring MVC 的工作流程

  1. 请求到达:客户端发送 HTTP 请求,由 DispatcherServlet 接收。
  2. 映射处理器HandlerMapping 根据请求 URL 找到对应的 Controller。
  3. 调用处理器HandlerAdapter 调用 Controller 方法。
  4. 处理请求:Controller 处理请求并返回 ModelAndView
  5. 解析视图ViewResolver 将逻辑视图名称解析为实际视图。
  6. 渲染视图View 渲染模型数据并生成响应。
  7. 返回响应DispatcherServlet 将响应返回给客户端。

总结

Spring MVC 的核心组件包括:

  • DispatcherServlet:前端控制器,负责请求分发。
  • HandlerMapping:映射请求到处理器。
  • Controller:处理请求并返回响应。
  • ModelAndView:封装模型数据和视图名称。
  • ViewResolver:解析视图名称。
  • View:渲染视图。
  • HandlerAdapter:调用处理器方法。
  • HandlerInterceptor:拦截器,用于预处理和后处理。
  • MultipartResolver:处理文件上传。
  • LocaleResolver:解析区域设置。
  • ThemeResolver:解析主题。
  • HandlerExceptionResolver:处理异常。
THE END
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容