java web 监听器 例子_初学Java Web(8)——过滤器和监听器

内容导读

过滤器就是 Servlet 的高级特性之一, 就是一个具有 拦截/过滤 功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个 实现了 Filter 接口的 Java 类 而已。问题: 为什么非得使用过滤器,我直接在 Servlet 中作判断不行吗?开发遵循的原则: 1.DRY原则(Don't Reeat Yourself,不要重复你自己) :重复,意味着维护的成本很高。注意: 此时 表示对哪些资源做过滤/拦截。Filter 先于 Servlet 存在于服务端 在应用中 允许存在多个 Filter ,到底哪一个 Filter 先执行哪一个后执行,这 取决于在 web.xml 中定义的先后次序 (如果使用注解配置,则 Filter 的执行顺序由 Filter 的类名的字母的顺序 来决定,如 AFilter 和 BFilter,则先执行 AFilter) 一个 Filter 可以配置多个 也可以对 指定的 Servlet 做过滤(注解通过 servletNames 指定,配置由 指定) 默认情况下,Filter 只对新的请求做拦截,如果是请求转发,则不会过滤。过滤器实例 作用: 1. 监听 web 应用的创建和销毁 2. attribute发生的变化。

c28b2fc8f7e6031fd348f694afb4dc84.png

什么是过滤器

过滤器就是 Servlet 的高级特性之一,就是一个具有拦截/过滤功能的一个东西,在生活中过滤器可以是香烟滤嘴,滤纸,净水器,空气净化器等,在 Web 中仅仅是一个实现了 Filter 接口的 Java 类而已。

特点:双向,拦截请求,拦截响应

085a38363138766482470f3f254fcdba.png

作用:过滤器可以对所有的请求或者响应做拦截操作

为什么在 Web 开发中需要用到过滤器?

问题:为什么非得使用过滤器,我直接在 Servlet 中作判断不行吗?

开发遵循的原则:1.DRY原则(Don't Reeat Yourself,不要重复你自己):重复,意味着维护的成本很高。2.责任分离原则:谁擅长什么功能就做什么功能,Servlet 擅长的是逻辑而不是处理请求

举一个实际的例子:(处理 POST 请求中文编码的问题)

f61a7493016ac35f8da5c23af3cb88ec.png

Web 中过滤器的作用:1.可以在请求资源之前设置请求的编码2.可以进行登录校验3.可以进行请求参数的内容的过滤4.数据压缩 / 数据加密 / 数据格式的转换5.可以设置浏览器相关的数据

Filter 的开发和使用

对应于 Servlet 的开发步骤:

定义一个类,实现 Filter 接口

在 doFilter() 方法中对请求和响应进行过滤

在 web.xml 文件中进行 Filter 的配置(告诉服务器来管理当前的 Filter)

filter的名称filter类的全限定名指定对哪一个filter做的映射指定对哪些资源进行过滤

注意:此时 表示对哪些资源做过滤/拦截。例如:

/hello.jsp当前 Filter 就仅仅只对 hello.jsp 资源做拦截.

/index当前 Filter 就仅仅只对 /index 资源做拦截.

/*当前 Filter 就对所有资源做拦截.访问任意的资源,都会先进入该过滤器器.

/system/*当前 Filter 就对以 /system/ 打头的资源做拦截.如/system , /system/a, /system/a/b/c, /systema

Filter 映射细节

在启动服务器的时候,就创建了 Filter 对象并执行了初始化方法 init()。Filter 先于 Servlet 存在于服务端

在应用中允许存在多个 Filter ,到底哪一个 Filter 先执行哪一个后执行,这取决于在 web.xml 中定义的先后次序(如果使用注解配置,则 Filter 的执行顺序由 Filter 的类名的字母的顺序来决定,如 AFilter 和 BFilter,则先执行 AFilter)

一个 Filter 可以配置多个 也可以对指定的 Servlet 做过滤(注解通过 servletNames 指定,配置由 指定)

默认情况下,Filter 只对新的请求做拦截,如果是请求转发,则不会过滤。

配置项指定了 Filter 的过滤时间:

REQUEST:只对请求做过滤,默认选项,如果有该配置项则必须显式写明

FORWARD:只对请求转发(forword)方式做过滤

ERROR:只对跳转到全局的错误页面做过滤

INCLUDE:只对请求包含(include)方式做过滤

对应的注解属性为:dispatcherTypes

过滤器实例

戳这里

监听器

作用:1.监听 web 应用的创建和销毁2.attribute发生的变化。

web 应用:即ServletContext对象(jsp的隐式对象application)

除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。

了解详情戳这里

欢迎转载,转载请注明出处!@我没有三颗心脏CSDN博客:http://blog.csdn.net/qq939419061简书:http://www.jianshu.com/u/a40d61a49221

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值