基于web.xml的web应用的启动过程


基于web.xml的web应用的启动过程

目录
  • 基于web.xml的web应用的启动过程
    • 一、一个标准的web.xml
    • 1.1 listener
    • 1.2 context-param
    • 1.3 servlet
    • 1.4 filter
  • 二、web.xml的加载过程

一、一个标准的web.xml

先来看下一个标准的web.xml中都配置了哪些内容

<?xml version="1.0" encoding="utf-8"?>


    
        com.lyy.listener.MyServletContextListener
    

    
        username
        zhangsan
    

    
        password
        123
    

    
        helloServlet
        com.lyy.servlet.HelloServlet
        
            name
            tom
        
        1
    

    
        helloServlet
        /hello
    

    
        myFilter
        com.lyy.filter.MyFilter
        
            filterName
            fff
        
    
    
        myFilter
        /*
    


从上到下,分别配置了

1.1 listener

listener,这个标签中配置的类必须是ServletContextListener这个类的实现类,该接口能够用来监听ServletContext 对象的生命周期,当web容器启动或终止的时候,会触发ServletContextEvent 事件,该事件会由这个接口的实现类来处理。这个接口中分别定义了两个对应容器启动和终止时间的方法

1.2 context-param

这个标签下配置的是上下文参数,这个标签下配置的参数会被挂在ServletContext对象上,整个应用内都可以使用

1.3 servlet

这里配置servlet,容器启动的时候是否初始化servlet取决于load-on-startup的配置,当值为0或者大于0时,表示容器启动时就初始化,当是负数或者没配置时,启动容器时不会初始化,第一次访问该servlet时会进行初始化。

配置多个servlet时,这个参数的值越小的越早启动。

1.4 filter

这个标签用来配置过滤器,

多个用filter-mappingurl-pattern配置的过滤器的执行顺序决定于它的配置顺序(filter-mapping的配置顺序)

多个用filter-mappingservlet-name配置的过滤器的执行顺序决定于它的配置顺序(filter-mapping的配置顺序)

用url-pattern配置的过滤器会比用servlet-name配置的过滤器先执行。

二、web.xml的加载过程

(1) 启动一个web工程的时候,web容器(tomcat)会去加载web.xml文件,读取listener和context-param这两个标签

(2) 容器会创建一个ServletContext对象,这个对象整个应用范围内都可以使用,然后会把context-param标签中配置的参数加到这个对象中,所以其他地方就可以获取到

(3) 容器创建listener标签中配置的监听器的类,当ServletContextEvent事件被触发的时候,这个监听器类中对应的方法就会被执行。

(4) 容器创建并初始化filter

(5) 根据load-on-startup的配置,决定是否初始化servlet

所以web.xml的总的加载顺序是这样的

context-param>listener>filter>servlet