web.xml加载过程

1、容器读取web.xml配置文件的两个节点: <listener></listener>和<context-param></context-param>

2、容器创建ServletContext(即application),这个上下文将被Web项目的所有部分共享

3、<context-param></context-param>的name作为键,value作为值,键值对存入ServletContext

4、容器创建<listener></listener>的类实例,再根据listener-class创建监听器,

监听器的初始化方法为:contextInitialized(ServletContextEvent args),ServletContextEvent,顾名思义可知监听上下文事件,

在启动应用时,系统会调用此方法,此方法中有:ServletContextapplication=ServletContextEvent.getServletContext();获取上下文,

这样,我们可以通过:application.getInitParameter("context-param的键");来获取键值,并完成一些操作

举例如下:

如果想在项目启动之前就打开数据库,可先在<context-param>中设置数据库的连接方式(驱动、url、user、password)等,再创建类实例,创建监听器,在监听器中获取这些参数并初始化数据库的连接。

这个监听类,除了初始化方法,它还有销毁方法,可用于关闭应用前释放资源。比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统会调用Listener的该方法。

5、容器读取<filter></filter>,根据指定的类路径来实例化过滤器(类似于listener)。

以上为容器还没有完全启动时就完成的工作

6、Servlet在第一次发起请求时被实例化。

总的来说,web.xml的加载顺序是:<context-param>-><listener>-><filter>-><servlet>。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载

原文地址:https://www.cnblogs.com/yanze/p/10374411.html