JAVA语言之初学Java Web(8)—过滤器和监听器
小标 2018-07-24 来源 : 阅读 1226 评论 0

摘要:本文主要向大家介绍了JAVA语言之初学Java Web(8)—过滤器和监听器,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

本文主要向大家介绍了JAVA语言之初学Java Web(8)—过滤器和监听器,通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助。

什么是过滤器

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

· 

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

· 

· 

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

· 

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

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

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

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

 

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

Filter 的开发和使用

对应于 Servlet 的开发步骤:

1. 定义一个类,实现 Filter 接口

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

3. 

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

4. 

<!-- web.xml --><filter><filter-name>filter的名称</filter-name><filter-class>filter类的全限定名</filter-class></filter><filter-mapping><filter-name>指定对哪一个filter做的映射</filter-name><url-pattern>指定对哪些资源进行过滤</url-pattern></filter-mapping>

5. 

· 注意:此时 <url-pattern> 表示对哪些资源做过滤/拦截。例如:

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

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

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

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

Filter 映射细节

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

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

3. 一个 Filter 可以配置多个 <url-pattern> 也可以对指定的 Servlet 做过滤(注解通过 servletNames 指定,配置由 <servlet-name> 指定)

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

· <dispatcher>配置项指定了 Filter 的过滤时间:

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

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

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

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

· 对应的注解属性为:dispatcherTypes

监听器

· 

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

· 

· 

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

· 

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

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注编程语言JAVA频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程