Spring DispatcherServlet 工作机制
来源:互联网 发布:怎么找网络水军 编辑:程序博客网 时间:2024/05/01 16:10
DispatcherServlet的主要工作就是将一个request分发到一个合适的处理器上,并将处理返回的ModelAndView绘制出来返回给客户端
一、init()方法初始化。
initFrameworkServet方法对根据名字我们很方面的看到对各个Spring MVC主要元素的初始化
1. initMultipartResolver(); //文件上传解释器
2. initLocaleResolver(); //本地化信息解析器
3. initThemeResolver(); //主题解析器处理器映射
4. initHandlerMappings();
5. initHandlerAdapters();
6. initHandlerExceptionResolvers();
7. initRequestToViewNameTranslator();
8. initViewResolvers();
二、doService()处理请求。DispatcherServlet中无论是通过post方式还是get方式提交的request,最终都会交由doService()处理
1、 如果request是MultiPart,即文件上传的请求则将request解析并包装成MultipartHttpServletRequest。
2、 mappedHandler = getHandler(request)根据request得到相应的处理器。
3、 调用注册的所有拦截器的preHandle方法。
4、 调用处理器 HandlerAdapter ha = newgetHandlerAdapter(mappedHandler.getHandler()); ModelAndView mv = ha.handle(req, res,mappedHandler.getHandler())//这里使用了adapter模式。
5、 调用注册的所有拦截器的postHandle方法。
6、 绘制mv。
三、原理描述:
1、 DispatcherServlet把定义了的所有HandlerMapping都加载了放在一个List里待以后进行使用,这个链的每一个元素都是一个handlerMapping的配置,而一般每一个handlerMapping可以持有一系列从URL请求到Spring Controller的映射,比如SimpleUrl HandlerMaaping中就定义了一个map来持有这一系列的映射关系。
DisptcherServlet通过HandlerMapping使得Web应用程序确定一个执行路径,就像我们在HanderMapping中看到的那样。
2、 而这些Handler和Interceptor需要我们定义HandlerMapping的时候配置好,比如对具体的 SimpleURLHandlerMapping,他要做的就是根据URL映射的方式注册Handler和Interceptor,自己维护一个放映映射的handlerMap,当需要匹配Http请求的时候需要使用这个表里的信息来得到执行链。这个注册的过程在IOC容器初始化SimpleUrlHandlerMapping的时候就被完成了,这样以后的解析才可以用到map里的映射信息,这里的信息和bean文件的信息是等价的。
3、 handlerMap是持有的一个HashMap,里面就保存了具体的映射信息: 而SimpleUrlHandlerMapping对接口HandlerMapping的实现是这样的,这个getHandler根据在初始化的时候就得到的映射表来生成DispatcherServlet需要的执行链
4、 mv = ha.handle(processedRequest, response,mappedHandler.getHandler()); 这个就是对handle的具体调用!相当于Command模式里的Command.execute();理所当然的返回一个ModelAndView。
5、 这样就和我们前面的分析一致起来了:DispatcherServlet在解析视图名的时候就根据要求生成了视图对象,包括在InternalResourceView中需要使用的url和其他各种和HTTPresponse相关的属性都会写保持在生成的视图对象中,然后就直接调用视图对象的render来完成数据的展示。
这就是整个Spring WebMVC框架的大致流程,整个MVC流程由DispatcherServlet来控制。MVC的关键过程包括:
配置到handler的映射关系和怎样根据请求参数得到对应的handler,在Spring中,这是由handlerMapping通过执行链来完成的,而具体的映射关系我们在bean定义文件中定义并在HandlerMapping载入上下文的时候就被配置好了。然后 DispatcherServlet调用HandlerMapping来得到对应的执行链,最后通过视图来展现模型数据,但我们要注意的是视图对象是在解析视图名的时候生成配置好的。这些作为核心类的HanderMapping,ViewResolver,View,Handler的紧密协作实现了MVC的功能。
- Spring DispatcherServlet 工作机制
- Spring MVC中DispatcherServlet工作原理探究
- Spring MVC中DispatcherServlet工作原理探究
- Spring MVC中DispatcherServlet工作原理探究
- 6 Spring入门 DispatcherServlet的工作方式
- spring工作机制
- Spring工作机制
- Spring AOP工作机制
- Spring(SpringMVC)工作机制?
- DispatcherServlet 工作原理
- DispatcherServlet工作原理探究
- DispatcherServlet工作原理探究
- spring 容器 内部工作机制
- Spring工作机制,IOC容器
- spring工作机制及好处
- Struts,spring工作机制(总结)
- Struts,spring工作机制(总结)
- Spring— Acegi工作机制
- chroot MySQL on CentOS
- Android中ListView下拉刷新的实现
- 读书笔记:视觉测量的方法
- 关于JDBC下使用SQLite DB问题总结(Windows下和Linux下使用)
- FreeMarker整合Spring 3
- Spring DispatcherServlet 工作机制
- Rotate Image & Binary Tree Postorder Traversal & Minimum Path Sum
- 文件类型声明的理解来源
- 【android开发】使用PopupWindow实现页面点击顶部弹出下拉菜单
- Drupal 7 建站学习手记(三):Nivo Slider模块报错的问题
- ubuntu+haproxy+keepalived主从负载
- MDI窗体(多文档界面)
- java.lang.IllegalStateException: The content of the adapter has changed but ListView did not receive
- 云环境下面向能耗降低的资源负载均衡方法