当前位置 博文首页 > mataodehtml的博客:java学习之路——第五十九天

    mataodehtml的博客:java学习之路——第五十九天

    作者:[db:作者] 时间:2021-08-10 22:16

    1.16? Listener & Filter

    ?一、监听器: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