SpringMvc杂记

1:ServletContext定义了一组Servlet和Servlet容器进行交互的方法。

2:一个web应用程序有一个ServletContext.

3:如果web应用程序是一个分布式的,ServletContext则不能作为一个全局的数据共享的位置,考虑选择其他的数据源。

4:ServletContext被包含一个ServletConfig对象中,这个对象是在Servlet被初始化的时候Web服务器提供给Servlet的。

5:Servlet被Servlet容器创建并初始化,将ServletConfig对象作为参数传入init方法中。

6:Servlet的service方法同样也会被Servlet容器调用。在成功完成Servlet的init之前,Servlet不对外提供服务。当有客户端请求时,service方法会被Servlet容器调用。

7:Servlet运行在一个多线程的环境当中,所以需要谨慎的访问共享资源。

8:ServletConfig仅仅对于当前Servlet有效。而ServletContext是全局的,可以通过ServletConfig对象获得。

9:ServletContextListener在ServletContext被容器实例化之前就已经存在了,他是最新被实例化的,会监听ServletContext的生命周期。会在初始化ServletContext和销毁ServletContext时发送时间给这个监听器。必须在Web应用的部署描述中声明(web.xml)或者通过WebListener注解(javax),或者通过定义在ServletContext中的addListener方法添加进去才能起作用。

10:spring中就有对ServletContextListener接口的实现,这个类就是ContextLoaderListener。用来启动spring的根WebApplicationContext。

11:ServletContext被创建后,这个Listener就会被调用contextInitialized方法。

12:initWebApplicationContext方法中往ServletContext中注册一个名WebApplicationContext#ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE的值为的属性。

13:可以看出,如果没有context,则根据ServletContext创建一个新的。并在ApplicationContext中存入ServletContext实例。并读取Listener的参数contextConfigLocation

14:调用WebApplicationContext的refresh方法,对spring 容器进行初始化。(初始化有做很多工作,例如在刷新工厂时会对BeanDefinition进行加载,利用NamespaceUri在spring.handlers中进行匹配解析特定的标签元素,完成工厂刷新之后注册一些WebApplicationContext的监听,对利用缓存好的BeanDefinition进行bean的实例化,实例化完成之后触发监听(其中在Springmvc中监听里的回调就是对DispatcherServlet进行初始化策略的调用,因为在解析特定标签元素时就已经对策略对象进行了实例化并存入了WebApplicationContext中))

15:完成对ServletContext的创建工作之后就对Servlet进行初始化了。

16:DispacherServlet定义了很多的Resolver,用于对请求和响应的处理。

  • multipartResolver
  • localeResolver
  • themeResolver
  • handlerMappings
  • handlerAdapters
  • handlerExceptionResolvers
  • viewNameTranslator
  • viewResolvers

17:web容器构造DispatcherServlet完成之后,调用Servlet的init方法,初始化WebApplicationContext以及相关的操作。

18:完成之后客户端发起对servlet请求时,web容器会调用servlet的service方法,利用事先定义好的resolver进行请求的处理转发。

猜你喜欢

转载自blog.csdn.net/u013828625/article/details/80321705