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)

相关推荐
六千江山18 分钟前
从字符串中提取符合规则的汽车车牌
java
33255_40857_2805926 分钟前
从韩立结婴看Java进阶:一个10年老码农的修仙式成长指南
java
赵星星52026 分钟前
透彻理解Java中的深拷贝与浅拷贝:从误区到最佳实践
java·后端
心月狐的流火号28 分钟前
Java CompletableFuture 核心API
java
黑客影儿38 分钟前
Java技术总监的成长之路(技术干货分享)
java·jvm·后端·程序人生·spring·tomcat·maven
京东云开发者43 分钟前
EXCEL导入—设计与思考
java·架构
Warren981 小时前
软件测试-Selenium学习笔记
java·javascript·笔记·学习·selenium·测试工具·安全
没有bug.的程序员1 小时前
JVM 运行时数据区详解:内存模型与对象生命周期全景解析
java·jvm·运行时数据区·内存模型·对象生命周期
一语长情2 小时前
Netty流量整形:保障微服务通信稳定性的关键策略
java·后端·架构
盖世英雄酱581362 小时前
第一个RAG项目遇到的问题
java·spring boot