Spring-MVC 源码分析(二):DispacherServlet 初始化
DispatcherServlet

?
?
? ??Servlet是?Servlet规范中规定的一个服务器组件的接口,任何一个可以处理用户请求的服务器组件需要实现这个接口,?Web容器就是根据?URL到?Servlet的映射派遣一个?HTTP请求到这个?Servlet组件的实现,进而对这个HTTP请求进行处理,并且产生?HTTP响应。
?
通用?Servlet(GenericServlet)是?Servlet的一个抽象实现。这个实现是和协议无关的。它提供了?Servlet应该具有的基础功能。例如,保存?Servlet配置,为后来的操作提供初始化参数和信息等等。
?
HTTP Servlet(HttpServlet)是针对?HTTP协议对通用?Servlet的实现。它实现了?HTTP协议的一些基本操作。例如,根据?HTTP请求的方法分发不同类型的?HTTP请求到不同的方法进行处理。对于简单的?HTTP方法?(HEAD, OPTIONS, TRACE)提供了通用的实现,这些实现在子类中通常是不需要重写的。而对其他的业务服务类型的方法?(GET, POST, PUT, DELETE)提供了占位符方法。子类应该有选择的根据业务逻辑重写这些服务类型方法的实现。
?
HTTP Servlet Bean(HttpServletBean)是?Spring Web MVC的一个抽象实现。它提供了一个特殊的功能,可以将Servlet配置的初始化参数作为?Bean的属性,自动赋值给?Servlet的属性。子类?Servlet的很多属性都是通过这个功能进行配置的。
?
Framework Servlet(FrameworkServlet)也是一个抽象的实现。在这个是层次上,它提供了加载一个对应的Web应用程序环境的功能。这个?Web应用程序环境可以存在一个根环境,这个根环境可以是共享的也可以是这个Servlet或者几个?Servlet专用的。它也提供了功能将?HTTP GET, POST, PUT, DELETE方法统一派遣到?Spring Web MVC的控制器方法进行派遣。在派遣前到处请求环境等信息到线程的局部存储。
?
派遣器?Servlet(DispatcherServlet)是这个继承链中最后一个类,它是?Spring Web MVC的核心实现类,它在框架Servlet中加载的?Web应用程序环境中查找一切?Spring Web MVC所需要的并且注册的组件,如果一个需要的Spring Web MVC组件没有注册,则通过缺省策略的配置创建并且初始化这些组件。在一个?HTTP请求被派遣的时候,它使用得到的?Spring Web MVC组件进行处理和响应。
HTTP协议支持各种类型的方法,其中包括,?GET, POST, PUT, DELETE, HEAD, OPTIONS, TRACE。
GET方法将请求参数放在请求的头中,请求服务器做某些服务操作并返回响应。POST方法从客户机向服务器传送数据,并可能要求服务器做出某些服务操作进行响应。PUT方法请求将一个资源放在服务器的某个路径下。DELETE方法请求将服务器某路径下的一个资源删除。HEAD要求服务器查找某对象的头信息,包括应该包含的请求体的长度,而不是对象本身。OPTION方法用来查询服务器的实现信息。TRACE多数情况下用在调试目操作上。DispatcherServlet 类有一个重要的初始化方法initStrategies(ApplicationContext context),这方法可以被子类重写
?第一步:javax.servlet.GenericServlet 的init(ServletConfig)是Servlet初始化的入口?第三步:org.springframework.web.servlet.FrameworkServlet
No1:initServletBean?No2:?initWebApplicationContext?No3:?createWebApplicationContext?org.springframework.web.servlet.DispatcherServlet
No1:?onRefresh?No4:?initLocaleResolver?No5: ?initThemeResolver 与?initLocaleResolver 类似
No6: ?initHandlerMappings?No7:?initHandlerAdapters(), initHandlerExceptionResolvers()和initViewResolvers ()同样是对多值组件进行初始化,他们和initHandlerMappings()具有相同的实现
No8: 缺省的配置策略实现?