Listener、Filter、Servlet的创建及初始化顺序
一、创建顺序
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的创建及初始化顺序的更多相关文章
- web.xml之context-param,listener,filter,servlet加载顺序及其周边
先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如fil ...
- web.xml中的主要元素说明(listener, filter, servlet)
web.xml中加载的顺序为:context-param ---> listener ---> filter ---> servlet. listener:主要针对的是对象的操作,如 ...
- servlet,listener,filter,interceptor的关系
1.servlet:servlet是一种运行服务器端的java应用程序,具有独立于平台和协议的特性,并且可以动态的生成web页面,它工作在客户端请求与服务器响应的中间层.最早支持 Servlet 技术 ...
- filter、servlet、interceptor的执行顺序
1. Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链.它与Servlet的区别在于:它不能 ...
- (转)Servlet的生命周期——初始化、运行、销毁全部过程
背景:面试中很基础的一个问题,所以有必要好好整理一番. Servlet体系结构是建立在 Java 多线程机制上的,它的生命周期由 Web 容器负责. 当客户端第一次请求某个 Servlet 时,Ser ...
- Java杂谈3——类加载机制与初始化顺序
Java语言的哲学:一切都是对象.对于Java虚拟机而言,一个普通的Java类同样是一个对象,那如果是对象,必然有它的初始化过程.一个类在JVM中被实例化成一个对象,需要经历三个过程:加载.链接和初始 ...
- Spring创建Bean的顺序
一直对Spring创建bean的顺序很好奇,现在总算有时间写个代码测试一下.不想看过程的小伙伴可以直接看结论 目录结构: 其中:bean4.bean5包下的class没有注解@Component,测试 ...
- [C#解惑] #2 对象的初始化顺序
谜题 在上一篇C#解惑中,我们提到了对象的初始化顺序.当我们创建一个子类的实例时,总是会先执行基类的构造函数,然后再执行子类的构造函数.那么实例字段是什么时候初始化的呢?静态构造函数和静态字段呢?今天 ...
- C#多态;父类引用指向子类对象;new和override的区别;new、abstract、virtual、override,sealed关键字区别和使用代码示例;c#类的初始化顺序
关于父类引用指向子类对象 例如: 有以下2个类 public class Father { public int age = 70; public static string name = " ...
随机推荐
- AMD模块定义规范
AMD 即Asynchronous Module Definition,中文名是“异步模块定义”的意思.它是一个在浏览器端模块化开发的规范,服务器端的规范是CommonJS. 模块将被异步加载,模 ...
- 常用的Hql语句(转)
原文地址:http://blog.csdn.net/v123411739/article/details/28644007 尊重原创,请访问原文地址 // HQL: Hibernate Que ...
- 《Effective C++》学习笔记(一)
1.const成员函数不能更改成员变量 #include <bits/stdc++.h> using namespace std; class CtextBlock { public: s ...
- Json解析方式
http://blog.sina.com.cn/s/blog_628cc2b70101dydc.html
- stl_heap.h
stl_heap.h // Filename: stl_heap.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...
- php各种验证类
<?php /** * 验证类 * */ class VerifyAction{ /** * 是否为空值 */ public static func ...
- 1115. Counting Nodes in a BST (30)
A Binary Search Tree (BST) is recursively defined as a binary tree which has the following propertie ...
- uoj problem 21 缩进优化
题目: 小O是一个热爱短代码的选手.在缩代码方面,他是一位身经百战的老手.世界各地的OJ上,很多题的最短解答排行榜都有他的身影.这令他感到十分愉悦. 最近,他突然发现,很多时候自己的程序明明看起来比别 ...
- bzoj 3916: friends 瞎搞
题目: 有三个好朋友喜欢在一起玩游戏,A君写下一个字符串S,B君将其复制一遍得到T,C君在T的任意位置(包括首尾)插入一个字符得到U.现在你得到了U,请你找出S. 题解: 发现字符串的长度一定为奇数. ...
- iOS项目添加PCH文件
1.单击Info.plist右键单击->New File->Other->PCH File创建PCH文件 文件名设置成:项目名-Prefix ->点击Create,创建成功. ...