JAVAWEB---监听器接口和过滤器接口

目录

监听器接口:

介绍:

域对象:

定义:

分类:

实现步骤:

 共享数据变化:

监听器应用介绍:

过滤器接口:

介绍:

实现步骤

 进行合法性判断:

增强

FilterChain接口:

介绍:

 实现结果:

恶意登录

介绍:

如何解决:

Session弊端:

解决办法:


监听器接口:

介绍:

  1. 来自于Servlet规范中
  2. 专门用于监听【域对象生命周期变化】以及【域对象共享数据变化情况】
  3. 监听器接口实现类,只能由开发人员负责实现

域对象:

定义:

在某一个范围之内,可以为Servlet之间提供共享数据的对象

分类:

ServletContext application:全局作用域对象,在Tomcat运行期间,可以为当前工程中所有的Servlet提供共享数据

HttpSession session:会话作用域对象,在一次会话过程中,为参与本次会话的Servlet提供共享数据

HttpServletRuest request:请求作用域对象,在一次请求处理过程中,比如【请求转发】,为参与本次请求的所有Servlet提供共享数据

实现步骤:

  1. 根据监听的目标对象,选择一个合适监听器接口来实现
  2. 重写监听器接口中监听处理方法
  3. web.xml注册监听器,通知Tomcat

 

 共享数据变化:

ServletContextAttributeListener

application.setAttribute("key",100);新增共享数据

application.setAttribute("key".200);更新共享数据

application.removeAttribute("key");删除共享数据

监听器应用介绍:

  1.  jdbc操作数据库的时间消耗的地方:
    1. Connection的创建
    2. Connection销毁
  2. JDBC运行时提升数据解决方案
    1. JDBC运行时,既不创建Connection,也不销毁Connection
  3. 数据库连接池管理方案
    1. 在项目启动过程中,预先创建一定数量的Connection
    2. 在用户来访时,将一个空闲的Connection交给JDBC来使用
    3. 在用户访问完毕后,将本次使用Connection至于【空闲状态】以备下一个客户使用
    4. 在项目关闭时,将这些Connection来集中销毁
  4. 数据库连接池实现难点
    1. 如何确保Connection在项目运行期间一致处于存活状态:使用application引用这些Connection
    2. 如何得知项目启动时刻,和项目关闭时刻:使用ServletContextListener

过滤器接口:

介绍:

  1. 来自于Servlet规范中一个接口
  2. 过滤器接口可以在请求到达目标资源文件之前进行拦截,从而可以判断【本次请求是否合法】或者【对拦截请求进行增强】
  3. 过滤器接口实现类需要由开发人员负责实现

实现步骤

  1. 创建一个Filter接口实现类
  2. 重写doFilter方法
    1. 对拦截的请求合法性进行判断
    2. 对拦截的请求进行增强处理
  3. web.xml注册过滤器
    1.  让Tomcat在启动时,负责创建过滤器对象,通知Tomcat,何种请求将会被过滤器拦截处理

 进行合法性判断:

通过判断其年龄来判断是否能访问这个图片

 

 

用户可以访问该图片

增强

实例:

两个网站都需要UTF-8解析,怎样只写在一个地方,就可以解决?(这样做可以在修改的时候只修改一处即可)

解决方案:

利用过滤器

FilterChain接口:

介绍:

  1. 接口实现类依然是由Tomcat负责提供
  2. 本质上就是一个数组
  3. 数组存放对本次请求进行拦截的所有过滤器对象
  4. 过滤器链条相当于一个调度,决定哪一个过滤器先执行,哪一个过滤器后执行 

 实现结果:

Filter 链中各个 Filter 的拦截顺序与它们在 web.xml 文件中 <filter-mapping> 元素的映射顺序一致,由于 MyFilter01 的 <filter-mapping> 元素位于 MyFilter02 的 <filter-mapping> 元素前面,因此,用户的访问请求首先会被 MyFilter01 拦截,然后再被 MyFilter02 拦截。

恶意登录

介绍:

是说用户没有点击页面的按钮,直接通过地址栏来访问

如何解决:

用Session,来访问的时候每次都需要判断一下来访用户是否有Session,是否合法

Session弊端:

  1. 需要在所有被保护的Servlet中,进行重复性判断处理,增加了冗余开发,必然提高耦合度,增加项目维护难度
  2. 只能保护动态资源文件,没有办法保护静态资源文件

解决办法:

用过滤器,只需要在过滤器中判断,就可以访问动态资源文件,或者静态资源文件,避免了重复性,修改时,只需要修改一处

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值