一、创建顺序

  1、web.xml文件中的加载顺序为:listener-filter-servlet

  2、如果web.xml中配置了<context-param>,初始化顺序:

      context-param > Listener > Filter > Servlet

二、三大Web组件的生命周期

  1、Listener:

      Listener生命周期:一直从程序启动到程序停止运行。

    1.ServletContextListener:程序启动调用Listener的contextInitialized()方法,程序停止调用Listener的contextDestroyed()方法

    2.ServletRequestListener:每次访问一个Request资源前,都会执行requestInitialized()方法,方法访问完毕,都会执行requestDestroyed()方法。

    3.HttpSessionListener:每次调用request.getSession(),都会执行sessionCreated()方法,执行session.invalidate()方法,都会执行sessionDestroyed()方法。

    4.ServletRequestAttributeListener:每次调用request.setAttribute()都会执行attributeAdded()方法,

                     如果set的key在request里面存在,就会执行attributeReplacerd()方法,

                     调用request.removeAttribute()方法,都会执行attributeRemoved()方法。
  2、Filter

    程序启动调用Filter的init()方法(永远只调用一次),程序停止调用Filter的destroy()方法(永远只调用一次),

    doFilter()方法每次的访问请求如果符合拦截条件都会调用

    程序第一次运行,会在servlet调用init()方法以后调用,不管第几次调用,都在调用doGet(),doPost()方法之前。

  3、Servlet
    程序第一次访问,会调用servlet的init()方法初始化(只执行一次),每次程序执行都会根据请求调用doGet()或者doPost()方法,程序停止调用destory()方法。

三、ServletContextListener监听器的创建与销毁

  1、contextInitialized(ServletContextEvent sce):当Servlet容器启动Web应用时调用该方法。

      在调用完该方法之后,容器再对Filter初始化,并且对那些在Web应用启动时就需要被初始化的Servlet进行加载

  2、contextDestroyed(ServletContextEvent sce):当Servlet容器终止Web应用时调用该方法。

      在调用该方法之前,容器会先销毁所有的Servlet和Filter过滤器。

四、一次请求的初始化顺序

  filter初始化(程序启动时)——requestListener初始化(请求资源前)——servlet初始化(第一次访问该servlet)——执行doFilter()( 过滤)——

      销毁requestListener(响应完成)——销毁servlet(程序关闭)——销毁filter(程序关闭)  

五、实体类实现序列化接口的意义

    将实体类对象以二进制形式保存到磁盘上,便于对象在网络中的传输,当再次加载到内存中,还能转换成完整的对象

    想要将实体类对象钝化到磁盘上,对应的实体类必须实现序列化接口

Listener、Filter、Servlet的创建及初始化顺序的更多相关文章

  1. web.xml之context-param,listener,filter,servlet加载顺序及其周边

    先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...

  2. web.xml中的主要元素说明(listener, filter, servlet)

    web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...

  3. servlet,listener,filter,interceptor的关系

    1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Servlet 技术 ...

  4. filter、servlet、interceptor的执行顺序

    1. Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链.它与Servlet的区别在于:它不能 ...

  5. (转)Servlet的生命周期——初始化、运行、销毁全部过程

    背景:面试中很基础的一个问题,所以有必要好好整理一番. Servlet体系结构是建立在 Java 多线程机制上的,它的生命周期由 Web 容器负责. 当客户端第一次请求某个 Servlet 时,Ser ...

  6. Java杂谈3——类加载机制与初始化顺序

    Java语言的哲学:一切都是对象.对于Java虚拟机而言,一个普通的Java类同样是一个对象,那如果是对象,必然有它的初始化过程.一个类在JVM中被实例化成一个对象,需要经历三个过程:加载.链接和初始 ...

  7. Spring创建Bean的顺序

    一直对Spring创建bean的顺序很好奇,现在总算有时间写个代码测试一下.不想看过程的小伙伴可以直接看结论 目录结构: 其中:bean4.bean5包下的class没有注解@Component,测试 ...

  8. [C#解惑] #2 对象的初始化顺序

    谜题 在上一篇C#解惑中,我们提到了对象的初始化顺序.当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数.那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天 ...

  9. C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序

    关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...

随机推荐

  1. AMD模块定义规范

    AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS.   模块将被异步加载,模 ...

  2. 常用的Hql语句(转)

    原文地址:http://blog.csdn.net/v123411739/article/details/28644007     尊重原创,请访问原文地址 // HQL: Hibernate Que ...

  3. 《Effective C++》学习笔记(一)

    1.const成员函数不能更改成员变量 #include <bits/stdc++.h> using namespace std; class CtextBlock { public: s ...

  4. Json解析方式

    http://blog.sina.com.cn/s/blog_628cc2b70101dydc.html

  5. stl_heap.h

    stl_heap.h // Filename: stl_heap.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...

  6. php各种验证类

    <?php /**  * 验证类  *  */ class VerifyAction{     /**      * 是否为空值      */       public static func ...

  7. 1115. Counting Nodes in a BST (30)

    A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...

  8. uoj problem 21 缩进优化

    题目: 小O是一个热爱短代码的选手.在缩代码方面,他是一位身经百战的老手.世界各地的OJ上,很多题的最短解答排行榜都有他的身影.这令他感到十分愉悦. 最近,他突然发现,很多时候自己的程序明明看起来比别 ...

  9. bzoj 3916: friends 瞎搞

    题目: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 题解: 发现字符串的长度一定为奇数. ...

  10. iOS项目添加PCH文件

    1.单击Info.plist右键单击->New File->Other->PCH File创建PCH文件 文件名设置成:项目名-Prefix  ->点击Create,创建成功. ...