博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
过滤器与监听器
阅读量:4348 次
发布时间:2019-06-07

本文共 3677 字,大约阅读时间需要 12 分钟。

1、什么是过滤器?

过滤器是在执行某个url前所需要做的事情,url可能是某个serlvet所对应的,也有可能是jsp页面
特点:
声明式的
动态的
灵活的
模块化的
可移植的
可重用的
透明的
用处:
统一的认证处理
对用户的请求做检查、做更精确的纪录
监视或对用户所传递的参数做前置处理,如防止数据隐藏码攻击
改变图像文件的格式
对响应做编码的动作
对响应做压缩处理
对XML的输出使用xslt来转换
2、过滤器的写法
1)自定义类,实现javax.servlet.Filter接口
2)分别实现init(FilterConfig), doFilter(ServletRequest, ServletResponse, FilterChain)
destroy()
3)在web.xml中配置该filter
告诉web容器存在这么一个filter,可以使用<init-param>配置filter的初始化参数,在Filter代码中用FilterConfig对象获取初始化参数

告诉web容器此filter对哪个url进行过滤

准确地告诉filter该过滤哪个servlet
可以使用通配符过滤多个servlet

3、Filter的生命周期

*1)init(FilterConfig)初始化方法
在tomcat容器启动的时候就会对过滤器进行初始化
2)在执行其过滤的url时,先初始化该url所对应的serlvet
*3)调用filter的doFilter()方法,进行过滤,使用chain.doFilter传递给下一个过滤器或servlet
4)执行下一个过滤器的doFilter方法,或者servlet的service方法
*5)在关闭web容器时,调用 destroy()销毁过滤器
4、什么是FilterChain?
FilterChain对象是过滤器链,可以由一个Filter传递到另外的一个Filter,或者直接传递到被过滤的servlet
如果下一个是过滤器,则传递给过滤器,执行下一个过滤器的doFilter;
如果下一个是servlet,则传递给servlet。执行此servlet的service方法
使用FilterChain对象的doFilter()方法进行过滤器链的传递
doFilter(ServletRequest, ServletResponse), 会把在这里修改的request和response传递给下一个过滤器或者Servlet
在chain.doFilter前执行的方法叫前置方法
在chain.doFilter后执行的方法叫后置方法
filter1执行前置方法,filter1的doFilter到filter2, filter2执行前置方法,filter2的doFilter到servlet,
servlet执行service方法,
返回到filter2执行后置方法,
返回到filter1执行后置方法
5、过滤器中的执行顺序
根据web.xml中配置的filter的顺序来执行,如果两个或多个filter最终都是过滤同一个servlet,则按照顺序从上往下执行每个filter
6、ServletContextListener web上下文监听器
对部署在tomcat等web容器的应用的初始化和销毁进行监听
写自己的监听器实现javax.servlet.ServletContextListener接口

1 contextInitialized(ServletContextEvent sce) // 当web应用初始化时调用 的方法2 contextDestroyed(ServletContextEvent sce) // 当tomcat等web容器关闭时调用的方法

使用情景:访问人数的初始化,web应用的全局配置

7、javax.servlet.ServletContextAttributeListener 对application(ServletContext) 对象中属性的添加,移除,更新的监听

attributeAdded(ServletContextAttributeEvent scae)  //添加属性时调用的方法attributeRemoved(ServletContextAttributeEvent scae)  //移除属性时调用的方法attributeReplaced(ServletContextAttributeEvent scae) // 更新属性时调用的方法

scae.getName()可以获取到属性的名称

scae.getValue()获取到属性的值
8、javax.servlet.http.HttpSessionListener接口 对session创建与销毁的监听
tomcat容器关闭时产不调用sessionDestroyed(HttpSessionEvent se); 是在session.invalidat()或者timeout
第一次访问的时候就会创建Session,则会调用sessionCreated(HttpSessionEvent se)。并不是说在request.getSession()时调用
9、javax.servlet.http.HttpSessionAttributeListener 对session中属性的监听

1 attributeAdded(HttpSessionBindingEvent se)  //添加属性时调用的方法2 attributeRemoved(HttpSessionBindingEvent se)  //移除属性时调用的方法3 attributeReplaced(HttpSessionBindingEvent se)  //更新属性时调用的方法

10、javax.servlet.http.HttpSessionActivationListener

Activate与Passivate是用于置换对象的动作,当Session对象由于资源利用或负载平衡等原因而必须
暂时储存至硬盘或其它储存器上时(透过对象序列化),所作的动作称之为Passivate,
而硬盘或储存器上的Session对象重新加载JVM时所作的动作称之为Activate
11、javax.servlet.http.HttpSessionBingingListener
实现了该接口的其他类的对象被添加到session的属性中时或从Session中移除,而调用的

1 valueBound(HttpSessionBindingEvent event); 该类的对象被添加到session时调用2 valueUnbound(HttpSessionBindingEvent event); 该类的对象从session中移除时调用

12、javax.servlet.ServletRequestListener

监听request请求的初始化和销毁

requestDestroyed(ServletRequestEvent sre)  //请求销毁时调用requestInitialized(ServletRequestEvent src)  //请求初始化时调用

13、javax.servlet.ServletRequestAttributeListener

当设置属性到request中,或从Request中移除,更新属性所调用的

1 attributeAdded(ServletRequestAttributeEvent srae) 添加属性时调用的方法2 attributeRemoved(ServletRequestAttributeEvent srae) 移除属性时调用的方法3 attributeReplaced(ServletRequestAttributeEvent srae) 更新属性时调用的方法

14、事件对象

javax.servlet.ServletContextEvent getServletContext();javax.servlet.http.HttpSessionEvent getSission();javax.servlet.ServletRequestEvent getServletRequest();

15、java.util.Propertis类的使用

用于读取.properties文件,根据properties文件中指定的key值获取到对应的value值
参考WEB-INF目录下test.properties, ConfigUtil.java, PathUtil.java

转载于:https://www.cnblogs.com/A0926/p/5443836.html

你可能感兴趣的文章
hiho一下 第一百零七周 Give My Text Back(微软笔试题)
查看>>
常用正则表达式
查看>>
6.2.7 Math对象的使用
查看>>
Windows server 2008 R2配置多个远程连接的教程
查看>>
PHP 重置数组为连续数字索引的几种方式
查看>>
南阳理工acm 88-汉诺塔(一)
查看>>
160809308周子济第六次作业
查看>>
大型Web应用运行时 PHP负载均衡指南
查看>>
为phpStorm 配置PHP_CodeSniffer自动检查代码
查看>>
测试工具网址大全(转)
查看>>
ServiceStack DotNet Core前期准备
查看>>
webpack中‘vant’全局引入和按需引入【vue-cli】
查看>>
Date、String和Timestamp类型转换
查看>>
计算机的组成
查看>>
CSS命名规范
查看>>
初始化构造函数中定义的实体集合,方便嵌套类型的遍历
查看>>
状压dpHDU - 4856
查看>>
java.nio.ByteBuffer 类 缓冲区
查看>>
PL/SQL系列1-PL/SQL介绍
查看>>
关于render函数的总结
查看>>