springmvc项目启动加载过程

需要了解两个概念:

1、ServletContext :是web项目的上下文,可以理解为整个Web应用的全局变量,项目中所有的方法可以获取ServletContext。

2、ApplicationContext:是spring的BeanFactory的实现类,把spring所有配置加载进去,所依赖的bean创建实例,默认参数等等初始化。

springmvc web项目,web容器启动会主动加载web.xml文件,以下贴出web.xml文件内容。

以Tomcat举例,启动Tomcat之后,首先会加载web.xml文件:

  a)容器首先读取web.xml中的的配置内容和标签中配置项;

  b)紧接着实例化ServletContext对象,并将配置的内容转化为键值传递给ServletContext;

  c)创建配置的监听器的类实例,并且启动监听;

  d)随后调用listener的contextInitialized(ServletContextEvent args)方法,ServletContext = ServletContextEvent.getServletContext(); 此时你可以通过ServletContext获取context-param配置的内容并可以加以修改,此时Tomcat还没完全启动完成。

  e)后续加载配置的各类filter;

  f)最后加载servlet;

  最后的结论是:web.xml中配置项的加载顺序是context-param=>listener=>filter=>servlet,配置项的顺序并不会改变加载顺序,但是同类型的配置项会应该加载顺序,servlet中也可以通过load-on-startup来指定加载顺序。

       通过以下web.xml的配置我们可以看到,初始化加载context-param时,我们可以把配置参数或者配置文件加载到全局ServletContext(键值对形式)中。之后加载所有配置的监听器,并启动监听器的实例。在监听器创建实例完成后,会加载ServletContext中的配置,如果是配置文件则会读取文件,实现配置文件的功能(如注解扫描,bean注入,数据源配置等),如:配置文件中指定注解扫描的范围,在代码controller中添加@controller的注解,从而dispatcherServlet可以实现调用分发的功能。也可以配置一些其他的注入或者驱动。 之后会去加载过滤器,实现过滤器的功能,最后加载servet配置,做对应的配置处理。启动顺序(http请求顺序):监听器 > 过滤器 > 拦截器(context-param-->listener-->filter-->servlet-->interceptor)


    contextConfigLocation
    classpath:applicationContext.xml
  
  
    log4jConfigLocation
    classpath:log4j.properties
  
  
    org.springframework.web.util.IntrospectorCleanupListener
  
  
    org.springframework.web.context.ContextLoaderListener
  
  
    listener.SessionListener
  
  
    encodingFilter
    org.springframework.web.filter.CharacterEncodingFilter
    
      encoding
      UTF-8
    
    
      forceEncoding
      true
    
  
  
    encodingFilter
    *.do
  
  
    sessionFilter
    web.filter.SessionFilter
  
  
    sessionFilter
    *.do
  
  
    springmvc
    org.springframework.web.servlet.DispatcherServlet
    1
  
  
    springmvc
    *.do
  

 

学海无涯苦作舟

你可能感兴趣的:(javaWEB,java)