1.Listener
[1]监听器简介
> Listener是JavaWeb的三大组件之一,Servlet、Filter、Listener
> Listener翻译过来就是监听器
> 现实生活中的监听器:
- 监听谁:明星
- 监听器:朝阳群众
- 监听事件:干坏事
- 回调函数:报警
> JavaWeb中的监听器:
- 监听谁:ServletContext、HttpSession、ServletRequest
- 监听器:自己写
- 监听的事件:生命周期、属性的变化
- 回调函数:自己写
> JavaWeb中的监听器,共分为三大类,一共8个:
> WEB组件的特点:
1.都需要创建一个类并实现某个接口
2.都要在web.xml文件中进行配置
[2]监听器分类
1.生命周期监听器(3个)
2.属性变化监听器(3个)
3.session中指定类属性变化监听器(2)
[3]生命周期监听器:
> 监听ServletContext、HttpSession、ServletRequest三个对象创建和销毁
> javax.servlet.ServletContextListener --> 监听ServletContext的生命周期变化
- 方法:
void contextDestroyed(ServletContextEvent sce)
- 在ServletContext对象销毁前调用
void contextInitialized(ServletContextEvent sce)
- 在ServletContext对象创建后调用
- 参数:
ServletContextEvent
- 可以用来获取ServletContext对象
> javax.servlet.http.HttpSessionListener --> 监听HttpSession对象的生命周期变化
- 方法:
void sessionCreated(HttpSessionEvent se)
- 在HttpSession对象创建以后调用
void sessionDestroyed(HttpSessionEvent se)
- 在HttpSession对象销毁前调用
- 参数:
HttpSessionEvent
- 可以用来获取HttpSession对象
> javax.servlet.ServletRequestListener --> 监听request对象的生命周期的变化
- 方法:
void requestDestroyed(ServletRequestEvent sre)
- 在request对象销毁前调用
void requestInitialized(ServletRequestEvent sre)
- 在request对象创建后调用
- 参数:
ServletRequestEvent
- 可以用来获取ServletContext对象
- 可以用来获取ServletRequest对象
[4]属性监听器
> ServletContext属性变化监听器
javax.servlet.ServletContextAttributeListener
- 方法:
void attributeAdded(ServletContextAttributeEvent scab)
- 当我们向application域中添加属性时调用
void attributeRemoved(ServletContextAttributeEvent scab)
- 当我们从application域中移除属性时调用
void attributeReplaced(ServletContextAttributeEvent scab)
- 当application域中一个属性被替换时调用
> HttpSession的属性变化监听器
javax.servlet.http.HttpSessionAttributeListener
- 方法:
void attributeAdded(HttpSessionBindingEvent se)
- 当我们向session域中添加属性时调用
void attributeRemoved(HttpSessionBindingEvent se)
- 当我们从session中移除属性时调用
void attributeReplaced(HttpSessionBindingEvent se)
- 当session域中的一个属性被替换时调用
参数:
HttpSessionBindingEvent:
作用:
1.获取发生变化的属性的名字 getName()
2.获取发生变化的属性的值 getValue() 注意属性替换时,获取到是旧的属性值
3.获取HttpSession对象 getSession() 可以通过session对象获取到新的属性值
> ServletRequest属性变化监听器
-javax.servlet.ServletRequestAttributeListener
- 方法:
void attributeAdded(ServletRequestAttributeEvent srae)
- 当我们向request域中添加属性时调用
void attributeRemoved(ServletRequestAttributeEvent srae)
- 当我们从request域中移除属性时调用
void attributeReplaced(ServletRequestAttributeEvent srae)
- 当request域中的一个属性被替换时调用
> 监听Session中指定类的实例属性变化的监听器
- 这两个监听器的接口,由一个JavaBean去实现,而且不用编写配置文件
[5]HttpSessionBindingListener
void valueBound(HttpSessionBindingEvent event)
- 当该类实例设置进session域中时调用
void valueUnbound(HttpSessionBindingEvent event)
- 当该类的实例从session域中移除时调用
HttpSessionBindingEvent:
作用:
1.获取发生变化的属性的名字 getName()
2.获取发生变化的属性的值 getValue()
3.获取HttpSession对象 getSession()
[6]HttpSessionActivationListener
> 监听某个类的实例和session一起活化和钝化的监听器
- 方法:
void sessionDidActivate(HttpSessionEvent se)
- 当该类实例和session一起活化时调用
void sessionWillPassivate(HttpSessionEvent se)
- 当该类实例和session一起钝化时调用
- 参数:
HttpSessionEvent
- 可以用来获取HttpSession对象
2.Filter
[1] Filter简介
- Filter直译过来就是过滤器的意思
- JavaWeb中的Filter是用来过滤请求
- Filter是JavaWeb中三大组件之一:Servlet、Filter、Listener
- 三大组件都需要运行在服务器端
- 编写WEB组件有一个共同的特点:
1.编写一个类实现某个接口
2.在web.xml文件中进行配置
- Filter的作用:
1.过滤器可以在请求到达目标资源(JSP、HTML、Servlet等等)之前拦截请求
2.过滤器也可以放行请求,使请求到达目标资源
3.在响应到达浏览器之前对响应做一个处理
[2] Filter的HelloWorld
1.创建一个类实现Filter接口
2.编写web.xml配置文件
<filter>
<filter-name>Filter的别名</filter-name>
<filter-class>filter的全类名</filter-class>
</filter>
<filter-mapping>
<filter-name>Filter的别名</filter-name>
<url-pattern>要拦截的请求的地址</url-pattern>
</filter-mapping>
- url-pattern的配置规则:
1.精确匹配:只有访问的路径和url-pattern配置的路径完全一致时,才会调用Filter拦截请求
如: /index.jsp 只会拦截项目根目录下index.jsp的请求
2.路径匹配:只要访问的地址在url-pattern配置的路径下,就会调用Filter拦截请求
如: /hello/* 只要访问项目根目录下hello路径下的资源,就会调用Filter
/* 只要是当前项目下的请求都会调用Filter
3.后缀匹配: 只要访问的地址后缀和url-pattern一致,就会调用Filter拦截请求
如: *.jsp 只要访问的地址以.jsp结尾,就会调用Filter
注意:所有的url-pattern必须符合上述规则。
以上规则同样适用于Servlet的url-pattern
当使用Filter去拦截一个Servlet时,只需要将Filter的url-pattern配置和Servlet的一样即可,
同时也可以在filter-mapping中设置一个servlet-name标签,来指定要拦截的Servlet,
这样即使Servlet的url-pattern发生改变,Filter也会照常拦截
[3] Filter的生命周期
> Filter的生命周期是Filter由被创建到被销毁的过程
> Filter的生命周期方法:
构造器:服务器一启动就会创建Filter的实例,只会调用一次,Filter是单例。
init(): 构造器调用之后,马上调用,用来初始化Filter,只会调用一次。
FilterConfig:代表当前Filter的配置信息,可以获取当前Filter的初始化参数。
还可以获取ServletContext对象。
doFilter():每次拦截请求时都会调用,会调用多次。
ServletRequest:代表浏览器发送给服务器的请求报文,和Servlet中的request是一样的。
ServletResponse:代表的是服务器响应给浏览器的响应报文,和Servlet中的response是一样的。
FilterChain: 用来放行请求:
chain.doFilter(request,response) --> 放行请求,
当调用该方法时,相当于调用了目标资源的service方法。
destroy():项目卸载Filter对象销毁前调用,用来做一些如释放资源等收尾的工作,只会调用一次。
[4] Filter的执行顺序
- 为同一个WEB资源可以设置多个Filter拦截请求,多个Filter就组成了一个Filter链。
当有多个Filter时,在去调用chain.doFilter()时,
如果Filter之后还有Filter,就相当于调用下一个Filter的doFilter方法
如果Filter之后没有Filter,就相当于调用了目标资源的service()方法
- 多个Filter的执行顺序,有filter-mapping的顺序决定,filter-mapping靠前的先拦截,靠后的后拦截。
- 注意:filter-mapping一定要在filter标签的下边
[5] dispatcher
- Filter默认只会拦截直接向目标资源发送的请求。
- 我们可以在filter-mapping中通过dispatcher标签来指定拦截请求的类型:
<dispatcher>REQUEST</dispatcher>
- request表示会拦截直接向目标资源发送的请求,如果不配置dispatcher则默认值就是request
如果写了dispatcher则以写的为准
<dispatcher>FORWARD</dispatcher>
- forward表示会拦截通过转发向目标资源发送的请求
<dispatcher>INCLUDE</dispatcher>
- include表示会拦截通过动态包含向目标发送的请求
<dispatcher>ERROR</dispatcher>
- error表示会拦截通过错误页面的形式向目标发送的请求
<error-page>
<error-code>404</error-code>
<location>/4.jsp</location>
</error-page>
[6] HttpFilter
转载请注明出处!
http://www.cnblogs.com/libingbin/
感谢您的阅读。如果文章对您有用,那么请轻轻点个赞,以资鼓励。
- Listener监听器和Filter过滤器
Listener监听器 WEB中的监听器 WEB 中的 Listener 和 Filter 是属于 Servlet 规范中的高级的技术.WEB中的监听器共有三类八种(监听三个域对象)* 事件源:Ser ...
- 02 Filter过滤器
Filter 一.Filter过滤器 Filter过滤器它是JavaWeb的三大组件之一.三大组件分别是:Servlet程序.Listener监听器.Filter过滤器 Filter过滤器是JavaE ...
- 15 Filter过滤器和Listener监听器
1.Filter:过滤器 (1) 概念:生活中的过滤器:净水器,空气净化器,土匪.web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能.过滤器的作用:一般用于完成通用的 ...
- Filter过滤器Listener:监听器
Filter过滤器 1. 概念 web中的过滤器:当访问服务器资源是,过滤器可以将请求拦截下来,完成一些特殊功能: 过滤器的作用 完成通用的操作:例如登录验证.统一编码处理.敏感字符过滤... 快速入 ...
- java web.xml listener servlet 和filter加载顺序
在该项目中总会遇到一些关于加载的优先问题.最近遇到了同样的类别似的,所以,如果你发现信息汇总下,以下是转载其他一些人,毕竟,人们写的不错.它不重复创建的轮.只是略作修改自己的观点. 首先能够肯定的是, ...
- .jsp文件的使用和理解以及一些小练习和Listener监听器
什么是 jsp,它有什么用? jsp 的全换是 java server pages.Java 的服务器页面.jsp 的主要作用是代替 Servlet 程序回传 html 页面的数据.因为 Servle ...
- 什么是Listener监听器
什么是Listener监听器 1,Listener 监听器它是JavaWeb的三大组件之一.JavaWeb的三大组件:Servlet程序,Filter过滤器,Listener监听器. 2,Listen ...
- listener监听器
前言:之前写了一篇关于Filter的文章:http://tianweili.github.io/blog/2015/01/26/java-filter/,现在再来一篇Listener的,Filter和 ...
- 【Servlet】Java Serlvet Listener 监听器
Listener监听器 Servlet规范中定义的一种特殊的组件,用来监听Servlet容器产生的事件并进行相应的处理 容器产生的事件分类 - 生命周期相关的事件 - 设置和删除Attribute数据 ...
随机推荐
- C#:Func的同步、异步调用
using System; namespace ActionDemo { class Program { static void Main(string[] args) { Console.Write ...
- css异常
1.0 样式的引用顺序不对会导致样式显示不正常.个人推荐:把别人写好的样式引用在最前面,自己写的放在后面. 2.0 UC手机浏览器 UC手机浏览器在识别到页面文字很多的情况下会自动放大字体优化阅读体验 ...
- C#的变迁史 - C# 2.0篇
在此重申一下,本文仅代表个人观点,如有不妥之处,还请自己辨别. 第一代的值类型装箱与拆箱的效率极其低下,特别是在集合中的表现,所以第二代C#重点解决了装箱的问题,加入了泛型.1. 泛型 - 珍惜生命, ...
- Redis系列四之复制
一.复制基本配置与演示 为了避免单点故障,Redis提供了复制功能,可以实现自动同步的过程. 1.配置 同步后的数据分为两类:一类是主数据库(master),一类是从数据库(slave).主数据库可以 ...
- Git合并特定commits 到另一个分支
https://ariejan.net/2010/06/10/cherry-picking-specific-commits-from-another-branch/ http://blog.csdn ...
- IOS----友盟推送详解
这两天好好的研究了下推送这功能,关于它我将分成两部分来讲,一.IOS手机端,二.Servlet服务端,今天先讲下IOS端 一.感受 下面讲下我对推送这个功能在IOS下的感受,这个算是我做了服务端的功能 ...
- String和StringBuffer的区别
1.选自http://szh-java.iteye.com/blog/1666630 String 1,Stirng是对象不是基本数据类型 2,String是final类,不能被继承.是不可变对象,一 ...
- 【局部特征】ASIFT
由于相机正面白摄物体时,相机的光轴方向可能发生变化,带来扭曲.而SIFT算法虽具有完全的尺度不变性,但不具有完全的仿射不变性,对拍摄角度发生大角度空间变化的图像特征提取有一定的局限性.ASift通过模 ...
- 硬盘空间满导致mysql ibd文件被删后提示Tablespace is missing for table 'db_rsk/XXX"
昨天一早,开发人员反馈说一个测试环境报Tablespace is missing for table 'db_rsk/XXX",周末刚升级过,特地让开发回去查了下,说脚本中肯定没有drop ...
- Linux IO函数的使用和区别
Linux系统中的IO函数主要有read.write.recv.send.recvmsg.sendmsg.readv.writev,本篇主要介绍他们的使用以及区别. read函数: #include ...