初学Java Web(8)——过滤器和监听器

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

作用:
过滤器可以对所有的请求或者响应做拦截操作
为什么在 Web 开发中需要用到过滤器?
- 问题:为什么非得使用过滤器,我直接在 Servlet 中作判断不行吗?
- 开发遵循的原则:
1.DRY原则(Don't Reeat Yourself,不要重复你自己):重复,意味着维护的成本很高。
2.责任分离原则:谁擅长什么功能就做什么功能,Servlet 擅长的是逻辑而不是处理请求
举一个实际的例子:(处理 POST 请求中文编码的问题)

- Web 中过滤器的作用:
1.可以在请求资源之前设置请求的编码
2.可以进行登录校验
3.可以进行请求参数的内容的过滤
4.数据压缩 / 数据加密 / 数据格式的转换
5.可以设置浏览器相关的数据
Filter 的开发和使用
对应于 Servlet 的开发步骤:
- 定义一个类,实现 Filter 接口
- 在 doFilter() 方法中对请求和响应进行过滤
- 在 web.xml 文件中进行 Filter 的配置(告诉服务器来管理当前的 Filter)
<!-- 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>
- 注意:此时
<url-pattern>表示对哪些资源做过滤/拦截。例如: /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 可以配置多个
<url-pattern>也可以对指定的 Servlet 做过滤(注解通过servletNames指定,配置由<servlet-name>指定) - 默认情况下,Filter 只对新的请求做拦截,如果是请求转发,则不会过滤。
<dispatcher>配置项指定了 Filter 的过滤时间:REQUEST:只对请求做过滤,默认选项,如果有该配置项则必须显式写明FORWARD:只对请求转发(forword)方式做过滤ERROR:只对跳转到全局的错误页面做过滤INCLUDE:只对请求包含(include)方式做过滤- 对应的注解属性为:
dispatcherTypes
过滤器实例
监听器
作用:
1.监听 web 应用的创建和销毁
2.attribute发生的变化。web 应用:即ServletContext对象(jsp的隐式对象application)
除了对web应用的监听外,还能监听session和request的生命周期,以及他们的attribute发生的变化。
了解详情戳这里
欢迎转载,转载请注明出处!
简书ID:@我没有三颗心脏
github:wmyskxz
欢迎关注公众微信号:wmyskxz_javaweb
分享自己的Java Web学习之路以及各种Java学习资料
初学Java Web(8)——过滤器和监听器的更多相关文章
- 在Java Web程序中使用监听器可以通过以下两种方法
之前学习了很多涉及servlet的内容,本小结我们说一下监听器,说起监听器,编过桌面程序和手机App的都不陌生,常见的套路都是拖一个控件,然后给它绑定一个监听器,即可以对该对象的事件进行监听以便发生响 ...
- Java Web之过滤器(Filter)
转: Java Web之过滤器(Filter) 2018年07月31日 16:58:40 喻志强 阅读数 13705更多 所属专栏: Java Web入门 版权声明:本文为博主原创文章, 转载请注 ...
- Java Web使用过滤器防止Xss攻击,解决Xss漏洞
转: Java Web使用过滤器防止Xss攻击,解决Xss漏洞 2018年11月11日 10:41:27 我欲乘风,直上九天 阅读数:2687 版权声明:本文为博主原创文章,转载请注明出处!有时候 ...
- 初学 Java Web 开发,请远离各种框架,从 Servlet 开发
Web框架是开发者在使用某种语言编写Web应用服务端时关于架构的最佳实践.很多Web框架是从实际的Web项目抽取出来的,仅和Web的请求和响应处 理有关,形成一个基础,在开发别的应用项目的时候则可以从 ...
- ssh整合web.xml过滤器和监听器的配置 .
延迟加载过滤器 Hibernate 允许对关联对象.属性进行延迟加载,但是必须保证延迟加载的操作限于同一个 Hibernate Session 范围之内进行.如果 Service 层返回一个启用了延迟 ...
- 初学Java web(转)
转自 http://www.oschina.net/question/12_52027 OSCHINA 软件库有一个分类——Web框架,该分类中包含多种编程语言的将近500个项目. Web框架是开发者 ...
- Java Web 中 过滤器与拦截器的区别
过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的 action进行业务逻辑,比如过滤掉非法u ...
- 初学 Java Web 开发,从 Servlet 开发
1. 基本要求:Java 编程基础 有良好的 Java 语言编程基础,这是必须的,在讨论 Web 开发技术时提了一个 Java 编程基础的问题会被鄙视的. 2. 环境准备 (Eclipse + Tom ...
- 初学Java Web(9)——学生管理系统(简易版)总结
项目开始时间:2018年4月8日14:37:47 项目完成时间:2018年4月9日10:03:30 技术准备 这个项目是自己用于巩固 J2EE 相关知识的练手项目,非常简单,但是相关的功能却非常实用, ...
随机推荐
- 多项式与三角函数求导——BUAA OO 第一单元作业总结
第一次作业 需求简要说明 针对符合规定的多项式表达式输出其符合格式规定的导函数多项式,格式错误输出WRONG FORMAT! 带符号整数 支持前导0的带符号整数,符号可省略,如: +02.-16> ...
- [CF364D]Ghd
[CF364D]Ghd 题目大意: 有\(n(n\le10^6)\)个数\(A_{1\sim n}(A_i\le10^{12})\),从中选取\(\lceil\frac n2\rceil\)个数,使得 ...
- Windows 2003 防火墙开启后无法访问FTP解决办法
最近遇到一个比较郁闷的问题,服务器开启防火墙后电脑就无法访问服务器的防火墙,但是防火墙又不能关,在例外中添加端口21也不管用. 后来在网上终于找到了一个解决方案,可以在不关掉防火墙的情况下访问服务器的 ...
- 用clumsy模拟丢包测试socket库的失败重传
用python的socket库写了通信小程序,现在我需要通过软件模拟出在网络极差的情况下,socket底层解决丢包问题的能力怎么样,我一开始想的是分别在linux和windowns下分别测试,后来一想 ...
- redis + cookies 实现持久登入
通过登入把用户信息和token加载到redis中去, 将token和部分用户信息存储在cookie中, 下次登入时 判断cookie的token在redis中是否存在, 存在就把用户信息加载出来自动登 ...
- DAO模式
什么是DAO模式: DAO(Data Access Object Pattern)用于将低层的数据操作API与上层的业务逻辑层分离,其主要涉及以下几个部分: 1.Data Access Object ...
- C# 对串口的操作
初始化 串口 SerialPort sp = new SerialPort(); sp.PortName = BasicParameters.IniReadValue(strPath, "C ...
- unittest各个组件之间的关系
各个组件的含义: TestCase:测试用例,测试用例里面会有很多测试方法,是单元测试中最小维度的测试行为. TestSuite:测试套件,是测试用例的集合. TestFixure:测试固件,测试准备 ...
- JVM之垃圾回收
1.哪些内存需要回收?判断对象已死的方法(存活判定算法) 1.引用计数算法:难以解决对象之间相互循环引用的问题,不使用. 2.可达性分析算法:通过一系列“GC Root”对象作为起始点向下搜索,所走过 ...
- NeuChar 平台使用及开发教程 索引
什么是 NeuChar? NeuChar 是由盛派(Senparc)团队发布的新一代跨平台服务系统,其中包含了开放的跨平台通讯标准及核心计算模块(Senparc.NeuChar.dll)以及配套的云管 ...