当前位置: 首页 > news >正文

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)

http://www.dtcms.com/a/148689.html

相关文章:

  • 开启报名!火山引擎 x PICO-全国大学生物联网设计竞赛赛题发布
  • 【MATLAB第117期】#源码分享 | 基于MATLAB的SSM状态空间模型多元时间序列预测方法(多输入单输出)
  • 【随手记】jupyter notebook绘制交互式图像
  • Shell循环语句---for和while
  • 【上海大学数据库原理实验报告】MySQL数据库的C/S模式部署
  • 发送百度地图的定位
  • 物联网蓬勃发展是助力楼宇自控技术迈向成熟的关键
  • AI 健康小屋:开启智慧健康管理新范式
  • # 06_Elastic Stack 从入门到实践(六)
  • ffmpeg av_buffer_unref的逻辑实现; av_freep 和 av_freep函数的区别
  • 用c语言实现——一个带头节点的链队列,支持用户输入交互界面、初始化、入队、出队、查找、判空判满、显示队列、遍历计算长度等功能
  • 神经网络权重优化秘籍:梯度下降法全解析(五)
  • 记录一次使用面向对象的C语言封装步进电机驱动
  • Shell脚本中的字符串截取和规则变化
  • 深度学习基石:神经网络核心知识全解析(一)
  • 运行neo4j.bat console 报错无法识别为脚本,PowerShell 教程:查看语言模式并通过注册表修改受限模式
  • 【Java面试笔记:基础】5.String、StringBuffer、StringBuilder有什么区别?
  • transformer 子层连接结构
  • 迅为iTOP-RK3576开发板/核心板6TOPS超强算力NPU适用于ARM PC、边缘计算、个人移动互联网设备及其他多媒体产品
  • ElasticSearch深入解析(一):Elastic Stack全景
  • Java实例化对象都有几种方式
  • (undone) 吴恩达版提示词工程 3. 迭代 (建议用到的时候再根据目录针对看)
  • 学习笔记——《Java面向对象程序设计》-继承
  • PyTorch DDP 跨节点通信的底层机制
  • C++学习之游戏服务器开发十四QT登录器实现
  • 文献×汽车 | 基于 ANSYS 的多级抛物线板簧系统分析
  • 什么事Nginx,及使用Nginx部署vue项目(非服务器Nginx压缩包版)
  • 边缘计算全透视:架构、应用与未来图景
  • 区间分组详解
  • 83k Star!n8n 让 AI 驱动的工作流自动化触手可及