Listener&Filter

Listener

监听器
内部机制:接口回调

WEB监听器

共8个,三类

监听三个作用域创建和销毁

request–httpServletRequest
session–httpSession
application–ServletContext

1.ServletContextListener
启动服务器时创建ServletContext
关闭服务器或从服务器移除项目时销毁ServletContext
可利用Listener完成想做的初始化工作,执行自定义任务调度

2.ServletRequestListener
访问服务器任何资源创建Request
对请求作出响应销毁Request
3.HttpSessionListener
调用getSession创建session
超时或关闭服务器销毁session
Listener可统计在线人数

注册位置
在web.xml中


监听三个作用域属性状态变更

可监听作用域中 值添加/替换/移除的运作

request–ServletRequestAttributeListener
session–HttpSessionAttributeListener
application–ServletContextAttributeListener

方法:
attributeAdded()
attributeRemoved()
attributeReplaced()

监听httpSession里存的状态变更

不用注册

1.HttpSessionBindingListener

javabean实现该接口:
public class ** implements HttpSessionBindingListener {
public void valueBound(…) {
}
public void valueUnBound(…) {
}
}

2.HttpSessionActivationListener
监听session的值是钝化(序列化)还是活化(反序列化)
钝化(序列化):把内存数据存到硬盘
活化(反序列化):把硬盘数据读到内存
// 钝化
void sessionWillPassivate(…)
// 活化
void sessionDidActivate(…)

public class ** implements HttpSessionActivationListener, Serializable

用意:
session中的值可能很多,且有很多一段时间不使用,可考虑把session中的值存储到硬盘上,等下次再使用时,再从硬盘上取出来。

如何让session一定时间进行钝化
1.在tomcat中conf/context.xml配置
对所有运行在这个服务吕的项目生效
2.在conf/Catalina/localhost/context.xml配置
对localhost生效
3.在自己web工程中的META-INF/context.xml配置
只对当前工程生效

maxIdleSwap:1分钟不用就钝化
directory:钝化后的文件存放的目录位置

Filter

过滤器,对客户端发出的请求进行过滤

作用:
1.对敏感y词汇进行过滤
2.统一设置密码
3.自动登录

implements Filter

方法:
doFilter()
init()

注册(web.xml):
与servlet配置基本一致
/*

Filter的生命周期

创建:服务器启动时
销毁:服务器停止时

Filter执行顺序

请求先经过过滤器,再到达servlet

如有多个过滤器,按注册映射顺序

Filter细节

1.init的参数filterConfig可用于获取filter注册的名字和初始化参数,与servletConfig很相似
2.如需要放行,在doFilter方法中,使用chain继续调用doFilter
3.url-pattern:
全路径匹配:以/开始
目录 匹配:以/开始,以结束
以后缀名匹配:以
开始,后缀名结束
4.针对dispatcher配置
REQUEST:只要是请求都拦截
FORWARD:只要是转发都拦截
ERROR:页面出错发生跳转
INCLUDE:包含页面的时候拦截
REQUEST|FORWARD

自动登录

filter收到请求后执行过程:
1.没有cookie时,直接放行
2.有cookie时,找到用户名密码,执行登录操作,用session保存用户,放行

beanutils

JAR:
commons-beanutils.jar
commons-logging.jar

// 因BeanUtils不支持String到Date的转换,自己提供转换器,并注册进来
ConvertUtils.register(new MyDateConverter(), Date.class);

BeanUtils.populate(bean, request.getParameterMap());

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值