基于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-mapping的url-pattern配置的过滤器的执行顺序决定于它的配置顺序(filter-mapping的配置顺序)
多个用filter-mapping的servlet-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