spring机制分析(1)

来源:互联网 发布:python interfaceerror 编辑:程序博客网 时间:2024/05/21 14:00

spring  运行机制


众所周知,一个 HTTP 请求发送到 Web 容器, Web 容器就会封装一个 HTTP 请求对象 (HttpServletRequest) ,这个对象包含所有的 HTTP 请求信息,例如, HTTP 参数以及参数值, HTTP 请求头的各种元数据。同时, Web 容器会创建一个 HTTP 响应对象( HttpServletResponse ),用以发送 HTTP 响应给客户端用户。然后, Web 容器传递 HTTP 请求对象 (HttpServletRequest) 和 HTTP 响应对象( HttpServletResponse )给 Servlet 对象的 service() 方法。

 

实际上, Spring Web MVC 的入口就是一个客户化的 Servlet ,称为派遣器 Servlet 对象 (DispatcherServlet) 。这个派遣器Servlet 对象( DispatcherServlet )得到 HTTP 请求对象 (HttpServletRequest) 和 HTTP 响应对象( HttpServletResponse)后,一个典型的 Spring Web MVC 工作流就开始了。

 

派遣器 Servlet 对象( DispatcherServlet )首先查找所有注册的处理器映射器对象( HandlerMapping ),然后,遍历所有的处理器映射器对象( HandlerMapping ),直到一个处理器映射器对象( HandlerMapping )返回一个非空的处理器执行链对象 (HandlerExecutionChain) 。那么,处理器执行链对象 (HandlerExecutionChain) 就包含着一个需要处理当前HTTP 请求的一个处理器对象( Handler )。如图表 3-6 第 1 步。

 

这里,一个处理器对象 (Handler) 被设计成了一个通用的对象类型,所以,这里需要一个处理器适配器(HandlerAdaptor )去派遣这个控制流到一个处理器对象 (Handler) ,因为只有支持这种类型的处理器( Handler )的处理器适配器 (HandlerAdapter) 才知道如何去传递控制流给这个类型的处理器( Hanlder )。

 

拿到了处理器对象 (Hanlder) 以后,派遣器 Servlet 对象( DispatcherServlet )则查找所有注册的处理器适配器对象(HandlerAdapter ),然后,遍历所有的处理器适配器对象( HandlerAdapter )查询是否有一个处理器适配器对象(HandlerAdapter )支持这个处理器对象( Handler )。如图表 3-6 第 2 步。

 

如果有这样的一个处理器适配器对象 (HandlerAdapter) ,则派遣器 Servlet 对象( DispatcherServlet )将控制权转交给这个派遣器适配器对象 (HandlerAdapter) 。如图表 3-6 第 3 步。派遣器适配器对象( HandlerAdapter )和真正的处理器对象 (Handler) 是成对出现的,所以,这个支持的处理器适配器对象( HandlerAdapter )则知道如何去使用这个处理器(Handler) 去处理这个请求。最简单的一个处理器则是控制器对象( Controller )。处理器适配器对象 (HandlerAdapter)将传递 HTTP 请求对象( HttpServletRequest )和 HTTP 响应对象( HttpServletResponse )给控制器,并且期待控制器返回模型和视图对象( ModelAndView )。如图表 3-6 第 3.1 步。这个模型和视图对象( ModelAndView )对象包含着一组模型数据和视图逻辑名称,并且最终返回给派遣器 Servlet 对象( DispatcherServlet ) .

 

派遣器 Servlet 对象( DispatcherServlet )然后查找所有注册的视图解析器对象,并且遍历所有的视图解析器对象(ViewResolver ),直到一个视图解析器对象( ViewResolver )返回一个物理的视图对象( View )。如图表 3-6 第 4步。

 

最后,派遣器 Servlet ( DispatcherServlet )把得到的一组模型数据传递给得到的物理视图对象( View )。如图表 3-6第 5 步。然后,视图对象则会使用响应的表现层技术,把模型数据展现成 UI 界面,并且通过 HTTP 响应对象(HttpServletResponse )发送给 HTTP 客户。


原创粉丝点击