spring中DispatcherServlet的运行机制

Spring中DispatcherServlet的运行机制

DispatcherServlet是spring的web框架(以下简称SpringWeb)中的核心servlet.
"Spring的web框架——象其它web框架一样——是一个请求驱动的web框架,其设计围绕一个能将请求分发到控制器的servlet,它也提供其它功能帮助web应用开发。"----《Spring Framework 开发参考手册(中文版)》而在SpringWeb框架中这个servlet就是org.springframework.web.servlet.DispatcherServlet。这个Servlet的继承关系如下图所示:

SpringWeb首先将传统的HttpServlet抽象类包装成了Bean;FrameworkServlet抽象出了web框架中的servlets的一些基本行为,比如对application context的访问;DispatcherServlet的主要工作就是将一个request分发到一个合适的处理器上,并将处理返回的ModelAndView绘制出来返回给客户端。

DispatcherServlet作为一个Servlet那他一定有两个主要的方法:init()和doService()。

一 init()初始化。
DispatcherServlet继承体系中init()方法的实现位于HttpServletBean中,HttpServletBean首先调用initBeanWrapper(),初始化BeanWrapper,然后调用抽象方法initServletBean(),这个方法的实现位于他的子类FrameworkServlet中;FramewordServlet中的initServletBean()方法将调用initWebApplicationContext(),初始化WebApplicationContext,然后同样调用他的抽象方法initFrameworkServlet(),而这个抽象方法的实现位于最终的DispatcherServlet中;DispatcherServlet中的initFrameworkServet()将依次初始化Multipar(用作文件上传)解析器、本地化信息解析器、主题解析器处理器映射等等内容。
所以DispatcherServlet的初始化顺序为
init();
initBeanWrapper();

initServletBean
initWebApplicationContext()

initFramework();
initMultipartResolver();
initLocaleResolver();
initThemeResolver();
initHandlerMappings();
initHandlerAdapters();
initHandlerExceptionResolvers();
initViewResolvers();

二 doService()处理请求。
DispatcherServlet中无论是通过post方式还是get方式提交的request,最终都会交由doService()处理。
doService()中的处理逻辑大致分以下六个步骤:
1.if(request是MultiPart,即文件上传) 则将request解析并包装成MultipartHttpServletRequest
2.mappedHandler = getHandler(request)根据request得到相应的处理器
3.调用注册的所有拦截器的preHandle方法
4.调用处理器
    HandlerAdapter ha = new getHandlerAdapter(mappedHandler.getHandler());
    ModelAndView mv = ha.handle(req, res, mappedHandler.getHandler())//这里使用了adapter模式
5.调用注册的所有拦截器的postHandle方法
6.绘制mv

也许Spring不像Struts、hibernate那样是使用最为广泛的,但他是全面的、轻量级的、足够灵活的、容易替换、容易扩展的。
SpringWeb是SpringFramework中的一个部分,而DispatcherServlet又是SpringWeb中的一小部分,要弄懂Spring以及他背后的设计思想,对我等菜鸟而言,还是有很长一段路要走的。但愿在新的一条路出现之前,我们已经走遍了这条路。
路漫漫其修远兮,吾将上下而求索。
继续研究ing...to be continue...

参考资料
Spring官方网站 http://www.springframework.org/
Spring API http://www.springframework.org/docs/api/index.html
Spring Reference Documentation http://www.springframework.org/docs/reference/index.html
Spring Framework 开发参考手册(中文版)http://www.jactiongroup.net/reference/html/index.html

刚从Spring Web Framework 0.4.pdf(By floater@cjsdn.com)看到以下两张sequence图,更能说明问题:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值