GenericServlet:继承servlet,获取servlet上下文,获取initParameter等等常用的功能
但是这个三个生命周期方法都没有实现(init,service,destroy),实现service还需要判断doget 或者 dopost等等
HttpServlet:继承GenericServlet,还是实现http协议,将service()生命周期方法实现了
下面属于spring框架内容
HttpServletBean:继承HttpServlet,init方法简单初始化servlet上下文资源等操作,提供initServletBean去实现init
FrameworkServlet:
1.继承HttpServletBean,真正实现init,
2.initServletBean会去通过initWebApplicationContext实现spring子容器初始化,spring ioc 和 springmvc是父子容器,启动tomcat的时候就会加载web.xml中的监听器监听到,从而创建ioc容器,里面是各种service,bean,dao,
(这里的子容器是springmvc的容器,里面放着web层的所有组件,处理器映射器,处理器适配器,视图解析器,controller等,由于父容器先创建,子容器后创建。所以父容器的引用会保存在子容器一份,所以可以通过子容器获取父容器的实例,然后再获取其中的bean)
3.initWebApplicationContext 最重要的就是对spring子容器的创建和刷新。(其中刷新方法onRefresh由子类实现)
DispatcherServlet:继承FrameworkServlet,通过initStrategies进行刷新spring子容器
初始化九大加载策略
protected void initStrategies(ApplicationContext context) {
initMultipartResolver(context); //MultipartResolver是spring提供的文件上传解析器的接口
initLocaleResolver(context); //国际化,会去寻找本地策略文件,初始化本地化解析器,根据所在地浏览器显示资源
initThemeResolver(context); //主题管理配置,动态更换样式的支持(大概就是把网站版面的css样式表和图片之类的文件和网站的程序进行解耦,程序读取theme的持久化配置,然后找到相应的css样式表和图片,配置网站版面)
initHandlerMappings(context); //请求分发(HandlerMappings是一个List<HandlerMapping>类型数据,也就是说初始化可以存放多种Mapping,和其他几种组件加载方式一样,如果用户没有在配置文件选择 HanderMapping则会到DispatcherServlet.properties文件获取)
initHandlerAdapters(context); //请求handler处理器
initHandlerExceptionResolvers(context); //请求异常(由对象实现的接口,可以解析在处理程序映射或执行期间抛出的异常,尤其是在视图解析是发生的异常错误。 HandlerExceptionResolver实现者通常在应用程序上下文中注册为bean。 错误视图类似于JSP错误页面,但可以与任何类型的异常一起使用,包括任何已检查的异常,以及特定处理程序的潜在细粒度映射。)
initRequestToViewNameTranslator(context); //请求视图名,它主要与视图解析有关
initViewResolvers(context); //视图解析器(ViewResolvers是一个List<ViewResolver>类型数据,视图解析是链式的,如果一个视图解析器根据viewName和local参数没有找到对应的View,则开始使用第二的解析器来进行查询,直到找到为止。)
initFlashMapManager(context); //重定向属性存储(FlashMapManager用于检索和保存FlashMap实例的策略界面,FlashMap为一个请求提供了一种存储属性的功能,用于另一个请求中使用这些属性。这种方式通常在 一个URL重定向到另一个URL时最常需要 - 例如Post / Redirect / Get模式。FlashMap在重定向之前保存(通常在会话中),并在重定向后可用并立即删除)
}