此博客是本人从学生时代开始做笔记所用, 部分是工作所遇问题,做填坑笔记,部分闲来查阅资料,加上自己的理解所总结的学习笔记, 常忙得不可开交,若漏了资料来源,望通知~ 前路漫漫,写点东西告诉自己正在一点点进步,而不要迷失于繁忙。

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中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载

 

posted @ 2019-02-14 14:26  炎泽  阅读(225)  评论(0编辑  收藏  举报