一、SpringMVC常用组件
-
DispatcherServlet(前置控制器):
- DispatcherServlet是Spring MVC的核心组件之一,充当请求的入口点。
- 它负责接收用户的请求并将其分发给其他组件进行处理。
- DispatcherServlet还处理全局配置、异常处理和视图渲染等。
-
HandlerMapping(处理器映射器):
- HandlerMapping根据请求的URL、请求方法等信息,确定应该由哪个处理器来处理该请求。
- 它维护一个处理器映射表,将URL映射到相应的处理器(Controller)。
-
HandlerExecutionChain(处理器执行链):
- HandlerExecutionChain包含一个或多个处理器以及相应的处理器拦截器。
- 它表示请求处理的执行链,包括处理器和拦截器的顺序。
- 拦截器可以在请求前后进行预处理和后处理操作。
-
HandlerAdapter(处理器适配器):
- HandlerAdapter负责根据处理器的类型调用具体的Controller(处理器)进行处理。
- 它将请求传递给处理器并执行处理器的逻辑。
- HandlerAdapter根据处理器的类型不同,使用相应的适配策略进行适配。
-
Controller(处理器):
- Controller是实际处理业务逻辑的组件。
- 它接收请求并根据业务逻辑进行处理。
- Controller处理请求后,将处理结果封装到ModelAndView对象中并返回。
-
ModelAndView:
- ModelAndView是一个包含处理结果的模型数据和要渲染的视图信息的对象。
- 它将处理结果数据以及要展示的视图名称封装在一起,供视图解析器进行处理。
-
ViewResolver(视图解析器):
- ViewResolver将ModelAndView中的视图名称解析为具体的视图对象。
- 它根据配置和规则,将逻辑视图名称解析为实际的视图对象。
- 视图解析器可以根据需要使用不同的解析策略,如内部资源视图解析、JSP视图解析等。
-
View(视图):
- View负责将模型数据填充到视图中,并生成最终的HttpResponse对象。
- 它是将模型数据渲染到客户端的关键组件。
- View可以是JSP、Thymeleaf、Freemarker等不同的模板引擎,或者是其他自定义的视图实现。
二、SpringMVC执行流程
1. 用户发送的请求由前端控制器(DispatcherServlet)接收。
- DispatcherServlet 是 Spring MVC 的核心模块之一,它充当请求的入口点。
2. DispatcherServlet 是 Spring MVC 的核心模块,它负责调度其他组件的执行,降低了不同组件之间的耦合性。
- DispatcherServlet 根据配置和规则,将请求分发给适当的处理器和组件,协调整个请求处理过程。
3. DispatcherServlet 将用户请求发送给处理器映射器(HandlerMapping)。
- 处理器映射器负责根据请求的URL、请求方法等信息,确定应该由哪个处理器来处理该请求。
4. 处理器映射器根据请求的URL、请求方法等信息,确定应该由哪个处理器来处理该请求。
- 处理器映射器会根据预先配置的映射规则,将请求映射到合适的处理器(Controller)。
5. 处理器映射器将找到的处理器封装为处理器执行链(HandlerExecutionChain)对象,并将其返回给 DispatcherServlet。
- 处理器执行链包含了一个或多个处理器以及相应的处理器拦截器,用于执行请求处理过程。
6. 处理器执行链中包含了一个或多个处理器以及相应的处理器拦截器(HandlerInterceptor)。
- 处理器执行链将请求传递给处理器前后执行相应的处理器拦截器,用于实现拦截、验证、日志记录等功能。
7. DispatcherServlet 根据处理器执行链,找到能够执行该处理器的处理器适配器(HandlerAdapter)。
- 处理器适配器负责将请求传递给处理器并执行处理器的逻辑。
8. 处理器适配器根据处理器的类型调用具体的 Controller(处理器)。
- 处理器适配器通过适配不同类型的处理器,将请求委托给具体的 Controller 进行处理。
9. Controller 是实际处理业务逻辑的组件,它会根据请求的内容进行相应的处理,并将处理结果和要跳转的视图封装到一个 ModelAndView 对象中。
- Controller 接收请求,并根据业务逻辑进行处理,然后将处理结果封装在 ModelAndView 对象中返回。
10. ModelAndView 包含了处理结果的模型数据和要渲染的视图信息,处理器适配器将 ModelAndView 返回给 DispatcherServlet。
- ModelAndView 包含处理结果的数据模型以及用于渲染结果的视图的名称。
11. 处理器适配器将 ModelAndView 直接交给 DispatcherServlet。
- 处理器适配器将 ModelAndView 对象返回给 DispatcherServlet,让它继续处理请求。
12. 业务处理完毕后,DispatcherServlet 需要将处理结果展示给用户,所以它调用 ViewResolver(视图解析器)。
- ViewResolver 解析 ModelAndView 中的视图名称,将其解析为具体的视图对象。
13. ViewResolver 将 ModelAndView 中的视图名称解析为具体的视图对象(View)。
- ViewResolver 根据视图名称解析为可以渲染的具体视图对象。
14. 解析后的视图对象返回给 DispatcherServlet。
- ViewResolver 返回一个实现了 View 接口的具体视图对象。
15. DispatcherServlet 调用视图对象的方法,让视图对象自己进行渲染,将模型数据填充至视图中,形成一个 HttpResponse 对象。
- DispatcherServlet 调用视图对象的方法,由视图对象负责将模型数据填充到视图中,并生成最终的 HttpResponse 对象。
16. 最后,DispatcherServlet 将生成的 HttpResponse 对象返回给浏览器,展示在页面上。
- DispatcherServlet 将生成的 HttpResponse 对象返回给客户端浏览器,完成请求处理过程,并将最终结果展示在页面上。