SpringMVC原理及核心组件

一、SpringMVC原理及核心组件

1、 Spring MVC的工作原理

Spring MVC 是一个对javaWeb中Servlet 简化和封装,

1.首先SpringMVC 配置DispatcherServlet 来接受所有的请求,我们通过DispatcherServlet 响应的所有数据,DispatcherServlet 是HttpServlet的子类,他的所有方法(Get,Post...)最终都会执行doDispatch方法

java 复制代码
protected void doDispatch(HttpServletRequest request, HttpServletResponse response)  {}

2.根据用户的输入url通过SpringMVC handlerMapping组件 找到对应的 HandlerExecutionChain 执行链

java 复制代码
mappedHandler = this.getHandler(processedRequest);

3.找到handler 适配的HandlerAdapter

复制代码
HandlerAdapter ha = this.getHandlerAdapter(mappedHandler.getHandler());

4.执行所有注册拦截器的preHandler方法

java 复制代码
if (!mappedHandler.applyPreHandle(processedRequest, response)) {
    return;
}
  1. 通过HandlerAdapter 的适配方法来调用handler,返回ModelAndView
java 复制代码
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());

6.倒序执行所有注册拦截器的postHandler方法

复制代码
mappedHandler.applyPostHandle(processedRequest, response, mv);

7.请求视图解析和视图渲染,如果是jsp就返回jsp页面,如果是 被@ResponseBody就返回JSON数据

java 复制代码
this.processDispatchResult(processedRequest, response, mappedHandler, mv, (Exception)dispatchException);

2.Spring MVC的主要组件?

  • 前端控制器(DispatcherServlet):接收用户请求,给用户返回结果。
  • 处理器映射器(HandlerMapping):根据请求的url路径,通过注解或者xml配置,寻找匹配的Handler。
  • 处理器适配器(HandlerAdapter):Handler 的适配器,调用 handler 的方法处理请求。
  • 处理器(Handler):执行相关的请求处理逻辑,并返回相应的数据和视图信息,将其封装到ModelAndView对象中。
  • 视图解析器(ViewResolver):将逻辑视图名解析成真正的视图View。
  • 视图(View):接口类,实现类可支持不同的View类型(JSP、FreeMarker、Excel等)。
相关推荐
吃饱了得干活1 分钟前
@Transactional 又失效了?把这 8 个坑全填了!
java·后端·spring
今天AI了吗17 分钟前
Spring AI 框架实战:Java 后端集成大模型的架构设计与工程落地
java·人工智能·python·spring·机器学习
hexu_blog27 分钟前
springboot3集成shardingsphere4.0 分表分库
java·spring boot·mybatis
乐观的Terry29 分钟前
9、发布系统-Webhook自动发布
java·spring boot·spring·spring cloud·mybatis
PH = 733 分钟前
SpringBoot使用自动装配编写Start包
java·spring boot·后端
逆境不可逃35 分钟前
Java JUC 同步工具类一次讲透:CountDownLatch、CyclicBarrier、Semaphore、Phaser 与 AQS 共享模式
java·开发语言·python
xlq223221 小时前
高并发服务器day5
java·服务器·数据库
our_times1 小时前
【硬核实战】当机器人走进厨房:Java后端如何重构物联网并发与状态一致性`。
java·重构·机器人
一路向北North1 小时前
Spring AI(5) :对话机器人-会话记忆
java·后端·spring
kingwebo'sZone1 小时前
C#事件声明办法
java·前端·c#