当前位置 博文首页 > mataodehtml的博客:java学习之路——第五十九天
?一、监听器:Listener
?????? 监听某一件时间的繁盛,状态的改变
监听器的本质:接口回调(内部机制)
?????? 需求:A在执行循环,当循环到一个条件的时候,通知B
?????? 事先先把一个对象传递给A,当A执行到一个条件的时候,通过这个对象来调用B中的方法,但是不是直接传递B的实例,而是传递一个接口的实例过去。(主要用到多态的机制)
?
1.web中的监听器
?????? 有八个,三种
?????? 一、监听三个作用域创建和销毁
?????? request? ----? httpServletRequest
?????? session? ----? httpSession
?????? application ---- ServleContext
?????? (1) ServletContextListener? 接口
????????????? ServletContext 创建: 启动服务器的时候
????????????? ServletContext 销毁:? 关闭服务器,从服务器移除项目
?????? (2) ServletRequestListener? 接口
????????????? request创建:访问服务器上的任意资源都会有请求出现
????????????? request销毁:服务器已经对这次请求作出了响应
?????? (3) HttpSessionListener??? 接口
????????????? session创建:只要调用了getSession????
html中不行,jsp中有session内置对象,可以,servlet中调用了getSession就可以
????????????? session销毁:超时? 30分钟
?????????????????????????????????? 非正常关闭(销毁)
?????????????????????????????????? 正常关闭服务器(序列化)
?????? 作用:ServletContextListener:利用它来在servletContext创建的时候:1、在完成自己想要的初始化工作;2、执行自定义任务调度,执行某一个任务Timer
????????????? HttpSessionListener:统计在线人数
?
?????? 二、监听三个作用域属性状态变更
????????????? 可以监听在作用域中值的 添加 | 替换 | 移除 的动作
?????? ServletContext ---- ServletContextAttributeListener
?????? request? ---- ServletRequestAttributeListener
?????? session? ---- HttpSessionAttributeListener
?
?????? 三、监听HttpSession里面存值的状态变更
????????????? 前二个类型的监听器需要在xml中注册信息,这类的监听器不需要注册信息
????????????? HttpSessionBindirngListener
????????????? 对象与Session绑定和解除绑完的动作
????????????? 让JavaBean实现该接口即可:
??????
????????????? HttpSessionActivationListener:
????????????? 用于监听现在session的值是钝化(序列化)还是活化(反序列化)的动作
?????? 钝化(序列化)
????????????? 把内存中的数据存储到硬盘上;
?????? 活化(反序列化)
????????????? 把硬盘中的数据读取到内存中
session的钝化活化的用意何在?
?????? session中的值可能会很多,并且我们有很长一段时间不使用这个内存中的值,那么可以考虑把session的值存储到硬盘上【钝化】,等下一次在使用的时候,在从硬盘上提取出来:【活化】。
?????? 如何让session在一定时间内钝化?
????????????? 做配置即可;
?
Filter:过滤器
?????? 就是对客户端发出来的请求进行过滤,浏览器发出,然后服务器派servlet处理,在中间就可以过滤,其实过滤起到拦截的作用;
?????? 作用:1.对一些敏感词汇进行过滤;
????????????? 2.统一设置编码
????????????? 3.自动登录
?
如何使用Filter:
?????? 1.定义一个类,实现Filter;
?????? 2.注册过滤器;
????????????? 在web.xml里面注册,注册的手法与servlet基本一样
?
Filter的声明周期:
?????? 创建:在服务器启动的时候就创建
?????? 销毁:服务器停止的时候
?
Filter的执行顺序:
?????? 1.客户端发出请求,先经过过滤器,如果过滤器方形,那么才能到servlet
?????? 2.如果有多个过滤器,那么他们就会按注册的映射顺序来排队,只要有一个过滤器不放行,那么后面排队的过滤器以及我们的servlet都不会收到请求。
?
细节:
?????? 1.init方法的参数FilterConfig,可以用于获取filter在注册的名字以及初始化参数,其实这里的设计初衷与servletConfig是一样的。
?????? 2.如果想放行,那么在doFilter方法里面操作,使用参数chain
?????? chain.doFilter(request,response);放行,让请求达到下一个目标
?????? 3.<url-pattern>/*</url-pattern>写法格式与servlet一样
?????? 4.针对dispatcher设置:
????????????? (1)REQUEST:只要是请求过来,都拦截,默认就是REQUEST
????????????? (2)FORWARD:只要是转发,都拦截
????????????? (3)ERROR:页面出错发生跳转
????????????? (4)INCLUDE: 包含页面的时候就拦截
cs