Spring之我见 - Spring MVC重要组件和基本流程

核心组件详解

前端控制器 - DispatcherServlet

  • 作用:所有请求的入口,负责请求分发和协调组件。

    public class DispatcherServlet extends HttpServlet {
    // 核心服务方法
    protected void doService(HttpServletRequest request,
    HttpServletResponse response) {
    // 请求处理主流程
    }
    }

处理器映射 - HandlerMapping

  • 作用:根据请求 URL 匹配对应的处理器(Controller 方法)。
  • 实现类

    • RequestMappingHandlerMapping:处理 @RequestMapping 注解。

    • BeanNameUrlHandlerMapping:根据 Bean 名称匹配 URL。

处理器适配器 - HandlerAdapter

  • 作用:调用具体的处理器方法,并处理参数绑定和返回值。

    public interface HandlerAdapter {
    boolean supports(Object handler);
    ModelAndView handle(HttpServletRequest request,
    HttpServletResponse response,
    Object handler) throws Exception;
    }

  • 关键实现

    • RequestMappingHandlerAdapter(处理@Controller)

    • HttpRequestHandlerAdapter(处理Servlet API)

  • 参数解析 :通过 HandlerMethodArgumentResolver 解析方法参数(如 @RequestParam, @PathVariable)。

视图解析器 - ViewResolver

  • 作用 :将逻辑视图名(如 "home")解析为实际视图(如 JSP、Thymeleaf)。

  • 典型实现: InternalResourceViewResolver(JSP)

  • 配置示例

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

JSON响应处理机制

大部分时候我们使用的是JSON作为数据返回,这时候就不是ViewResolver作为返回解析,JSON 返回和视图返回在结果处理阶段完全分离,前者走消息转换器HttpMessageConverter,后者走视图解析器ViewResolver。

核心组件 - HttpMessageConverter

复制代码
public interface HttpMessageConverter<T> {
    boolean canRead/Write(Class<?> clazz, MediaType mediaType);
    T read(Class<? extends T> clazz, HttpInputMessage inputMessage);
    void write(T t, MediaType contentType, 
              HttpOutputMessage outputMessage);
}
  • 常用实现

    • MappingJackson2HttpMessageConverter(JSON)

    • Jaxb2RootElementHttpMessageConverter(XML)

相关推荐
我命由我123452 小时前
Kotlin 数据容器 - List(List 概述、创建 List、List 核心特性、List 元素访问、List 遍历)
java·开发语言·jvm·windows·java-ee·kotlin·list
武子康4 小时前
Java-80 深入浅出 RPC Dubbo 动态服务降级:从雪崩防护到配置中心秒级生效
java·分布式·后端·spring·微服务·rpc·dubbo
YuTaoShao7 小时前
【LeetCode 热题 100】131. 分割回文串——回溯
java·算法·leetcode·深度优先
源码_V_saaskw7 小时前
JAVA图文短视频交友+自营商城系统源码支持小程序+Android+IOS+H5
java·微信小程序·小程序·uni-app·音视频·交友
超浪的晨7 小时前
Java UDP 通信详解:从基础到实战,彻底掌握无连接网络编程
java·开发语言·后端·学习·个人开发
双力臂4048 小时前
Spring Boot 单元测试进阶:JUnit5 + Mock测试与切片测试实战及覆盖率报告生成
java·spring boot·后端·单元测试
心之语歌8 小时前
Spring AI MCP 客户端
人工智能·spring·github
Edingbrugh.南空8 小时前
Aerospike与Redis深度对比:从架构到性能的全方位解析
java·开发语言·spring
QQ_4376643149 小时前
C++11 右值引用 Lambda 表达式
java·开发语言·c++
永卿0019 小时前
设计模式-迭代器模式
java·设计模式·迭代器模式