filter过滤器_Day048-过滤器(filter)和监听器(listener)

第97次(过滤器filter)

学习主题:过滤器filter

学习目标:

1 掌握 filter的作用

2 掌握filter的编写

1. 过滤器的介绍

(1) 说说你对过滤器的理解,以及你觉得过滤器的作用是什么?

拦截请求,对请求进行校验,符合要求才调用对应Servlet处理请求,确保安全性。可以统一编码格式,进行session管理,进行权限管理等。

2. 过滤器的创建和配置

(1) 创建过滤器要实现的接口是?

Filter

(2) 创建的过滤器类中需要实现的三个方法是?

init(FilterConfig filterConfig)

doFilter(ServletRequest request, ServletResponse response,FilterChain chain)

destroy()

(4) 在web.xml中配置过滤器的代码是?

458a3232e63d057ec141fb9621254100.png

3. 过滤器之doFilter和init和destory方法

(1) doFilter方法的作用是?参数是及作用是?。

作用:服务器在接受到浏览器发过来的请求后,先解析请求信息,创建对象request和response然后根据请求URL地址判断,如果符合过滤器的过滤范围,则会调用过滤器中的doFilter来进行请求拦截,并将requeset和response对象作为实参传递给doFilter方法。我们可以在doFilter方法中声明过滤器拦截代码。

(2) init方法的执行时机是?

服务器启动时调用

(3) destory方法的执行时机是?

服务器关闭时调用

4. 过滤器之拦截范围的配置

(1) 过滤器的拦截范围的配置是?及拦截的范围是什么?

458a3232e63d057ec141fb9621254100.png

拦截所有:/*

拦截部分Servlet的请求:*.do

拦截指定Servlet的请求:和要拦截的指定的Servlet的url-pattern配置完全一致,例如:/my

5. 过滤器案例之统一请求编码格式

(1) 使用过滤器完成编码格式的统一设置。

9e9c72b563d3d5df4739b7d8e95daf5c.png

第98次(listener 监听器)

学习主题:listener 监听器

学习目标:

1 掌握监听器的作用

2 掌握监听器的编写

13. 监听器的使用之监听request对象

(1) 监听request对象的两个接口什么?

ServletRequestListener、ServletRequestAttributeListener

(2) 监听request对象的两个接口的方法是?作用分别是?

requestInitialized(ServletRequesetEvent sre) 监听request的创建

requestDestroyed(ServletRequestEvent sre) 监听request的销毁

监听request作用域数据的变更

attributeAdded(ServletRequestAttributeEvent srae)

attributeRemoved(ServletRequestAttributeEvent srae)

attributeReplaced(ServletRequestAttributeEvent srae)

(3) 在web.xml配置监听器的标签是?给出一个配置示例

<listener>

<listener-class>监听器类的包名和类名</listener-class>

</listener>

<listener>

<listener-class>com.ab.listener.MyListener</listener-class>

</listener>

14. 监听器之监听session和application对象

(1) 监听session对象的接口是?

HttpSessionListener、HttpSessionAttributeListener

(2) 监听session对象的接口的方法分别是?作用是?

监听session的创建和销毁

sessionCreated(HttpSessionEvent se)

sessionDestroyed(HttpSessionEvent se)

监听session作用域的数据的变更

attributeAdded(HttpSessionBindingEvent event)

attributeRemoved(HttpSessionBindingEvent event)

attributeReplaced(HttpSessionBindingEvent event)

(3) 监听application对象的接口是?

ServletContextListener、ServletContextAttributeListener

(4) 监听application对象的接口的方法分别是?作用是?

监听application对象的创建和销毁

contextInitialized(ServletContextEvent sce)

contextDestroyed(ServletContextEvent sce)

监听application对象的数据的变更

attributeAdded(ServletContextAttributeEvent event)

attributeRemoved(ServletContextAttributeEvent event)

attributeReplaced(ServletContextAttributeEvent event)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Java 中可以通过监听器Listener)来监听 Map 数据的变化。具体实现步骤如下: 1. 定义一个 Map 监听器接口,并声明对 Map 数据变化的响应方法: ``` public interface MapListener<K, V> { void onPut(K key, V value); // 添加元素时触发 void onRemove(K key); // 删除元素时触发 void onClear(); // 清空 Map 时触发 } ``` 2. 实现 Map 监听器接口: ``` public class MyMapListener<K, V> implements MapListener<K, V> { @Override public void onPut(K key, V value) { // 处理添加元素事件 } @Override public void onRemove(K key) { // 处理删除元素事件 } @Override public void onClear() { // 处理清空 Map 事件 } } ``` 3. 在需要监听的 Map 中添加监听器: ``` Map<K, V> map = new HashMap<>(); MapListener<K, V> listener = new MyMapListener<>(); map.addMapListener(listener); ``` 在此基础上,我们还可以实现一个可观察的 Map 类,使其能够在数据发生变化时通知所有注册的监听器。具体实现可以参考下面的代码: ``` public class ObservableMap<K, V> extends HashMap<K, V> { private List<MapListener<K, V>> listeners = new ArrayList<>(); public void addMapListener(MapListener<K, V> listener) { listeners.add(listener); } public void removeMapListener(MapListener<K, V> listener) { listeners.remove(listener); } @Override public V put(K key, V value) { V oldValue = super.put(key, value); for (MapListener<K, V> listener : listeners) { listener.onPut(key, value); } return oldValue; } @Override public V remove(Object key) { V value = super.remove(key); for (MapListener<K, V> listener : listeners) { listener.onRemove((K) key); } return value; } @Override public void clear() { super.clear(); for (MapListener<K, V> listener : listeners) { listener.onClear(); } } } ``` 使用时,只需要创建一个 ObservableMap 对象,并添加监听器即可: ``` ObservableMap<K, V> map = new ObservableMap<>(); MapListener<K, V> listener = new MyMapListener<>(); map.addMapListener(listener); ``` 这样,当 Map 中的数据发生变化时,所有注册的监听器都会得到相应的通知。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值