2019-08-09

监听器和过滤器

监听器

* 作用:

* 监听request、session、application三个域对象的创建,销毁和数据的变更

* 使用:

* 1、创建一个普通java类实现指定的接口

1.监听request的创建和销毁:ServletRequestListener

* requestInitialized(ServletRequestEvent sre)

* requestDestroyed(ServletRequestEvent sre)

  形参:

  ServletRequestEvent可以获取当前监听到的request对象,对request对象的中的资源进行操作。

2.    监听request作用域数据的变更:ServletRequestAttributeListener

* attributeAdded(ServletRequestAttributeEvent srae)

* attributeRemoved(ServletRequestAttributeEvent srae)

* attributeReplaced(ServletRequestAttributeEvent srae)

* 形参:

* ServletRequestAttributeEvent可以获取当前被监听到的request中的数据。

* geName()返回监听到的数据的键和getValue()返回监听的到的数据的值。

注意:获取的值总是第一个设置的值。

3.    监听session的创建和销毁:HttpSessionListener

* sessionCreated(HttpSessionEvent se)

* sessionDestroyed(HttpSessionEvent se)

* 形参:

* 获取当前被监听到的session对象

4 、 监听session的作用域数据的变更:

* attributeAdded(HttpSessionBindingEvent event)

* attributeRemoved(HttpSessionBindingEvent event)

* attributeReplaced(HttpSessionBindingEvent event)

* 形参:

* 获取当前监听到的session中的数据 getName()返回数据的键名,getValue()返回数据的值

5.   监听application对象的创建和销毁:ServletContextListener

* contextInitialized(ServletContextEvent sce)

* contextDestroyed(ServletContextEvent sce)

* 形参:

* 获取application对象

6.   监听application对象的数据的变更:ServletContextAttributeListener

* attributeAdded(ServletContextAttributeEvent event)

* attributeRemoved(ServletContextAttributeEvent event)

* attributeReplaced(ServletContextAttributeEvent event)

* 形参:获取当前被监听的数据 getName()返回数据的键名,getValue()返回数据的值

7、在项目中的web.xml中配置监听器,让监听器生效

* <listener>

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

  </listener>

  示例:

  <listener>

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

  </listener>

案例:统计在线人数

过滤器

1.为什么需要过滤器?

* 目前我们访问Servlet,是可以直接进行访问的,没有进行任何防护。可是会造成服务器资源的浪费,以及安全性不高。我们希望真的在请求被Servlet处理之前,进行一次请求的校验,符合要求再调用对应的Servlet进行请求处理

2.过滤器使用:

2.1、创建一个普通java类并实现过滤器接口Filter

2.2、在web.xml中配置过滤器

* <filter>

<filter-name>配置的过滤器名称</filter-name>

<filter-class>要配置的过滤器的全限定路径:包名.类名</filter-class>

</filter>

<filter-mapping>

<filter-name>配置的过滤器名称</filter-name>

<url-pattern>过滤器拦截请求地址的范围</url-pattern>

</filter-mapping>

示例:

<filter>

<filter-name>myFilter</filter-name>

<filter-class>com.bjsxt.filter.MyFilter</filter-class>

</filter>

<filter-mapping>

<filter-name>myFilter</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

3.Filter接口的方法

过滤器之doFilter方法

作用: 服务器在接收到浏览器发过来的请求后,先解析请求信息,创建对象request和response

然后根据请求URL地址判断如果符合过滤器的过滤范围,则会调用过滤器中的doFilter来

进行请求拦截,并将request和response对象作为实参传递给doFilter方法。我们

可以在doFilter方法中声明过滤器拦截代码。

参数:

ServletRequest:接收此次拦截的请求的request实参

ServletResponse:接收此次拦截的请求的response实参

FilterChain:可以进行请求放行

chain.doFilter(request, response);

技能点二:过滤器之init和destory方法

init方法:服务器启动时调用

destory方法:服务器关闭时调用

证明:过滤器的生命周期为从服务器开启到服务器关闭

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

拦截所有:/*

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

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

注意:过滤器之间会出现多重拦截,如果是按照拦截拦截范围的大小在web.xml中自大而小进行的配置

则会先执行大范围的拦截器,再执行小范围的拦截器。

过滤器案例:参照整合项目中的过滤器写法

使用过滤器统一编码格式

使用过滤器进行session管理

使用过滤器进行权限管理


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

在doFilter中使用

 //设置请求编码格式

request.setCharacterEncoding("utf-8");

//设置响应编码格式

 response.setContentType("text/html;charset=utf-8");               

注意:一旦使用了过滤器,就需要在过滤其中使用编码格式设置,如果不设置,则需要在每个servlet中是设置编码格式设置。

6.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容