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());